diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8b4fb974..f6c332da 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,9 @@ jobs: build-linux-windows: name: Build Linux & Windows needs: test - runs-on: ubuntu-latest + # Pinned to 22.04 (glibc 2.35) so release binaries run on Ubuntu 22.04+, + # Debian 12+, RHEL 9+. ubuntu-latest (24.04, glibc 2.39) breaks older hosts. + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 @@ -171,12 +173,12 @@ jobs: **One-liner:** ```bash - curl -fsSL https://raw.githubusercontent.com/BitBadges/bitbadgeschain/master/install.sh | sh + curl -fsSL https://install.bitbadges.io | sh ``` **Testnet:** ```bash - curl -fsSL https://raw.githubusercontent.com/BitBadges/bitbadgeschain/master/install.sh | sh -s -- --testnet + curl -fsSL https://install.bitbadges.io | sh -s -- --testnet ``` **SDK CLI:** diff --git a/app/app.go b/app/app.go index 1db4ca5a..332d0947 100644 --- a/app/app.go +++ b/app/app.go @@ -7,18 +7,18 @@ import ( _ "cosmossdk.io/api/cosmos/tx/config/v1" // import for side-effects clienthelpers "cosmossdk.io/client/v2/helpers" "cosmossdk.io/depinject" - "cosmossdk.io/log" - storetypes "cosmossdk.io/store/types" - _ "cosmossdk.io/x/circuit" // import for side-effects - circuitkeeper "cosmossdk.io/x/circuit/keeper" - _ "cosmossdk.io/x/evidence" // import for side-effects - evidencekeeper "cosmossdk.io/x/evidence/keeper" - feegrantkeeper "cosmossdk.io/x/feegrant/keeper" - _ "cosmossdk.io/x/feegrant/module" // import for side-effects - txsigning "cosmossdk.io/x/tx/signing" - _ "cosmossdk.io/x/upgrade" // import for side-effects - - upgradekeeper "cosmossdk.io/x/upgrade/keeper" + "cosmossdk.io/log/v2" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" + _ "github.com/cosmos/cosmos-sdk/contrib/x/circuit" // import for side-effects + circuitkeeper "github.com/cosmos/cosmos-sdk/contrib/x/circuit/keeper" + _ "github.com/cosmos/cosmos-sdk/x/evidence" // import for side-effects + evidencekeeper "github.com/cosmos/cosmos-sdk/x/evidence/keeper" + feegrantkeeper "github.com/cosmos/cosmos-sdk/x/feegrant/keeper" + _ "github.com/cosmos/cosmos-sdk/x/feegrant/module" // import for side-effects + txsigning "github.com/cosmos/cosmos-sdk/x/tx/signing" + _ "github.com/cosmos/cosmos-sdk/x/upgrade" // import for side-effects + + upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" abci "github.com/cometbft/cometbft/abci/types" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/baseapp" @@ -44,8 +44,6 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" _ "github.com/cosmos/cosmos-sdk/x/consensus" // import for side-effects consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" - _ "github.com/cosmos/cosmos-sdk/x/crisis" // import for side-effects - crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper" _ "github.com/cosmos/cosmos-sdk/x/distribution" // import for side-effects distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" @@ -55,8 +53,7 @@ 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" - groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper" - _ "github.com/cosmos/cosmos-sdk/x/group/module" // import for side-effects +// x/group removed in v0.54 (moved to Cosmos Enterprise) _ "github.com/cosmos/cosmos-sdk/x/mint" // import for side-effects mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" _ "github.com/cosmos/cosmos-sdk/x/params" // import for side-effects @@ -71,11 +68,11 @@ import ( packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10/packetforward" packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10/packetforward/keeper" packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10/packetforward/types" - _ "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts" // import for side-effects - icacontrollerkeeper "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller/keeper" - icahostkeeper "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/keeper" - porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" - ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" + _ "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts" // import for side-effects + icacontrollerkeeper "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/controller/keeper" + icahostkeeper "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/host/keeper" + porttypes "github.com/cosmos/ibc-go/v11/modules/core/05-port/types" + ibckeeper "github.com/cosmos/ibc-go/v11/modules/core/keeper" sdkmempool "github.com/cosmos/cosmos-sdk/types/mempool" evmante "github.com/cosmos/evm/ante" @@ -83,10 +80,10 @@ import ( evmmempool "github.com/cosmos/evm/mempool" erc20keeper "github.com/cosmos/evm/x/erc20/keeper" feemarketkeeper "github.com/cosmos/evm/x/feemarket/keeper" - transferkeeper "github.com/cosmos/ibc-go/v10/modules/apps/transfer/keeper" - precisebank "github.com/cosmos/evm/x/precisebank" - precisebankkeeper "github.com/cosmos/evm/x/precisebank/keeper" - precisebanktypes "github.com/cosmos/evm/x/precisebank/types" + transferkeeper "github.com/cosmos/ibc-go/v11/modules/apps/transfer/keeper" + precisebank "github.com/cosmos/evm/contrib/x/precisebank" + precisebankkeeper "github.com/cosmos/evm/contrib/x/precisebank/keeper" + precisebanktypes "github.com/cosmos/evm/contrib/x/precisebank/types" evmkeeper "github.com/cosmos/evm/x/vm/keeper" evmtypes "github.com/cosmos/evm/x/vm/types" "github.com/ethereum/go-ethereum/common" @@ -143,13 +140,13 @@ type App struct { SlashingKeeper slashingkeeper.Keeper MintKeeper mintkeeper.Keeper GovKeeper *govkeeper.Keeper - CrisisKeeper *crisiskeeper.Keeper + // CrisisKeeper removed in v0.54 (moved to contrib) UpgradeKeeper *upgradekeeper.Keeper ParamsKeeper paramskeeper.Keeper AuthzKeeper authzkeeper.Keeper EvidenceKeeper evidencekeeper.Keeper FeeGrantKeeper feegrantkeeper.Keeper - GroupKeeper groupkeeper.Keeper + CircuitBreakerKeeper circuitkeeper.Keeper // IBC @@ -284,13 +281,12 @@ func New( &app.SlashingKeeper, &app.MintKeeper, &app.GovKeeper, - &app.CrisisKeeper, &app.UpgradeKeeper, &app.ParamsKeeper, &app.AuthzKeeper, &app.EvidenceKeeper, &app.FeeGrantKeeper, - &app.GroupKeeper, + &app.CircuitBreakerKeeper, &app.TokenizationKeeper, &app.ManagerSplitterKeeper, @@ -395,7 +391,7 @@ func New( } /**** Module Options ****/ - app.ModuleManager.RegisterInvariants(app.CrisisKeeper) + // Crisis invariants removed in v0.54 // create the simulation manager and define the order of the modules for deterministic simulations overrideModules := map[string]module.AppModuleSimulation{ diff --git a/app/app_config.go b/app/app_config.go index 6cd514d0..75f1641e 100644 --- a/app/app_config.go +++ b/app/app_config.go @@ -1,8 +1,6 @@ package app import ( - "time" - gammtypes "github.com/bitbadges/bitbadgeschain/x/gamm/types" poolmanagertypes "github.com/bitbadges/bitbadgeschain/x/poolmanager/types" _ "github.com/bitbadges/bitbadgeschain/x/sendmanager/module" @@ -13,15 +11,13 @@ import ( authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1" authzmodulev1 "cosmossdk.io/api/cosmos/authz/module/v1" bankmodulev1 "cosmossdk.io/api/cosmos/bank/module/v1" - circuitmodulev1 "cosmossdk.io/api/cosmos/circuit/module/v1" + circuitmodulev1 "github.com/cosmos/cosmos-sdk/contrib/api/cosmos/circuit/module/v1" consensusmodulev1 "cosmossdk.io/api/cosmos/consensus/module/v1" - crisismodulev1 "cosmossdk.io/api/cosmos/crisis/module/v1" distrmodulev1 "cosmossdk.io/api/cosmos/distribution/module/v1" evidencemodulev1 "cosmossdk.io/api/cosmos/evidence/module/v1" feegrantmodulev1 "cosmossdk.io/api/cosmos/feegrant/module/v1" genutilmodulev1 "cosmossdk.io/api/cosmos/genutil/module/v1" govmodulev1 "cosmossdk.io/api/cosmos/gov/module/v1" - groupmodulev1 "cosmossdk.io/api/cosmos/group/module/v1" mintmodulev1 "cosmossdk.io/api/cosmos/mint/module/v1" paramsmodulev1 "cosmossdk.io/api/cosmos/params/module/v1" slashingmodulev1 "cosmossdk.io/api/cosmos/slashing/module/v1" @@ -31,28 +27,26 @@ import ( vestingmodulev1 "cosmossdk.io/api/cosmos/vesting/module/v1" "cosmossdk.io/core/appconfig" - circuittypes "cosmossdk.io/x/circuit/types" - evidencetypes "cosmossdk.io/x/evidence/types" - "cosmossdk.io/x/feegrant" - upgradetypes "cosmossdk.io/x/upgrade/types" + circuittypes "github.com/cosmos/cosmos-sdk/contrib/x/circuit/types" + evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types" + "github.com/cosmos/cosmos-sdk/x/feegrant" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/cosmos/cosmos-sdk/runtime" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" "github.com/cosmos/cosmos-sdk/x/authz" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" consensustypes "github.com/cosmos/cosmos-sdk/x/consensus/types" - crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - "github.com/cosmos/cosmos-sdk/x/group" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" 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" - icatypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types" - ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + icatypes "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/types" + ibctransfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" tokenizationmodulev1 "github.com/bitbadges/bitbadgeschain/api/tokenization/module" _ "github.com/bitbadges/bitbadgeschain/x/tokenization/module" // import for side-effects @@ -70,10 +64,9 @@ import ( erc20types "github.com/cosmos/evm/x/erc20/types" feemarkettypes "github.com/cosmos/evm/x/feemarket/types" - precisebanktypes "github.com/cosmos/evm/x/precisebank/types" + precisebanktypes "github.com/cosmos/evm/contrib/x/precisebank/types" evmtypes "github.com/cosmos/evm/x/vm/types" - "google.golang.org/protobuf/types/known/durationpb" // this line is used by starport scaffolding # stargate/app/moduleImport ) @@ -90,7 +83,6 @@ var ( slashingtypes.ModuleName, govtypes.ModuleName, minttypes.ModuleName, - crisistypes.ModuleName, ibcexported.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, @@ -102,7 +94,6 @@ var ( paramstypes.ModuleName, upgradetypes.ModuleName, vestingtypes.ModuleName, - group.ModuleName, consensustypes.ModuleName, circuittypes.ModuleName, // chain modules @@ -153,11 +144,10 @@ var ( endBlockers = []string{ // cosmos sdk modules - crisistypes.ModuleName, + banktypes.ModuleName, // REQUIRED for v0.54 - must be first for BlockSTM support govtypes.ModuleName, stakingtypes.ModuleName, feegrant.ModuleName, - group.ModuleName, genutiltypes.ModuleName, // ibc modules ibcexported.ModuleName, @@ -306,13 +296,7 @@ var ( Name: minttypes.ModuleName, Config: appconfig.WrapAny(&mintmodulev1.Module{}), }, - { - Name: group.ModuleName, - Config: appconfig.WrapAny(&groupmodulev1.Module{ - MaxExecutionPeriod: durationpb.New(time.Second * 1209600), - MaxMetadataLen: 255, - }), - }, + // x/group removed in v0.54 (moved to Cosmos Enterprise) { Name: feegrant.ModuleName, Config: appconfig.WrapAny(&feegrantmodulev1.Module{}), @@ -321,10 +305,7 @@ var ( Name: govtypes.ModuleName, Config: appconfig.WrapAny(&govmodulev1.Module{}), }, - { - Name: crisistypes.ModuleName, - Config: appconfig.WrapAny(&crisismodulev1.Module{}), - }, + // x/crisis removed in v0.54 (moved to contrib, no longer actively maintained) { Name: consensustypes.ModuleName, Config: appconfig.WrapAny(&consensusmodulev1.Module{}), diff --git a/app/evm.go b/app/evm.go index 49a5341a..473fefc8 100644 --- a/app/evm.go +++ b/app/evm.go @@ -17,7 +17,7 @@ import ( evmkeeper "github.com/cosmos/evm/x/vm/keeper" evmtypes "github.com/cosmos/evm/x/vm/types" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" servertypes "github.com/cosmos/cosmos-sdk/server/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/app/evm_mempool.go b/app/evm_mempool.go index 0b504992..cc4758ef 100644 --- a/app/evm_mempool.go +++ b/app/evm_mempool.go @@ -3,7 +3,7 @@ package app import ( "fmt" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" servertypes "github.com/cosmos/cosmos-sdk/server/types" diff --git a/app/export.go b/app/export.go index e55c844d..788a979b 100644 --- a/app/export.go +++ b/app/export.go @@ -5,7 +5,7 @@ import ( "fmt" "log" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" servertypes "github.com/cosmos/cosmos-sdk/server/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/app/gamm.go b/app/gamm.go index 1a56f2a0..33891b7e 100644 --- a/app/gamm.go +++ b/app/gamm.go @@ -2,7 +2,7 @@ package app import ( "cosmossdk.io/core/appmodule" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" servertypes "github.com/cosmos/cosmos-sdk/server/types" "github.com/cosmos/cosmos-sdk/types/module" diff --git a/app/ibc.go b/app/ibc.go index b36e15b6..d05bda81 100644 --- a/app/ibc.go +++ b/app/ibc.go @@ -2,7 +2,7 @@ package app import ( "cosmossdk.io/core/appmodule" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" servertypes "github.com/cosmos/cosmos-sdk/server/types" @@ -10,28 +10,28 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - transferkeeper "github.com/cosmos/ibc-go/v10/modules/apps/transfer/keeper" - icamodule "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts" - icacontroller "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller" - icacontrollerkeeper "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller/keeper" - icacontrollertypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller/types" - icahost "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types" - ibccallbacks "github.com/cosmos/ibc-go/v10/modules/apps/callbacks" - ibctransfer "github.com/cosmos/ibc-go/v10/modules/apps/transfer" - ibctransfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" + transferkeeper "github.com/cosmos/ibc-go/v11/modules/apps/transfer/keeper" + icamodule "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts" + icacontroller "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/controller" + icacontrollerkeeper "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/controller/types" + icahost "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/cosmos/ibc-go/v11/modules/apps/27-interchain-accounts/types" + ibccallbacks "github.com/cosmos/ibc-go/v11/modules/apps/callbacks" + ibctransfer "github.com/cosmos/ibc-go/v11/modules/apps/transfer" + ibctransfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" sdk "github.com/cosmos/cosmos-sdk/types" - ibc "github.com/cosmos/ibc-go/v10/modules/core" - ibcclienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" - solomachine "github.com/cosmos/ibc-go/v10/modules/light-clients/06-solomachine" - ibctm "github.com/cosmos/ibc-go/v10/modules/light-clients/07-tendermint" + ibc "github.com/cosmos/ibc-go/v11/modules/core" + ibcclienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v11/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v11/modules/core/keeper" + solomachine "github.com/cosmos/ibc-go/v11/modules/light-clients/06-solomachine" + ibctm "github.com/cosmos/ibc-go/v11/modules/light-clients/07-tendermint" // this line is used by starport scaffolding # ibc/app/import tokenizationmoduletypes "github.com/bitbadges/bitbadgeschain/x/tokenization/types" @@ -52,7 +52,7 @@ import ( ibcratelimitkeeper "github.com/bitbadges/bitbadgeschain/x/ibc-rate-limit/keeper" ibcratelimitmodule "github.com/bitbadges/bitbadgeschain/x/ibc-rate-limit/module" ibcratelimittypes "github.com/bitbadges/bitbadgeschain/x/ibc-rate-limit/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" ) // CombinedIBCHooks combines rate limit and custom hooks @@ -139,11 +139,10 @@ func (app *App) registerIBCModules(appOpts servertypes.AppOptions) error { // register the key tables for legacy param subspaces app.ParamsKeeper.Subspace(ibchookstypes.ModuleName).WithKeyTable(ibchookstypes.ParamKeyTable()) - // Create IBC keeper (IBC v10 - no capability keeper needed) + // Create IBC keeper (IBC v11 - ParamSubspace removed) app.IBCKeeper = ibckeeper.NewKeeper( app.appCodec, runtime.NewKVStoreService(app.GetKey(ibcexported.StoreKey)), - app.GetSubspace(ibcexported.ModuleName), app.UpgradeKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) @@ -163,13 +162,13 @@ func (app *App) registerIBCModules(appOpts servertypes.AppOptions) error { govRouter := govv1beta1.NewRouter() govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler) - // Create IBC-Go transfer keeper (v0.6.0: ERC20 conversions now handled by ICS20 precompile) + // Create IBC-Go transfer keeper (IBC v11: AddressCodec added) app.TransferKeeper = transferkeeper.NewKeeper( app.appCodec, + app.AccountKeeper.AddressCodec(), runtime.NewKVStoreService(app.GetKey(ibctransfertypes.StoreKey)), nil, // ICS4Wrapper - set later via WithICS4Wrapper app.IBCKeeper.ChannelKeeper, // ChannelKeeper - app.IBCKeeper.ChannelKeeper, // PortKeeper app.MsgServiceRouter(), // MessageRouter app.AccountKeeper, app.BankKeeper, @@ -181,19 +180,18 @@ func (app *App) registerIBCModules(appOpts servertypes.AppOptions) error { // We'll create it after the transfer stack is set up app.PacketForwardKeeper = packetforwardkeeper.NewKeeper( app.appCodec, + app.AccountKeeper.AddressCodec(), runtime.NewKVStoreService(app.GetKey(packetforwardtypes.StoreKey)), app.TransferKeeper, app.IBCKeeper.ChannelKeeper, app.BankKeeper, - app.IBCKeeper.ChannelKeeper, // ICS4Wrapper authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) - // Create interchain account keepers (IBC v10 - updated API) + // Create interchain account keepers (IBC v11 - ParamSubspace removed) app.ICAHostKeeper = icahostkeeper.NewKeeper( app.appCodec, runtime.NewKVStoreService(app.GetKey(icahosttypes.StoreKey)), - app.GetSubspace(icatypes.ModuleName), app.IBCKeeper.ChannelKeeper, // ICS4Wrapper app.IBCKeeper.ChannelKeeper, // ChannelKeeper app.AccountKeeper, @@ -205,7 +203,6 @@ func (app *App) registerIBCModules(appOpts servertypes.AppOptions) error { app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( app.appCodec, runtime.NewKVStoreService(app.GetKey(icacontrollertypes.StoreKey)), - app.GetSubspace(icatypes.ModuleName), app.IBCKeeper.ChannelKeeper, // ICS4Wrapper app.IBCKeeper.ChannelKeeper, // ChannelKeeper app.MsgServiceRouter(), diff --git a/app/ibc_hooks_wrapper.go b/app/ibc_hooks_wrapper.go index 8bcc0de4..be80485d 100644 --- a/app/ibc_hooks_wrapper.go +++ b/app/ibc_hooks_wrapper.go @@ -2,9 +2,9 @@ package app import ( sdk "github.com/cosmos/cosmos-sdk/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v11/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" customhooks "github.com/bitbadges/bitbadgeschain/x/custom-hooks" ibchooks "github.com/bitbadges/bitbadgeschain/x/ibc-hooks" @@ -68,3 +68,8 @@ func (w *customHooksWrapper) OnAcknowledgementPacket(ctx sdk.Context, packetID s func (w *customHooksWrapper) OnTimeoutPacket(ctx sdk.Context, packetID string, packet channeltypes.Packet, relayer sdk.AccAddress) error { return w.app.OnTimeoutPacket(ctx, packetID, packet, relayer) } + +// IBC v11: IBCModule now requires SetICS4Wrapper. Forward to the wrapped app. +func (w *customHooksWrapper) SetICS4Wrapper(wrapper porttypes.ICS4Wrapper) { + w.app.SetICS4Wrapper(wrapper) +} diff --git a/app/ibc_legacy_localhost.go b/app/ibc_legacy_localhost.go index affb6e79..7cc2868f 100644 --- a/app/ibc_legacy_localhost.go +++ b/app/ibc_legacy_localhost.go @@ -4,8 +4,8 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/gogoproto/proto" - ibcclienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + ibcclienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ) // LegacyLocalhostClientState is the legacy 09-localhost ClientState type from IBC v8. diff --git a/app/noop_contract_keeper.go b/app/noop_contract_keeper.go index 49790498..859fcc11 100644 --- a/app/noop_contract_keeper.go +++ b/app/noop_contract_keeper.go @@ -2,10 +2,10 @@ package app import ( sdk "github.com/cosmos/cosmos-sdk/types" - ibccallbackstypes "github.com/cosmos/ibc-go/v10/modules/apps/callbacks/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + ibccallbackstypes "github.com/cosmos/ibc-go/v11/modules/apps/callbacks/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ) // NoopContractKeeper is a no-op implementation of ibccallbackstypes.ContractKeeper diff --git a/app/sim_test.go b/app/sim_test.go index dddebe7f..8731b649 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -11,10 +11,10 @@ import ( "testing" "time" - "cosmossdk.io/log" - "cosmossdk.io/store" - storetypes "cosmossdk.io/store/types" - "cosmossdk.io/x/feegrant" + "cosmossdk.io/log/v2" + "github.com/cosmos/cosmos-sdk/store/v2" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" + "github.com/cosmos/cosmos-sdk/x/feegrant" abci "github.com/cometbft/cometbft/abci/types" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" dbm "github.com/cosmos/cosmos-db" diff --git a/app/test_helpers.go b/app/test_helpers.go index 4158d9cf..f58b56f2 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -7,7 +7,7 @@ import ( "time" clienthelpers "cosmossdk.io/client/v2/helpers" - log "cosmossdk.io/log" + log "cosmossdk.io/log/v2" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/crypto/ed25519" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" diff --git a/app/upgrades.go b/app/upgrades.go index d1b7f24b..11d0701e 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -1,8 +1,8 @@ package app import ( - storetypes "cosmossdk.io/store/types" - upgradetypes "cosmossdk.io/x/upgrade/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" v30 "github.com/bitbadges/bitbadgeschain/app/upgrades/v30" ) @@ -37,8 +37,9 @@ func (app *App) RegisterUpgradeHandlers() { case v30.UpgradeName: storeUpgrades = &storetypes.StoreUpgrades{ Renamed: []storetypes.StoreRename{}, - // v30: remove deprecated x/anchor and x/maps modules - Deleted: []string{"anchor", "maps"}, + // v30: remove x/anchor, x/maps, x/group, x/crisis + // (group/crisis removed by SDK v0.54 migration; anchor/maps deprecated) + Deleted: []string{"anchor", "maps", "group", "crisis"}, Added: []string{}, } } diff --git a/app/upgrades/v30/upgrades.go b/app/upgrades/v30/upgrades.go index 7a5a001f..3afa0767 100644 --- a/app/upgrades/v30/upgrades.go +++ b/app/upgrades/v30/upgrades.go @@ -3,7 +3,7 @@ package v30 import ( "context" - upgradetypes "cosmossdk.io/x/upgrade/types" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" ibcratelimitkeeper "github.com/bitbadges/bitbadgeschain/x/ibc-rate-limit/keeper" poolmanagerkeeper "github.com/bitbadges/bitbadgeschain/x/poolmanager" tokenizationkeeper "github.com/bitbadges/bitbadgeschain/x/tokenization/keeper" diff --git a/cmd/bitbadgeschaind/cmd/cli_cmd.go b/cmd/bitbadgeschaind/cmd/cli_cmd.go index 0e46817b..b856d4ab 100644 --- a/cmd/bitbadgeschaind/cmd/cli_cmd.go +++ b/cmd/bitbadgeschaind/cmd/cli_cmd.go @@ -12,16 +12,12 @@ import ( // through this one command — `bitbadgeschaind cli ` — without // needing a dedicated Go file per alias. // -// This is the canonical form going forward. The existing short aliases -// (sdk / api / builder) stay around for one release cycle for backwards -// compat but redirect through this same forwarder. -// // Examples: // -// bitbadgeschaind cli sdk review tx.json +// bitbadgeschaind cli check tx.json // bitbadgeschaind cli api tokens get-collection 1 -// bitbadgeschaind cli builder templates vault --backing-coin USDC -// bitbadgeschaind cli builder create-with-burner --msg-file col.json --manager bb1... +// bitbadgeschaind cli build vault --backing-coin USDC +// bitbadgeschaind cli deploy --burner --msg-file col.json --manager bb1... // bitbadgeschaind cli config set apiKey // // Any future top-level subcommand added to bitbadges-cli is automatically @@ -35,12 +31,23 @@ func CliCmd() *cobra.Command { Usage: bitbadgeschaind cli [args...] -Where is any top-level bitbadges-cli subcommand: - sdk — SDK analysis, review, interpret, address tools, docs - api — 104+ indexer API routes from your terminal - builder — template builders, create-with-burner, burner wallets, - review/verify/simulate/doctor, session tools, builder tools - config — manage ~/.bitbadges/config.json (base URL, API keys per network) +The bitbadges-cli surface is flat — every verb is top-level. Common +subcommands (run ` + "`bitbadgeschaind cli --help`" + ` for the full grouped list): + + Build & ship a transaction: + build, tools, tool, check, explain, simulate, preview, deploy + + Indexer access: + api, auth + + Local state: + config, burner, session + + Discovery: + docs, skills, resources, doctor + + Address & lookup: + address, alias, lookup, gen-list-id New top-level bitbadges-cli subcommands automatically reach here without needing a Go alias — this wrapper is the single bridge between the chain diff --git a/cmd/bitbadgeschaind/cmd/commands.go b/cmd/bitbadgeschaind/cmd/commands.go index 73267485..e622f948 100644 --- a/cmd/bitbadgeschaind/cmd/commands.go +++ b/cmd/bitbadgeschaind/cmd/commands.go @@ -5,7 +5,7 @@ import ( "fmt" "io" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" confixcmd "cosmossdk.io/tools/confix/cmd" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" @@ -18,7 +18,6 @@ import ( servertypes "github.com/cosmos/cosmos-sdk/server/types" "github.com/cosmos/cosmos-sdk/types/module" authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" - "github.com/cosmos/cosmos-sdk/x/crisis" genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" cosmosevmcmd "github.com/cosmos/evm/client" cosmosevmserver "github.com/cosmos/evm/server" @@ -86,11 +85,11 @@ func initRootCmd( txCommand(), bitbadgesclient.KeyCommands(app.DefaultNodeHome, false), // false = don't default to eth keys, but support them CliCmd(), // canonical forwarder — `bitbadgeschaind cli [args...]` reaches every bitbadges-cli subcommand + SignArbitraryCmd(), ) } func addModuleInitFlags(startCmd *cobra.Command) { - crisis.AddModuleInitFlags(startCmd) } // genesisCommand builds genesis-related `bitbadgeschaind genesis` command. Users may provide application specific commands as a parameter diff --git a/cmd/bitbadgeschaind/cmd/root.go b/cmd/bitbadgeschaind/cmd/root.go index 805f237f..c8df9fd0 100644 --- a/cmd/bitbadgeschaind/cmd/root.go +++ b/cmd/bitbadgeschaind/cmd/root.go @@ -6,8 +6,8 @@ import ( "cosmossdk.io/client/v2/autocli" "cosmossdk.io/depinject" - "cosmossdk.io/log" - txsigning "cosmossdk.io/x/tx/signing" + "cosmossdk.io/log/v2" + txsigning "github.com/cosmos/cosmos-sdk/x/tx/signing" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/config" "github.com/cosmos/cosmos-sdk/client/flags" diff --git a/cmd/bitbadgeschaind/cmd/sign_arbitrary.go b/cmd/bitbadgeschaind/cmd/sign_arbitrary.go new file mode 100644 index 00000000..f46c3d54 --- /dev/null +++ b/cmd/bitbadgeschaind/cmd/sign_arbitrary.go @@ -0,0 +1,213 @@ +package cmd + +import ( + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "os" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + cryptokeyring "github.com/cosmos/cosmos-sdk/crypto/keyring" + sdk "github.com/cosmos/cosmos-sdk/types" + signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" + "github.com/spf13/cobra" +) + +const ( + flagMessageFile = "message-file" + flagOutputMode = "output" + + algoSecp256k1 = "secp256k1" + formatADR36 = "adr36" +) + +// SignArbitraryCmd produces an ADR-36 signature over an arbitrary +// message using a key from the local keyring. Output is the JSON +// envelope the bitbadges-cli `auth verify` flow expects: +// +// { format, address, pubKey, signature, message, algo } +// +// The signed bytes are byte-equal to Keplr's serializeSignDoc( +// makeADR36AminoSignDoc(...)) and verify via @keplr-wallet/cosmos +// verifyADR36Amino. +// +// v1 supports secp256k1 keys only; eth_secp256k1 keys are rejected +// with a clear error pointing at a future --format eip191 flag. +func SignArbitraryCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "sign-arbitrary [message]", + Short: "Sign an arbitrary message via ADR-36 (offline; for CLI auth flows)", + Long: `Sign an arbitrary message with a local keyring key, producing an +ADR-36-formatted signature suitable for posting to BitBadges +indexer's /api/v0/auth/verify endpoint. + +This is a pure offline operation — no network calls, no chain state, +no transaction is broadcast. It exists to bridge the BitBadges CLI +auth flow ('bitbadges-cli auth verify --signature ...') with keys +held in the chain binary's keyring, without exposing the raw private +key. + +Message is read from (in order): positional argument, --message-file, +or stdin when piped. Reading from a TTY without a message source +prints usage rather than hanging. + +Examples: + bitbadgeschaind sign-arbitrary mykey "auth challenge text" + echo -n "auth challenge text" | bitbadgeschaind sign-arbitrary mykey + bitbadgeschaind sign-arbitrary mykey --message-file challenge.txt`, + Args: cobra.RangeArgs(1, 2), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + message, err := readMessage(cmd, args) + if err != nil { + return err + } + + record, err := loadKey(clientCtx.Keyring, args[0]) + if err != nil { + return fmt.Errorf("load key %q: %w", args[0], err) + } + + pub, err := record.GetPubKey() + if err != nil { + return fmt.Errorf("get pubkey: %w", err) + } + if pub.Type() != algoSecp256k1 { + return fmt.Errorf( + "key %q has algo %q; only %q is supported in v1 "+ + "(eth_secp256k1 / EIP-191 personal_sign support is a planned --format eip191 follow-up). "+ + "Create a compatible key with: bitbadgeschaind keys add --key-type secp256k1", + args[0], pub.Type(), algoSecp256k1, + ) + } + + addr, err := record.GetAddress() + if err != nil { + return fmt.Errorf("derive address: %w", err) + } + bech := addr.String() + + signBytes, err := buildADR36SignBytes(bech, message) + if err != nil { + return fmt.Errorf("build sign-doc: %w", err) + } + + sig, _, err := clientCtx.Keyring.SignByAddress( + addr, + signBytes, + signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + ) + if err != nil { + return fmt.Errorf("sign: %w", err) + } + + outputMode, _ := cmd.Flags().GetString(flagOutputMode) + return emitOutput(cmd.OutOrStdout(), outputMode, map[string]any{ + "format": formatADR36, + "algo": pub.Type(), + "address": bech, + "pubKey": base64.StdEncoding.EncodeToString(pub.Bytes()), + "signature": base64.StdEncoding.EncodeToString(sig), + "message": message, + }) + }, + } + + cmd.Flags().String(flagMessageFile, "", "Read message from file (mutually exclusive with positional message and stdin)") + cmd.Flags().String(flagOutputMode, "json", "Output mode: json | raw (raw prints only the base64 signature)") + + flags.AddKeyringFlags(cmd.Flags()) + cmd.Flags().String(flags.FlagHome, "", "The application home directory") + return cmd +} + +// buildADR36SignBytes constructs the canonical ADR-36 StdSignDoc and +// returns its serialized form (sorted keys, HTML-escaped <>&). Bytes +// are byte-equal to Keplr's serializeSignDoc(makeADR36AminoSignDoc(...)) +// — verified by spike against @keplr-wallet/cosmos. +func buildADR36SignBytes(signer, message string) ([]byte, error) { + doc := map[string]any{ + "account_number": "0", + "chain_id": "", + "fee": map[string]any{"amount": []any{}, "gas": "0"}, + "memo": "", + "msgs": []any{ + map[string]any{ + "type": "sign/MsgSignData", + "value": map[string]any{ + "signer": signer, + "data": base64.StdEncoding.EncodeToString([]byte(message)), + }, + }, + }, + "sequence": "0", + } + raw, err := json.Marshal(doc) + if err != nil { + return nil, err + } + return sdk.MustSortJSON(raw), nil +} + +// loadKey accepts either a key name or a bech32 address. +func loadKey(kr cryptokeyring.Keyring, ref string) (*cryptokeyring.Record, error) { + if addr, err := sdk.AccAddressFromBech32(ref); err == nil { + return kr.KeyByAddress(addr) + } + return kr.Key(ref) +} + +// readMessage resolves the message from (in priority order) the +// positional argument, --message-file, then stdin (only when stdin is +// not a TTY). Multiple sources is an error. +func readMessage(cmd *cobra.Command, args []string) (string, error) { + hasPositional := len(args) >= 2 + filePath, _ := cmd.Flags().GetString(flagMessageFile) + + switch { + case hasPositional && filePath != "": + return "", errors.New("specify either a positional message or --message-file, not both") + case hasPositional: + return args[1], nil + case filePath != "": + raw, err := os.ReadFile(filePath) + if err != nil { + return "", fmt.Errorf("read --message-file %s: %w", filePath, err) + } + return string(raw), nil + } + + stat, err := os.Stdin.Stat() + if err != nil { + return "", fmt.Errorf("stat stdin: %w", err) + } + if (stat.Mode() & os.ModeCharDevice) != 0 { + return "", errors.New("no message provided: pass as positional arg, --message-file, or pipe via stdin") + } + raw, err := io.ReadAll(os.Stdin) + if err != nil { + return "", fmt.Errorf("read stdin: %w", err) + } + return string(raw), nil +} + +func emitOutput(w io.Writer, mode string, payload map[string]any) error { + switch mode { + case "raw": + _, err := fmt.Fprintln(w, payload["signature"]) + return err + case "", "json": + enc := json.NewEncoder(w) + enc.SetIndent("", " ") + return enc.Encode(payload) + default: + return fmt.Errorf("unknown --output mode %q (expected json|raw)", mode) + } +} diff --git a/cmd/bitbadgeschaind/cmd/sign_arbitrary_test.go b/cmd/bitbadgeschaind/cmd/sign_arbitrary_test.go new file mode 100644 index 00000000..c7011aa3 --- /dev/null +++ b/cmd/bitbadgeschaind/cmd/sign_arbitrary_test.go @@ -0,0 +1,209 @@ +//go:build test +// +build test + +package cmd + +import ( + "bytes" + "context" + "encoding/base64" + "encoding/json" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + "github.com/cosmos/cosmos-sdk/crypto/hd" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + sdk "github.com/cosmos/cosmos-sdk/types" + evmcryptocodec "github.com/cosmos/evm/crypto/codec" + evmhd "github.com/cosmos/evm/crypto/hd" + + "github.com/bitbadges/bitbadgeschain/app/params" +) + +func init() { + // SignArbitraryCmd derives bech32 addresses with the chain's + // configured prefix; tests must set it before any address ops. + params.SetAddressPrefixes() +} + +// TestBuildADR36SignBytes_GoldenVector locks the canonical-JSON +// encoding to bytes precomputed via the verification spike (Go output +// piped into @keplr-wallet/cosmos's serializeSignDoc(makeADR36AminoSignDoc(...)), +// confirmed byte-equal and verifyADR36Amino-PASS). Any drift in Go's +// JSON marshaller or sdk.MustSortJSON ordering will fail this test. +func TestBuildADR36SignBytes_GoldenVector(t *testing.T) { + const ( + signer = "bb1mnyn7x24xj6vraxeeq56dfkxa009tvhg4wlgny" + message = "BitBadges sign-arbitrary spike message — testing < > & escapes" + ) + const expected = `{"account_number":"0","chain_id":"","fee":{"amount":[],"gas":"0"},"memo":"","msgs":[{"type":"sign/MsgSignData","value":{"data":"Qml0QmFkZ2VzIHNpZ24tYXJiaXRyYXJ5IHNwaWtlIG1lc3NhZ2Ug4oCUIHRlc3RpbmcgPCA+ICYgZXNjYXBlcw==","signer":"bb1mnyn7x24xj6vraxeeq56dfkxa009tvhg4wlgny"}}],"sequence":"0"}` + + got, err := buildADR36SignBytes(signer, message) + if err != nil { + t.Fatalf("buildADR36SignBytes: %v", err) + } + if string(got) != expected { + t.Fatalf("sign bytes drifted from spike-verified golden vector\nwant: %s\ngot : %s", expected, string(got)) + } +} + +// TestSignArbitrary_RoundTrip_Secp256k1 exercises the full command +// against an in-memory keyring with a true cosmos secp256k1 key, then +// verifies the produced signature locally via PubKey.VerifySignature. +func TestSignArbitrary_RoundTrip_Secp256k1(t *testing.T) { + kr, addr, pub := newInMemoryKeyring(t, "tester", hd.Secp256k1) + + out := executeSignArbitrary(t, kr, []string{"tester", "hello world"}, "") + + var got struct { + Format string `json:"format"` + Algo string `json:"algo"` + Address string `json:"address"` + Signature string `json:"signature"` + } + if err := json.Unmarshal([]byte(out), &got); err != nil { + t.Fatalf("parse output: %v\noutput: %s", err, out) + } + if got.Format != "adr36" || got.Algo != "secp256k1" { + t.Fatalf("wrong format/algo: %+v", got) + } + if got.Address != addr.String() { + t.Fatalf("wrong address: want %s got %s", addr.String(), got.Address) + } + + signBytes, err := buildADR36SignBytes(addr.String(), "hello world") + if err != nil { + t.Fatalf("rebuild signBytes: %v", err) + } + sig, err := base64.StdEncoding.DecodeString(got.Signature) + if err != nil { + t.Fatalf("decode sig: %v", err) + } + if !pub.VerifySignature(signBytes, sig) { + t.Fatalf("VerifySignature returned false — signing path produced an invalid signature") + } +} + +// TestSignArbitrary_RejectsEthSecp256k1 confirms v1 refuses +// eth_secp256k1 keys with a clear actionable error rather than +// silently producing a signature CosmosDriver will reject. +func TestSignArbitrary_RejectsEthSecp256k1(t *testing.T) { + kr, _, _ := newInMemoryKeyring(t, "ethkey", evmhd.EthSecp256k1) + + cmd := SignArbitraryCmd() + out := &bytes.Buffer{} + cmd.SetOut(out) + cmd.SetErr(out) + cmd.SetArgs([]string{"ethkey", "hello"}) + + cmd.SetContext(context.Background()) + clientCtx := client.Context{}.WithKeyring(kr) + if err := client.SetCmdClientContext(cmd, clientCtx); err != nil { + t.Fatalf("set cmd ctx: %v", err) + } + + err := cmd.Execute() + if err == nil { + t.Fatalf("expected error rejecting eth_secp256k1, got success: %s", out.String()) + } + if !strings.Contains(err.Error(), "eth_secp256k1") || !strings.Contains(err.Error(), "secp256k1") { + t.Fatalf("error should mention both algos for clarity, got: %v", err) + } +} + +func TestReadMessage_Modes(t *testing.T) { + t.Run("positional and file are mutually exclusive", func(t *testing.T) { + cmd := SignArbitraryCmd() + _ = cmd.Flags().Set(flagMessageFile, "/tmp/whatever") + _, err := readMessage(cmd, []string{"keyname", "inline-msg"}) + if err == nil || !strings.Contains(err.Error(), "not both") { + t.Fatalf("expected mutual-exclusion error, got: %v", err) + } + }) + t.Run("positional wins when alone", func(t *testing.T) { + cmd := SignArbitraryCmd() + got, err := readMessage(cmd, []string{"keyname", "the-message"}) + if err != nil || got != "the-message" { + t.Fatalf("want the-message, got %q err %v", got, err) + } + }) + t.Run("file is read when provided", func(t *testing.T) { + path := writeTempFile(t, "from-the-file") + cmd := SignArbitraryCmd() + _ = cmd.Flags().Set(flagMessageFile, path) + got, err := readMessage(cmd, []string{"keyname"}) + if err != nil || got != "from-the-file" { + t.Fatalf("want from-the-file, got %q err %v", got, err) + } + }) +} + +// ── helpers ───────────────────────────────────────────────────────── + +func newInMemoryKeyring(t *testing.T, name string, algo keyring.SignatureAlgo) (keyring.Keyring, sdk.AccAddress, cryptotypes.PubKey) { + t.Helper() + registry := codectypes.NewInterfaceRegistry() + cryptocodec.RegisterInterfaces(registry) + evmcryptocodec.RegisterInterfaces(registry) + cdc := codec.NewProtoCodec(registry) + kr := keyring.NewInMemory(cdc, evmhd.EthSecp256k1Option()) + + rec, _, err := kr.NewMnemonic( + name, + keyring.English, + sdk.GetConfig().GetFullBIP44Path(), + "", + algo, + ) + if err != nil { + t.Fatalf("NewMnemonic: %v", err) + } + addr, err := rec.GetAddress() + if err != nil { + t.Fatalf("GetAddress: %v", err) + } + pub, err := rec.GetPubKey() + if err != nil { + t.Fatalf("GetPubKey: %v", err) + } + return kr, addr, pub +} + +// executeSignArbitrary runs the command end-to-end against the given +// keyring and returns stdout (the JSON envelope). +func executeSignArbitrary(t *testing.T, kr keyring.Keyring, args []string, output string) string { + t.Helper() + cmd := SignArbitraryCmd() + out := &bytes.Buffer{} + cmd.SetOut(out) + cmd.SetErr(out) + cmd.SetArgs(args) + if output != "" { + _ = cmd.Flags().Set(flagOutputMode, output) + } + cmd.SetContext(context.Background()) + clientCtx := client.Context{}.WithKeyring(kr) + if err := client.SetCmdClientContext(cmd, clientCtx); err != nil { + t.Fatalf("set cmd ctx: %v", err) + } + if err := cmd.Execute(); err != nil { + t.Fatalf("execute: %v\noutput: %s", err, out.String()) + } + return out.String() +} + +func writeTempFile(t *testing.T, contents string) string { + t.Helper() + p := filepath.Join(t.TempDir(), "msg.txt") + if err := os.WriteFile(p, []byte(contents), 0o600); err != nil { + t.Fatalf("write tmp file: %v", err) + } + return p +} diff --git a/docs/static/openapi.yml b/docs/static/openapi.yml index 1167a911..4b1af6cd 100644 --- a/docs/static/openapi.yml +++ b/docs/static/openapi.yml @@ -1 +1 @@ -{"id":"github.com/bitbadges/bitbadgeschain","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/bitbadges/bitbadgeschain REST API","title":"HTTP API Console","contact":{"name":"github.com/bitbadges/bitbadgeschain"},"version":"version not set"},"paths":{"/bitbadges/bitbadgeschain/managersplitter":{"get":{"tags":["Query"],"summary":"AllManagerSplitters queries all manager splitters.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllManagerSplitters","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.QueryAllManagerSplittersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/managersplitter/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubCombitbadgesbitbadgeschainQuery_ParamsMixin22","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/managersplitter/{address}":{"get":{"tags":["Query"],"summary":"ManagerSplitter queries a manager splitter by address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_ManagerSplitter","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.QueryGetManagerSplitterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/sendmanager/balance/{address}/{denom}":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a specific denom for an address with alias routing.\nThis allows querying both standard coins and alias denoms (e.g., badgeslp:).","operationId":"GithubCombitbadgesbitbadgeschainQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the specific denomination to query the balance for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/sendmanager.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/sendmanager/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubCombitbadgesbitbadgeschainQuery_ParamsMixin34","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/sendmanager.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_address_list/{listId}":{"get":{"tags":["Query"],"summary":"Queries an address list by ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetAddressList","parameters":[{"type":"string","name":"listId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetAddressListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_all_reserved_protocol_addresses":{"get":{"tags":["Query"],"summary":"Queries all reserved protocol addresses.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetAllReservedProtocolAddresses","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetAllReservedProtocolAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_approvals_tracker/{collectionId}/{approvalLevel}/{approverAddress}/{amountTrackerId}/{trackerType}/{approvedAddress}":{"get":{"tags":["Query"],"summary":"Queries an approvals tracker by ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetApprovalTracker","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"amountTrackerId","in":"path","required":true},{"type":"string","name":"trackerType","in":"path","required":true},{"type":"string","description":"if trackerType is \"overall\", leave blank","name":"approvedAddress","in":"path","required":true},{"type":"string","name":"approvalId","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetApprovalTrackerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_balance/{collectionId}/{address}":{"get":{"tags":["Query"],"summary":"Queries an addresses balance for a collection, specified by its ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetBalance","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_balance_for_token/{collectionId}/{address}/{tokenId}":{"get":{"tags":["Query"],"summary":"Queries the balance amount for a specific token ID at a specific time.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetBalanceForToken","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","name":"address","in":"path","required":true},{"type":"string","name":"tokenId","in":"path","required":true},{"type":"string","description":"Optional - milliseconds since epoch, defaults to current block time","name":"time","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetBalanceForTokenResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_challenge_tracker/{collectionId}/{approvalLevel}/{approverAddress}/{challengeTrackerId}/{leafIndex}":{"get":{"tags":["Query"],"summary":"Queries the number of times a given leaf has been used for a given merkle challenge.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetChallengeTracker","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"challengeTrackerId","in":"path","required":true},{"type":"string","name":"leafIndex","in":"path","required":true},{"type":"string","name":"approvalId","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetChallengeTrackerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_collection/{collectionId}":{"get":{"tags":["Query"],"summary":"Queries a collection by ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetCollection","parameters":[{"type":"string","name":"collectionId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_collection_stats/{collectionId}":{"get":{"tags":["Query"],"summary":"Queries collection stats (holder count and circulating supply) by collection ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetCollectionStats","parameters":[{"type":"string","name":"collectionId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetCollectionStatsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_dynamic_store/{storeId}":{"get":{"tags":["Query"],"summary":"Queries a dynamic store by ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetDynamicStore","parameters":[{"type":"string","name":"storeId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_dynamic_store_value/{storeId}/{address}":{"get":{"tags":["Query"],"summary":"Queries a dynamic store value by store ID and address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetDynamicStoreValue","parameters":[{"type":"string","name":"storeId","in":"path","required":true},{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_eth_signature_tracker/{collectionId}/{approvalLevel}/{approverAddress}/{approvalId}/{challengeTrackerId}/{signature}":{"get":{"tags":["Query"],"summary":"Queries the number of times a given signature has been used for a given ETH signature challenge.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetETHSignatureTracker","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"approvalId","in":"path","required":true},{"type":"string","name":"challengeTrackerId","in":"path","required":true},{"type":"string","name":"signature","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetETHSignatureTrackerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_vote/{collectionId}/{approvalLevel}/{approverAddress}/{approvalId}/{proposalId}/{voterAddress}":{"get":{"tags":["Query"],"summary":"Queries a vote by collection ID, approval level, approver address, approval ID, proposal ID, and voter address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetVote","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"approvalId","in":"path","required":true},{"type":"string","name":"proposalId","in":"path","required":true},{"type":"string","name":"voterAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_votes/{collectionId}/{approvalLevel}/{approverAddress}/{approvalId}/{proposalId}":{"get":{"tags":["Query"],"summary":"Queries all votes for a proposal.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetVotes","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"approvalId","in":"path","required":true},{"type":"string","name":"proposalId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_wrappable_balances/{denom}/{address}":{"get":{"tags":["Query"],"summary":"Queries the maximum wrappable amount for a given denom and user address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetWrappableBalances","parameters":[{"type":"string","name":"denom","in":"path","required":true},{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetWrappableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/is_address_reserved_protocol/{address}":{"get":{"tags":["Query"],"summary":"Queries if an address is a reserved protocol address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_IsAddressReservedProtocol","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryIsAddressReservedProtocolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubCombitbadgesbitbadgeschainQuery_ParamsMixin53","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evm.vm.v1.Msg/RegisterPreinstalls":{"post":{"tags":["Msg"],"summary":"RegisterPreinstalls defines a governance operation for directly registering\npreinstalled contracts in the EVM. The authority is the same as is used for\nParams updates.","operationId":"Erc20Msg_RegisterPreinstalls","parameters":[{"description":"MsgRegisterPreinstalls defines a Msg for creating preinstalls in evm state.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgRegisterPreinstalls"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgRegisterPreinstallsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evm.vm.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defined a governance operation for updating the x/vm module\nparameters. The authority is hard-coded to the Cosmos SDK x/gov module\naccount","operationId":"Erc20Msg_UpdateParams","parameters":[{"description":"MsgUpdateParams defines a Msg for updating the x/vm module parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/ethereum_tx":{"post":{"tags":["Msg"],"summary":"EthereumTx defines a method submitting Ethereum transactions.","operationId":"Erc20Msg_EthereumTx","parameters":[{"type":"string","format":"byte","description":"from is the bytes of ethereum signer address. This address value is checked\nagainst the address derived from the signature (V, R, S) using the\nsecp256k1 elliptic curve","name":"from","in":"query"},{"type":"string","format":"byte","description":"raw is the raw ethereum transaction","name":"raw","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgEthereumTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.poolmodels.balancer.Msg/CreateBalancerPool":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateBalancerPool","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.poolmodels.balancer.MsgCreateBalancerPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.poolmodels.balancer.MsgCreateBalancerPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.poolmodels.stableswap.Msg/CreateStableswapPool":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateStableswapPool","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.poolmodels.stableswap.MsgCreateStableswapPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.poolmodels.stableswap.MsgCreateStableswapPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.poolmodels.stableswap.Msg/StableSwapAdjustScalingFactors":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_StableSwapAdjustScalingFactors","parameters":[{"description":"Sender must be the pool's scaling_factor_governor in order for the tx to\nsucceed. Adjusts stableswap scaling factors.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.poolmodels.stableswap.MsgStableSwapAdjustScalingFactors"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.poolmodels.stableswap.MsgStableSwapAdjustScalingFactorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/ExitPool":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_ExitPool","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/ExitSwapExternAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_ExitSwapExternAmountOut","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitSwapExternAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitSwapExternAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/ExitSwapShareAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_ExitSwapShareAmountIn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitSwapShareAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitSwapShareAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/JoinPool":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_JoinPool","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/JoinSwapExternAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_JoinSwapExternAmountIn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinSwapExternAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinSwapExternAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/JoinSwapShareAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_JoinSwapShareAmountOut","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinSwapShareAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinSwapShareAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/SwapExactAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountIn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/SwapExactAmountInWithIBCTransfer":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountInWithIBCTransfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountInWithIBCTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountInWithIBCTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/SwapExactAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountOut","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Query/CalcJoinPoolNoSwapShares":{"post":{"tags":["Query"],"summary":"Simulates joining pool without a swap. Returns the amount of shares you'd\nget and tokens needed to provide","operationId":"GithubCombitbadgesbitbadgeschainQuery_CalcJoinPoolNoSwapShares","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibcratelimit.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibcratelimit.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibcratelimit.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibcratelimit.Msg/UpdateRateLimit":{"post":{"tags":["Msg"],"summary":"UpdateRateLimit defines a (governance) operation for updating or adding a single rate limit.\nIf a rate limit with the same channel_id and denom exists, it will be updated.\nOtherwise, it will be appended to the list. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateRateLimit","parameters":[{"description":"MsgUpdateRateLimit is the Msg/UpdateRateLimit request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibcratelimit.MsgUpdateRateLimit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibcratelimit.MsgUpdateRateLimitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/CreateManagerSplitter":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateManagerSplitter","parameters":[{"description":"MsgCreateManagerSplitter creates a new manager splitter entity.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgCreateManagerSplitter"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgCreateManagerSplitterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/DeleteManagerSplitter":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteManagerSplitter","parameters":[{"description":"MsgDeleteManagerSplitter deletes a manager splitter entity.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgDeleteManagerSplitter"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgDeleteManagerSplitterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/ExecuteUniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_ExecuteUniversalUpdateCollection","parameters":[{"description":"MsgExecuteUniversalUpdateCollection executes a UniversalUpdateCollection message\nthrough the manager splitter, checking permissions before execution.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgExecuteUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgExecuteUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/UpdateManagerSplitter":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateManagerSplitter","parameters":[{"description":"MsgUpdateManagerSplitter updates an existing manager splitter entity.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgUpdateManagerSplitter"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgUpdateManagerSplitterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/UpdateParams":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin23","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/filtered_pools":{"get":{"tags":["Query"],"summary":"PoolsWithFilter allows you to query specific pools with requested\nparameters","operationId":"GithubCombitbadgesbitbadgeschainQuery_PoolsWithFilter","parameters":[{"type":"string","description":"String of the coins in single string separated by comma. Ex)\n10uatom,100uosmo","name":"min_liquidity","in":"query"},{"type":"string","name":"pool_type","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolsWithFilterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/num_pools":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_NumPools","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryNumPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns gamm module params.","operationId":"GithubCombitbadgesbitbadgeschainQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.ParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pool_type/{pool_id}":{"get":{"tags":["Query"],"summary":"PoolType returns the type of the pool.\nReturns \"Balancer\" as a string literal when the pool is a balancer pool.\nErrors if the pool is failed to be type caseted.","operationId":"GithubCombitbadgesbitbadgeschainQuery_PoolType","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolTypeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_Pools","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_Pool","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/exit_swap_share_amount_in":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_CalcExitPoolCoinsFromShares","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"share_in_amount","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/join_swap_exact_in":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_CalcJoinPoolShares","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryCalcJoinPoolSharesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/params":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_PoolParams","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/prices":{"get":{"tags":["Query"],"summary":"SpotPrice defines a gRPC query handler that returns the spot price given\na base denomination and a quote denomination.","operationId":"GithubCombitbadgesbitbadgeschainQuery_SpotPrice","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"base_asset_denom","in":"query"},{"type":"string","name":"quote_asset_denom","in":"query"},{"type":"boolean","description":"DEPRECATED","name":"withSwapFee","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QuerySpotPriceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/total_pool_liquidity":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalPoolLiquidity","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryTotalPoolLiquidityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/total_shares":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalShares","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryTotalSharesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/total_liquidity":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalLiquidity","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryTotalLiquidityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/{pool_id}/estimate/swap_exact_amount_in":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountIn","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"sender","in":"query"},{"type":"string","name":"token_in","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QuerySwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/{pool_id}/estimate/swap_exact_amount_out":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountOut","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"sender","in":"query"},{"type":"string","name":"token_out","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QuerySwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v2/pools/{pool_id}/prices":{"get":{"tags":["Query"],"summary":"Deprecated: please use alternate in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_SpotPriceMixin13","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"base_asset_denom","in":"query"},{"type":"string","name":"quote_asset_denom","in":"query"},{"type":"boolean","description":"DEPRECATED","name":"withSwapFee","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v2.QuerySpotPriceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/pools/{pool_id}/prices":{"get":{"tags":["Query"],"summary":"SpotPrice defines a gRPC query handler that returns the spot price given\na base denomination and a quote denomination.","operationId":"GithubCombitbadgesbitbadgeschainQuery_SpotPriceMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"base_asset_denom","in":"query"},{"type":"string","name":"quote_asset_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.SpotPriceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/Params":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_ParamsMixin26","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.ParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/all-pools":{"get":{"tags":["Query"],"summary":"AllPools returns all pools on the Osmosis chain sorted by IDs.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllPools","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.AllPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/all_registered_alloyed_pools":{"get":{"tags":["Query"],"summary":"AllRegisteredAlloyedPools returns all registered alloyed pools. The\nregistered alloyed pool contains the pool's contract address, along with\nthe current distribution composition of taker fee share denoms within the\nalloyed pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllRegisteredAlloyedPools","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.AllRegisteredAlloyedPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/all_taker_fee_share_accumulators":{"get":{"tags":["Query"],"summary":"AllTakerFeeShareAccumulators returns all taker fee share accumulators. A\ntaker fee share accumulator includes the denom of the denom getting the\ntaker fees, and an accumulated value of coins that the denom has accrued\nsince the last time it was distributed in the epoch prior.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllTakerFeeShareAccumulators","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.AllTakerFeeShareAccumulatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/all_taker_fee_share_agreements":{"get":{"tags":["Query"],"summary":"AllTakerFeeShareAgreements returns all taker fee share agreements.\nA taker fee share agreement includes the denom of the denom getting the\ntaker fees, the percent of the taker fees that the denom gets when it is\nin the route being traded against, and the address that the taker fees are\nsent to at epoch.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllTakerFeeShareAgreements","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.AllTakerFeeShareAgreementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/list-pools-by-denom":{"get":{"tags":["Query"],"summary":"ListPoolsByDenom return all pools by denom","operationId":"GithubCombitbadgesbitbadgeschainQuery_ListPoolsByDenom","parameters":[{"type":"string","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.ListPoolsByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/num_pools":{"get":{"tags":["Query"],"summary":"Returns the total number of pools existing in Osmosis.","operationId":"GithubCombitbadgesbitbadgeschainQuery_NumPoolsMixin26","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.NumPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/pools/{pool_id}":{"get":{"tags":["Query"],"summary":"Pool returns the Pool specified by the pool id","operationId":"GithubCombitbadgesbitbadgeschainQuery_PoolMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.PoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/pools/{pool_id}/total_pool_liquidity":{"get":{"tags":["Query"],"summary":"TotalPoolLiquidity returns the total liquidity of the specified pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalPoolLiquidityMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TotalPoolLiquidityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/pools/{pool_id}/total_volume":{"get":{"tags":["Query"],"summary":"TotalVolumeForPool returns the total volume of the specified pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalVolumeForPool","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TotalVolumeForPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/total_liquidity":{"get":{"tags":["Query"],"summary":"TotalLiquidity returns the total liquidity across all pools.","operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalLiquidityMixin26","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TotalLiquidityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/trading_pair_takerfee":{"get":{"tags":["Query"],"summary":"TradingPairTakerFee returns the taker fee for a given set of denoms","operationId":"GithubCombitbadgesbitbadgeschainQuery_TradingPairTakerFee","parameters":[{"type":"string","name":"denom_0","in":"query"},{"type":"string","name":"denom_1","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TradingPairTakerFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{denom}/registered_alloyed_pool_from_denom":{"get":{"tags":["Query"],"summary":"RegisteredAlloyedPoolFromDenom returns the registered alloyed pool state\nfrom the given denom. The registered alloyed pool contains the pool's\ncontract address, along with the current distribution composition of taker\nfee share denoms within the alloyed pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_RegisteredAlloyedPoolFromDenom","parameters":[{"type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.RegisteredAlloyedPoolFromDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{denom}/taker_fee_share_agreement_from_denom":{"get":{"tags":["Query"],"summary":"TakerFeeShareAgreementFromDenom returns the taker fee share agreement for a\ngiven denom. A taker fee share agreement includes the denom of the denom\ngetting the taker fees, the percent of the taker fees that the denom gets\nwhen it is in the route being traded against, and the address that the\ntaker fees are sent to at epoch.","operationId":"GithubCombitbadgesbitbadgeschainQuery_TakerFeeShareAgreementFromDenom","parameters":[{"type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareAgreementFromDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/single_pool_swap_exact_amount_in":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSinglePoolSwapExactAmountIn","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"token_in","in":"query"},{"type":"string","name":"token_out_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_in":{"get":{"tags":["Query"],"summary":"Estimates swap amount out given in.","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountInMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","description":"DEPRECATED","name":"sender","in":"query"},{"type":"string","name":"token_in","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_in_with_primitive_types":{"get":{"tags":["Query"],"summary":"EstimateSwapExactAmountInWithPrimitiveTypes is an alternative query for\nEstimateSwapExactAmountIn. Supports query via GRPC-Gateway by using\nprimitive types instead of repeated structs. Each index in the\nroutes_pool_id field corresponds to the respective routes_token_out_denom\nvalue, thus they are required to have the same length and are grouped\ntogether as pairs.\nexample usage:\nhttp://0.0.0.0:1317/osmosis/poolmanager/v1beta1/1/estimate/\nswap_exact_amount_in_with_primitive_types?token_in=100000stake\u0026routes_token_out_denom=uatom\n\u0026routes_token_out_denom=uion\u0026routes_pool_id=1\u0026routes_pool_id=2","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountInWithPrimitiveTypes","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"token_in","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","name":"routes_pool_id","in":"query"},{"type":"array","items":{"type":"string"},"collectionFormat":"multi","name":"routes_token_out_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_out":{"get":{"tags":["Query"],"summary":"Estimates swap amount in given out.","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountOutMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","description":"DEPRECATED","name":"sender","in":"query"},{"type":"string","name":"token_out","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_out_with_primitive_types":{"get":{"tags":["Query"],"summary":"Estimates swap amount in given out.","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountOutWithPrimitiveTypes","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","name":"routes_pool_id","in":"query"},{"type":"array","items":{"type":"string"},"collectionFormat":"multi","name":"routes_token_in_denom","in":"query"},{"type":"string","name":"token_out","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate_out/single_pool_swap_exact_amount_out":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSinglePoolSwapExactAmountOut","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"token_in_denom","in":"query"},{"type":"string","name":"token_out","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate_trade":{"get":{"tags":["Query"],"summary":"EstimateTradeBasedOnPriceImpact returns an estimated trade based on price\nimpact, if a trade cannot be estimated a 0 input and 0 output would be\nreturned.","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateTradeBasedOnPriceImpact","parameters":[{"type":"string","format":"uint64","description":"pool_id is the identifier of the liquidity pool that the trade will occur\non.","name":"pool_id","in":"path","required":true},{"type":"string","name":"from_coin.denom","in":"query"},{"type":"string","name":"from_coin.amount","in":"query"},{"type":"string","description":"to_coin_denom is the denom identifier of the token that the user wants to\nbuy.","name":"to_coin_denom","in":"query"},{"type":"string","description":"max_price_impact is the maximum percentage that the user is willing\nto affect the price of the liquidity pool.","name":"max_price_impact","in":"query"},{"type":"string","description":"external_price is an optional external price that the user can enter.\nIt adjusts the MaxPriceImpact as the SpotPrice of a pool can be changed at\nany time.","name":"external_price","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateTradeBasedOnPriceImpactResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/registered_alloyed_pool_from_pool_id":{"get":{"tags":["Query"],"summary":"RegisteredAlloyedPoolFromPoolId returns the registered alloyed pool state\nfrom the given pool id. The registered alloyed pool contains the pool's\ncontract address, along with the current distribution composition of taker\nfee share denoms within the alloyed pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_RegisteredAlloyedPoolFromPoolId","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.RegisteredAlloyedPoolFromPoolIdResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{takerFeeDenom}/{denom}/taker_fee_share_denoms_to_accrued_value":{"get":{"tags":["Query"],"summary":"TakerFeeShareDenomsToAccruedValue returns the accrued value (as an Int) of\nthe given taker fee denom (the collected fees) for the given fee share\ndenom (the denom with the taker fee share agreement)","operationId":"GithubCombitbadgesbitbadgeschainQuery_TakerFeeShareDenomsToAccruedValue","parameters":[{"type":"string","name":"takerFeeDenom","in":"path","required":true},{"type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareDenomsToAccruedValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v2/pools/{pool_id}/prices":{"get":{"tags":["Query"],"summary":"SpotPriceV2 defines a gRPC query handler that returns the spot price given\na base denomination and a quote denomination.\nThe returned spot price has 36 decimal places. However, some of\nmodules perform sig fig rounding so most of the rightmost decimals can be\nzeroes.","operationId":"GithubCombitbadgesbitbadgeschainQuery_SpotPriceV2","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"base_asset_denom","in":"query"},{"type":"string","name":"quote_asset_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v2.SpotPriceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SetDenomPairTakerFee":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDenomPairTakerFee","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSetDenomPairTakerFee"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSetDenomPairTakerFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SetTakerFeeShareAgreementForDenom":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTakerFeeShareAgreementForDenom","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSetTakerFeeShareAgreementForDenom"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSetTakerFeeShareAgreementForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SplitRouteSwapExactAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SplitRouteSwapExactAmountIn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSplitRouteSwapExactAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSplitRouteSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SplitRouteSwapExactAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SplitRouteSwapExactAmountOut","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSplitRouteSwapExactAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSplitRouteSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SwapExactAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountInMixin30","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSwapExactAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SwapExactAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountOutMixin30","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSwapExactAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/sendmanager.Msg/SendWithAliasRouting":{"post":{"tags":["Msg"],"summary":"SendWithAliasRouting defines a message for sending coins with alias denom routing.\nThis allows sending both standard coins and alias denoms (e.g., badgeslp:) through the sendmanager.","operationId":"GithubCombitbadgesbitbadgeschainMsg_SendWithAliasRouting","parameters":[{"description":"MsgSendWithAliasRouting defines a message for sending coins with alias denom routing.\nThis message mirrors cosmos bank MsgSend but routes through sendmanager to handle\nboth standard coins and alias denoms (e.g., badgeslp:).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/sendmanager.MsgSendWithAliasRouting"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/sendmanager.MsgSendWithAliasRoutingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/sendmanager.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin35","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/sendmanager.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/sendmanager.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/CastVote":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CastVote","parameters":[{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgCastVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgCastVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/CreateAddressLists":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateAddressLists","parameters":[{"description":"MsgCreateAddressLists is used to create address lists.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgCreateAddressLists"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgCreateAddressListsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/CreateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateCollection","parameters":[{"description":"MsgCreateCollection is used to create a new collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgCreateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgCreateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/CreateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateDynamicStore","parameters":[{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgCreateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgCreateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/DeleteCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteCollection","parameters":[{"description":"MsgDeleteCollection is used to delete a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgDeleteCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgDeleteCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/DeleteDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteDynamicStore","parameters":[{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgDeleteDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgDeleteDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/DeleteIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteIncomingApproval","parameters":[{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgDeleteIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgDeleteIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/DeleteOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteOutgoingApproval","parameters":[{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgDeleteOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgDeleteOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/PurgeApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_PurgeApprovals","parameters":[{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgPurgeApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgPurgeApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetCollectionApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionApprovals","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetCollectionApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetCollectionApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetCollectionMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionMetadata","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetCollectionMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetCollectionMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetCustomData":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCustomData","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetCustomData"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetCustomDataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetDynamicStoreValue":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDynamicStoreValue","parameters":[{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetDynamicStoreValue"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIncomingApproval","parameters":[{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetIsArchived":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIsArchived","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetIsArchived"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetIsArchivedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetManager":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetManager","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetManager"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetManagerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetOutgoingApproval","parameters":[{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetReservedProtocolAddress":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetReservedProtocolAddress","parameters":[{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetReservedProtocolAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetReservedProtocolAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetStandards":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetStandards","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetStandards"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetStandardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetTokenMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTokenMetadata","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetTokenMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetTokenMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetValidTokenIds":{"post":{"tags":["Msg"],"summary":"Helper message types for UniversalUpdateCollection subsets","operationId":"GithubCombitbadgesbitbadgeschainMsg_SetValidTokenIds","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetValidTokenIds"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetValidTokenIdsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/TransferTokens":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_TransferTokens","parameters":[{"description":"MsgTransferTokens is used to transfer tokens.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgTransferTokens"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgTransferTokensResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UniversalUpdateCollection","parameters":[{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateCollection","parameters":[{"description":"MsgUpdateCollection is used to update a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UpdateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateDynamicStore","parameters":[{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUpdateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUpdateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin56","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UpdateUserApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateUserApprovals","parameters":[{"description":"MsgUpdateUserApprovals is used to update user approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUpdateUserApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUpdateUserApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/CastVote":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CastVoteMixin76","parameters":[{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgCastVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgCastVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/CreateAddressLists":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateAddressListsMixin76","parameters":[{"description":"MsgCreateAddressLists is used to create address lists.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateAddressLists"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateAddressListsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/CreateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateCollectionMixin76","parameters":[{"description":"MsgCreateCollection is used to create a new collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/CreateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateDynamicStoreMixin76","parameters":[{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/DeleteCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteCollectionMixin76","parameters":[{"description":"MsgDeleteCollection is used to delete a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/DeleteDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteDynamicStoreMixin76","parameters":[{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/DeleteIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteIncomingApprovalMixin76","parameters":[{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/DeleteOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteOutgoingApprovalMixin76","parameters":[{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/PurgeApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_PurgeApprovalsMixin76","parameters":[{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgPurgeApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgPurgeApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetCollectionApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionApprovalsMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCollectionApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCollectionApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetCollectionMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionMetadataMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCollectionMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCollectionMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetCustomData":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCustomDataMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCustomData"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCustomDataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetDynamicStoreValue":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDynamicStoreValueMixin76","parameters":[{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetDynamicStoreValue"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIncomingApprovalMixin76","parameters":[{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetIsArchived":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIsArchivedMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetIsArchived"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetIsArchivedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetManager":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetManagerMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetManager"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetManagerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetOutgoingApprovalMixin76","parameters":[{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetReservedProtocolAddress":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetReservedProtocolAddressMixin76","parameters":[{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetReservedProtocolAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetReservedProtocolAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetStandards":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetStandardsMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetStandards"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetStandardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetTokenMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTokenMetadataMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetTokenMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetTokenMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetValidTokenIds":{"post":{"tags":["Msg"],"summary":"Helper message types for UniversalUpdateCollection subsets","operationId":"GithubCombitbadgesbitbadgeschainMsg_SetValidTokenIdsMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetValidTokenIds"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetValidTokenIdsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/TransferTokens":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_TransferTokensMixin76","parameters":[{"description":"MsgTransferTokens is used to transfer tokens.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgTransferTokens"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgTransferTokensResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UniversalUpdateCollectionMixin76","parameters":[{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateCollectionMixin76","parameters":[{"description":"MsgUpdateCollection is used to update a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UpdateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateDynamicStoreMixin76","parameters":[{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin76","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UpdateUserApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateUserApprovalsMixin76","parameters":[{"description":"MsgUpdateUserApprovals is used to update user approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateUserApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateUserApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/CastVote":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CastVoteMixin96","parameters":[{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgCastVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgCastVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/CreateAddressLists":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateAddressListsMixin96","parameters":[{"description":"MsgCreateAddressLists is used to create address lists.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateAddressLists"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateAddressListsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/CreateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateCollectionMixin96","parameters":[{"description":"MsgCreateCollection is used to create a new collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/CreateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateDynamicStoreMixin96","parameters":[{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/DeleteCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteCollectionMixin96","parameters":[{"description":"MsgDeleteCollection is used to delete a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/DeleteDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteDynamicStoreMixin96","parameters":[{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/DeleteIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteIncomingApprovalMixin96","parameters":[{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/DeleteOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteOutgoingApprovalMixin96","parameters":[{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/PurgeApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_PurgeApprovalsMixin96","parameters":[{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgPurgeApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgPurgeApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetCollectionApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionApprovalsMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCollectionApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCollectionApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetCollectionMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionMetadataMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCollectionMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCollectionMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetCustomData":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCustomDataMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCustomData"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCustomDataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetDynamicStoreValue":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDynamicStoreValueMixin96","parameters":[{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetDynamicStoreValue"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIncomingApprovalMixin96","parameters":[{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetIsArchived":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIsArchivedMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetIsArchived"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetIsArchivedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetManager":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetManagerMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetManager"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetManagerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetOutgoingApprovalMixin96","parameters":[{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetReservedProtocolAddress":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetReservedProtocolAddressMixin96","parameters":[{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetReservedProtocolAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetReservedProtocolAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetStandards":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetStandardsMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetStandards"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetStandardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetTokenMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTokenMetadataMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetTokenMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetTokenMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetValidTokenIds":{"post":{"tags":["Msg"],"summary":"Helper message types for UniversalUpdateCollection subsets","operationId":"GithubCombitbadgesbitbadgeschainMsg_SetValidTokenIdsMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetValidTokenIds"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetValidTokenIdsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/TransferTokens":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_TransferTokensMixin96","parameters":[{"description":"MsgTransferTokens is used to transfer tokens.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgTransferTokens"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgTransferTokensResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UniversalUpdateCollectionMixin96","parameters":[{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateCollectionMixin96","parameters":[{"description":"MsgUpdateCollection is used to update a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UpdateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateDynamicStoreMixin96","parameters":[{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin96","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UpdateUserApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateUserApprovalsMixin96","parameters":[{"description":"MsgUpdateUserApprovals is used to update user approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateUserApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateUserApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/CastVote":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CastVoteMixin116","parameters":[{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgCastVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgCastVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/CreateAddressLists":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateAddressListsMixin116","parameters":[{"description":"MsgCreateAddressLists is used to create address lists.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateAddressLists"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateAddressListsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/CreateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateCollectionMixin116","parameters":[{"description":"MsgCreateCollection is used to create a new collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/CreateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateDynamicStoreMixin116","parameters":[{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/DeleteCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteCollectionMixin116","parameters":[{"description":"MsgDeleteCollection is used to delete a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/DeleteDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteDynamicStoreMixin116","parameters":[{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/DeleteIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteIncomingApprovalMixin116","parameters":[{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/DeleteOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteOutgoingApprovalMixin116","parameters":[{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/PurgeApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_PurgeApprovalsMixin116","parameters":[{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgPurgeApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgPurgeApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetCollectionApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionApprovalsMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCollectionApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCollectionApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetCollectionMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionMetadataMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCollectionMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCollectionMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetCustomData":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCustomDataMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCustomData"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCustomDataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetDynamicStoreValue":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDynamicStoreValueMixin116","parameters":[{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetDynamicStoreValue"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIncomingApprovalMixin116","parameters":[{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetIsArchived":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIsArchivedMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetIsArchived"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetIsArchivedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetManager":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetManagerMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetManager"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetManagerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetOutgoingApprovalMixin116","parameters":[{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetReservedProtocolAddress":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetReservedProtocolAddressMixin116","parameters":[{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetReservedProtocolAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetReservedProtocolAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetStandards":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetStandardsMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetStandards"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetStandardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetTokenMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTokenMetadataMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetTokenMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetTokenMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetValidTokenIds":{"post":{"tags":["Msg"],"summary":"Helper message types for UniversalUpdateCollection subsets","operationId":"GithubCombitbadgesbitbadgeschainMsg_SetValidTokenIdsMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetValidTokenIds"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetValidTokenIdsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/TransferTokens":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_TransferTokensMixin116","parameters":[{"description":"MsgTransferTokens is used to transfer tokens.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgTransferTokens"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgTransferTokensResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UniversalUpdateCollectionMixin116","parameters":[{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateCollectionMixin116","parameters":[{"description":"MsgUpdateCollection is used to update a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UpdateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateDynamicStoreMixin116","parameters":[{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin116","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UpdateUserApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateUserApprovalsMixin116","parameters":[{"description":"MsgUpdateUserApprovals is used to update user approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateUserApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateUserApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.evm.vm.v1.AccessControl":{"type":"object","title":"AccessControl defines the permission policy of the EVM\nfor creating and calling contracts","properties":{"call":{"title":"call defines the permission policy for calling contracts","$ref":"#/definitions/cosmos.evm.vm.v1.AccessControlType"},"create":{"title":"create defines the permission policy for creating contracts","$ref":"#/definitions/cosmos.evm.vm.v1.AccessControlType"}}},"cosmos.evm.vm.v1.AccessControlType":{"type":"object","title":"AccessControlType defines the permission type for policies","properties":{"access_control_list":{"type":"array","title":"access_control_list defines defines different things depending on the\nAccessType:\n- ACCESS_TYPE_PERMISSIONLESS: list of addresses that are blocked from\nperforming the operation\n- ACCESS_TYPE_RESTRICTED: ignored\n- ACCESS_TYPE_PERMISSIONED: list of addresses that are allowed to perform\nthe operation","items":{"type":"string"}},"access_type":{"title":"access_type defines which type of permission is required for the operation","$ref":"#/definitions/cosmos.evm.vm.v1.AccessType"}}},"cosmos.evm.vm.v1.AccessType":{"description":"- ACCESS_TYPE_PERMISSIONLESS: ACCESS_TYPE_PERMISSIONLESS does not restrict the operation to anyone\n - ACCESS_TYPE_RESTRICTED: ACCESS_TYPE_RESTRICTED restrict the operation to anyone\n - ACCESS_TYPE_PERMISSIONED: ACCESS_TYPE_PERMISSIONED only allows the operation for specific addresses","type":"string","title":"AccessType defines the types of permissions for the operations","default":"ACCESS_TYPE_PERMISSIONLESS","enum":["ACCESS_TYPE_PERMISSIONLESS","ACCESS_TYPE_RESTRICTED","ACCESS_TYPE_PERMISSIONED"]},"cosmos.evm.vm.v1.ExtendedDenomOptions":{"type":"object","properties":{"extended_denom":{"type":"string"}}},"cosmos.evm.vm.v1.Log":{"description":"Log represents an protobuf compatible Ethereum Log that defines a contract\nlog event. These events are generated by the LOG opcode and stored/indexed by\nthe node.\n\nNOTE: address, topics and data are consensus fields. The rest of the fields\nare derived, i.e. filled in by the nodes, but not secured by consensus.","type":"object","properties":{"address":{"type":"string","title":"address of the contract that generated the event"},"block_hash":{"type":"string","title":"block_hash of the block in which the transaction was included"},"block_number":{"type":"string","format":"uint64","title":"block_number of the block in which the transaction was included"},"block_timestamp":{"type":"string","format":"uint64","title":"block_timestamp is the timestamp of the block in which the transaction was"},"data":{"type":"string","format":"byte","title":"data which is supplied by the contract, usually ABI-encoded"},"index":{"type":"string","format":"uint64","title":"index of the log in the block"},"removed":{"description":"removed is true if this log was reverted due to a chain\nreorganisation. You must pay attention to this field if you receive logs\nthrough a filter query.","type":"boolean"},"topics":{"description":"topics is a list of topics provided by the contract.","type":"array","items":{"type":"string"}},"tx_hash":{"type":"string","title":"tx_hash is the transaction hash"},"tx_index":{"type":"string","format":"uint64","title":"tx_index of the transaction in the block"}}},"cosmos.evm.vm.v1.MsgEthereumTxResponse":{"description":"MsgEthereumTxResponse defines the Msg/EthereumTx response type.","type":"object","properties":{"block_hash":{"type":"string","format":"byte","title":"include the block hash for json-rpc to use"},"block_timestamp":{"type":"string","format":"uint64","title":"include the block timestamp for json-rpc to use"},"gas_used":{"type":"string","format":"uint64","title":"gas_used specifies how much gas was consumed by the transaction"},"hash":{"type":"string","title":"hash of the ethereum transaction in hex format. This hash differs from the\nCometBFT sha256 hash of the transaction bytes. See\nhttps://github.com/tendermint/tendermint/issues/6539 for reference"},"logs":{"description":"logs contains the transaction hash and the proto-compatible ethereum\nlogs.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.evm.vm.v1.Log"}},"max_used_gas":{"type":"string","format":"uint64","title":"max_used_gas specifies the gas consumed by the transaction, not including refunds"},"ret":{"type":"string","format":"byte","title":"ret is the returned data from evm function (result or data supplied with\nrevert opcode)"},"vm_error":{"type":"string","title":"vm_error is the error returned by vm execution"}}},"cosmos.evm.vm.v1.MsgRegisterPreinstalls":{"description":"MsgRegisterPreinstalls defines a Msg for creating preinstalls in evm state.","type":"object","properties":{"authority":{"description":"authority is the address of the governance account.","type":"string"},"preinstalls":{"description":"preinstalls defines the preinstalls to create.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.evm.vm.v1.Preinstall"}}}},"cosmos.evm.vm.v1.MsgRegisterPreinstallsResponse":{"description":"MsgRegisterPreinstallsResponse defines the response structure for executing a\nMsgRegisterPreinstalls message.","type":"object"},"cosmos.evm.vm.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines a Msg for updating the x/vm module parameters.","type":"object","properties":{"authority":{"description":"authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/vm parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.evm.vm.v1.Params"}}},"cosmos.evm.vm.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.evm.vm.v1.Params":{"type":"object","title":"Params defines the EVM module parameters","properties":{"access_control":{"title":"access_control defines the permission policy of the EVM","$ref":"#/definitions/cosmos.evm.vm.v1.AccessControl"},"active_static_precompiles":{"type":"array","title":"active_static_precompiles defines the slice of hex addresses of the\nprecompiled contracts that are active","items":{"type":"string"}},"evm_channels":{"type":"array","title":"evm_channels is the list of channel identifiers from EVM compatible chains","items":{"type":"string"}},"evm_denom":{"description":"evm_denom represents the token denomination used to run the EVM state\ntransitions.","type":"string"},"extended_denom_options":{"$ref":"#/definitions/cosmos.evm.vm.v1.ExtendedDenomOptions"},"extra_eips":{"type":"array","title":"extra_eips defines the additional EIPs for the vm.Config","items":{"type":"string","format":"int64"}},"history_serve_window":{"type":"string","format":"uint64"}}},"cosmos.evm.vm.v1.Preinstall":{"type":"object","title":"Preinstall defines a contract that is preinstalled on-chain with a specific\ncontract address and bytecode","properties":{"address":{"type":"string","title":"address in hex format of the preinstall contract"},"code":{"type":"string","title":"code in hex format for the preinstall contract"},"name":{"type":"string","title":"name of the preinstall contract"}}},"gamm.poolmodels.balancer.MsgCreateBalancerPool":{"type":"object","title":"===================== MsgCreatePool","properties":{"pool_assets":{"type":"array","items":{"type":"object","$ref":"#/definitions/gamm.poolmodels.balancer.PoolAsset"}},"pool_params":{"$ref":"#/definitions/gamm.poolmodels.balancer.PoolParams"},"sender":{"type":"string"}}},"gamm.poolmodels.balancer.MsgCreateBalancerPoolResponse":{"type":"object","title":"Returns the poolID","properties":{"pool_id":{"type":"string","format":"uint64"}}},"gamm.poolmodels.balancer.PoolAsset":{"description":"Pool asset is an internal struct that combines the amount of the\ntoken in the pool, and its balancer weight.\nThis is an awkward packaging of data,\nand should be revisited in a future state migration.","type":"object","properties":{"token":{"description":"Coins we are talking about,\nthe denomination must be unique amongst all PoolAssets for this pool.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"weight":{"type":"string","title":"Weight that is not normalized. This weight must be less than 2^50"}}},"gamm.poolmodels.balancer.PoolParams":{"description":"PoolParams defined the parameters that will be managed by the pool\ngovernance in the future. This params are not managed by the chain\ngovernance. Instead they will be managed by the token holders of the pool.","type":"object","properties":{"exit_fee":{"type":"string","title":"N.B.: exit fee is disabled during pool creation in x/poolmanager. While old\npools can maintain a non-zero fee. No new pool can be created with non-zero\nfee anymore"},"swap_fee":{"type":"string"}}},"gamm.poolmodels.stableswap.MsgCreateStableswapPool":{"type":"object","title":"===================== MsgCreatePool","properties":{"future_pool_governor":{"type":"string"},"initial_pool_liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pool_params":{"$ref":"#/definitions/gamm.poolmodels.stableswap.PoolParams"},"scaling_factor_controller":{"type":"string"},"scaling_factors":{"type":"array","items":{"type":"string","format":"uint64"}},"sender":{"type":"string"}}},"gamm.poolmodels.stableswap.MsgCreateStableswapPoolResponse":{"description":"Returns a poolID with custom poolName.","type":"object","properties":{"pool_id":{"type":"string","format":"uint64"}}},"gamm.poolmodels.stableswap.MsgStableSwapAdjustScalingFactors":{"description":"Sender must be the pool's scaling_factor_governor in order for the tx to\nsucceed. Adjusts stableswap scaling factors.","type":"object","properties":{"pool_id":{"type":"string","format":"uint64"},"scaling_factors":{"type":"array","items":{"type":"string","format":"uint64"}},"sender":{"type":"string"}}},"gamm.poolmodels.stableswap.MsgStableSwapAdjustScalingFactorsResponse":{"type":"object"},"gamm.poolmodels.stableswap.PoolParams":{"description":"PoolParams defined the parameters that will be managed by the pool\ngovernance in the future. This params are not managed by the chain\ngovernance. Instead they will be managed by the token holders of the pool.\nThe pool's token holders are specified in future_pool_governor.","type":"object","properties":{"exit_fee":{"type":"string","title":"N.B.: exit fee is disabled during pool creation in x/poolmanager. While old\npools can maintain a non-zero fee. No new pool can be created with non-zero\nfee anymore"},"swap_fee":{"type":"string"}}},"gamm.v1beta1.IBCTransferInfo":{"type":"object","title":"===================== IBC Transfer Info","properties":{"memo":{"type":"string"},"receiver":{"type":"string"},"source_channel":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"gamm.v1beta1.MsgExitPool":{"type":"object","title":"===================== MsgExitPool","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_in_amount":{"type":"string"},"token_out_mins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.MsgExitPoolResponse":{"type":"object","properties":{"token_out":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.MsgExitSwapExternAmountOut":{"type":"object","title":"===================== MsgExitSwapExternAmountOut","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_in_max_amount":{"type":"string"},"token_out":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"gamm.v1beta1.MsgExitSwapExternAmountOutResponse":{"type":"object","properties":{"share_in_amount":{"type":"string"}}},"gamm.v1beta1.MsgExitSwapShareAmountIn":{"type":"object","title":"===================== MsgExitSwapShareAmountIn","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_in_amount":{"type":"string"},"token_out_denom":{"type":"string"},"token_out_min_amount":{"type":"string"}}},"gamm.v1beta1.MsgExitSwapShareAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"gamm.v1beta1.MsgJoinPool":{"type":"object","title":"===================== MsgJoinPool\nThis is really MsgJoinPoolNoSwap","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_out_amount":{"type":"string"},"token_in_maxs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.MsgJoinPoolResponse":{"type":"object","properties":{"share_out_amount":{"type":"string"},"token_in":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.MsgJoinSwapExternAmountIn":{"type":"object","title":"===================== MsgJoinSwapExternAmountIn\nTODO: Rename to MsgJoinSwapExactAmountIn","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_out_min_amount":{"type":"string","title":"repeated cosmos.base.v1beta1.Coin tokensIn = 5 [\n (gogoproto.moretags) = \"yaml:\\\"tokens_in\\\"\",\n (gogoproto.nullable) = false\n ];"},"token_in":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"gamm.v1beta1.MsgJoinSwapExternAmountInResponse":{"type":"object","properties":{"share_out_amount":{"type":"string"}}},"gamm.v1beta1.MsgJoinSwapShareAmountOut":{"type":"object","title":"===================== MsgJoinSwapShareAmountOut","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_out_amount":{"type":"string"},"token_in_denom":{"type":"string"},"token_in_max_amount":{"type":"string"}}},"gamm.v1beta1.MsgJoinSwapShareAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountIn":{"type":"object","title":"===================== MsgSwapExactAmountIn","properties":{"affiliates":{"type":"array","title":"affiliates are optional fee recipients that receive fees calculated from token_out_min_amount","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.Affiliate"}},"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInRoute"}},"sender":{"type":"string"},"token_in":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"token_out_min_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountInWithIBCTransfer":{"type":"object","title":"===================== MsgSwapExactAmountInWithIBCTransfer","properties":{"affiliates":{"type":"array","title":"affiliates are optional fee recipients that receive fees calculated from token_out_min_amount","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.Affiliate"}},"ibc_transfer_info":{"$ref":"#/definitions/gamm.v1beta1.IBCTransferInfo"},"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInRoute"}},"sender":{"type":"string"},"token_in":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"token_out_min_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountInWithIBCTransferResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountOut":{"type":"object","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountOutRoute"}},"sender":{"type":"string"},"token_in_max_amount":{"type":"string"},"token_out":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"gamm.v1beta1.MsgSwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"gamm.v1beta1.Params":{"type":"object","title":"Params holds parameters for the incentives module"},"gamm.v1beta1.ParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/gamm.v1beta1.Params"}}},"gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesResponse":{"type":"object","properties":{"tokens_out":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesRequest":{"type":"object","title":"=============================== CalcJoinPoolNoSwapShares","properties":{"pool_id":{"type":"string","format":"uint64"},"tokens_in":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesResponse":{"type":"object","properties":{"shares_out":{"type":"string"},"tokens_out":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryCalcJoinPoolSharesResponse":{"type":"object","properties":{"share_out_amount":{"type":"string"},"tokens_out":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryNumPoolsResponse":{"type":"object","properties":{"num_pools":{"type":"string","format":"uint64"}}},"gamm.v1beta1.QueryPoolParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/google.protobuf.Any"}}},"gamm.v1beta1.QueryPoolResponse":{"type":"object","title":"Deprecated: please use the alternative in x/poolmanager","properties":{"pool":{"$ref":"#/definitions/google.protobuf.Any"}}},"gamm.v1beta1.QueryPoolTypeResponse":{"type":"object","properties":{"pool_type":{"type":"string"}}},"gamm.v1beta1.QueryPoolsResponse":{"type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"gamm.v1beta1.QueryPoolsWithFilterResponse":{"type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"gamm.v1beta1.QuerySpotPriceResponse":{"description":"QuerySpotPriceResponse defines the gRPC response structure for a SpotPrice\nquery.","type":"object","properties":{"spot_price":{"type":"string","title":"String of the Dec. Ex) 10.203uatom"}}},"gamm.v1beta1.QuerySwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"gamm.v1beta1.QuerySwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"gamm.v1beta1.QueryTotalLiquidityResponse":{"type":"object","properties":{"liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryTotalPoolLiquidityResponse":{"type":"object","title":"Deprecated: please use the alternative in x/poolmanager","properties":{"liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryTotalSharesResponse":{"type":"object","properties":{"total_shares":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"gamm.v2.QuerySpotPriceResponse":{"type":"object","title":"Deprecated: please use alternate in x/poolmanager","properties":{"spot_price":{"type":"string","title":"String of the Dec. Ex) 10.203uatom"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"ibcratelimit.AddressLimit":{"type":"object","title":"AddressLimit defines limits per address","properties":{"max_amount":{"type":"string","title":"max_amount is the maximum total amount allowed per address in the timeframe\nValue is represented as an integer (e.g., \"1000000\" = 1,000,000 tokens)\nIf set to 0, amount limit is disabled"},"max_transfers":{"type":"string","format":"int64","title":"max_transfers is the maximum number of transfers allowed per address in the timeframe\nIf set to 0, transfer count limit is disabled"},"timeframe_duration":{"type":"string","format":"int64","title":"timeframe_duration is the duration of the timeframe"},"timeframe_type":{"title":"timeframe_type defines the type of timeframe (block, hour, day)","$ref":"#/definitions/ibcratelimit.TimeframeType"}}},"ibcratelimit.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibcratelimit.Params"}}},"ibcratelimit.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibcratelimit.MsgUpdateRateLimit":{"description":"MsgUpdateRateLimit is the Msg/UpdateRateLimit request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"rate_limit":{"description":"rate_limit defines the rate limit configuration to update or add.\nIf a rate limit with the same channel_id and denom exists, it will be updated.\nOtherwise, it will be appended to the list.","$ref":"#/definitions/ibcratelimit.RateLimitConfig"}}},"ibcratelimit.MsgUpdateRateLimitResponse":{"description":"MsgUpdateRateLimitResponse defines the response structure for executing a\nMsgUpdateRateLimit message.","type":"object"},"ibcratelimit.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"rate_limits":{"type":"array","title":"rate_limits is an array of rate limit configurations\nEach configuration can specify channel_id, denom, and various limit types (supply_shift_limits, unique_sender_limits, address_limits)\nConfigurations are checked in order, and the first matching config is used\nIf no config matches, the transfer is allowed (no rate limit)","items":{"type":"object","$ref":"#/definitions/ibcratelimit.RateLimitConfig"}}}},"ibcratelimit.RateLimitConfig":{"type":"object","title":"RateLimitConfig defines a rate limit configuration for a specific channel and denom","properties":{"address_limits":{"type":"array","title":"address_limits defines per-address transfer limits\nAll limits are checked, and the transfer is rejected if any limit would be exceeded","items":{"type":"object","$ref":"#/definitions/ibcratelimit.AddressLimit"}},"channel_id":{"type":"string","title":"channel_id is the IBC channel ID this rate limit applies to\nIf empty, applies to all channels"},"denom":{"type":"string","title":"denom is the denomination this rate limit applies to\nMust be specified (empty denoms are not allowed)"},"supply_shift_limits":{"type":"array","title":"supply_shift_limits defines multiple timeframe limits for supply shift\nAll limits are checked, and the transfer is rejected if any limit would be exceeded","items":{"type":"object","$ref":"#/definitions/ibcratelimit.TimeframeLimit"}},"unique_sender_limits":{"type":"array","title":"unique_sender_limits defines limits on unique senders per channel\nAll limits are checked, and the transfer is rejected if any limit would be exceeded","items":{"type":"object","$ref":"#/definitions/ibcratelimit.UniqueSenderLimit"}}}},"ibcratelimit.TimeframeLimit":{"type":"object","title":"TimeframeLimit defines a limit for a specific timeframe","properties":{"max_amount":{"type":"string","title":"max_amount is the maximum absolute amount of supply change allowed in this timeframe\nValue is represented as an integer (e.g., \"1000000\" = 1,000,000 tokens)\nIf set to 0, this limit is disabled"},"timeframe_duration":{"type":"string","format":"int64","title":"timeframe_duration is the duration of the timeframe\nFor BLOCK: number of blocks\nFor HOUR: number of hours (will be converted to blocks using block time)\nFor DAY: number of days (will be converted to blocks using block time)"},"timeframe_type":{"title":"timeframe_type defines the type of timeframe (block, hour, day)","$ref":"#/definitions/ibcratelimit.TimeframeType"}}},"ibcratelimit.TimeframeType":{"description":"- TIMEFRAME_TYPE_BLOCK: Duration in blocks\n - TIMEFRAME_TYPE_HOUR: Duration in hours (converted to blocks using block time)\n - TIMEFRAME_TYPE_DAY: Duration in days (converted to blocks using block time)","type":"string","title":"TimeframeType defines the type of timeframe","default":"TIMEFRAME_TYPE_UNSPECIFIED","enum":["TIMEFRAME_TYPE_UNSPECIFIED","TIMEFRAME_TYPE_BLOCK","TIMEFRAME_TYPE_HOUR","TIMEFRAME_TYPE_DAY"]},"ibcratelimit.UniqueSenderLimit":{"type":"object","title":"UniqueSenderLimit defines limits on unique senders per channel","properties":{"max_unique_senders":{"type":"string","format":"int64","title":"max_unique_senders is the maximum number of unique senders allowed in the timeframe\nIf set to 0, this limit is disabled"},"timeframe_duration":{"type":"string","format":"int64","title":"timeframe_duration is the duration of the timeframe"},"timeframe_type":{"title":"timeframe_type defines the type of timeframe (block, hour, day)","$ref":"#/definitions/ibcratelimit.TimeframeType"}}},"managersplitter.ManagerSplitter":{"description":"ManagerSplitter defines the manager splitter entity.","type":"object","properties":{"address":{"description":"The module address of this manager splitter (derived from module name + ID).","type":"string"},"admin":{"description":"Permanent and static admin address. Has full control and can always execute all permissions.","type":"string"},"permissions":{"description":"Permissions mapping each CollectionPermission field to execution criteria.","$ref":"#/definitions/managersplitter.ManagerSplitterPermissions"}}},"managersplitter.ManagerSplitterPermissions":{"description":"ManagerSplitterPermissions mirrors the CollectionPermissions structure\nbut maps each permission to criteria for execution.","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"}}},"managersplitter.MsgCreateManagerSplitter":{"description":"MsgCreateManagerSplitter creates a new manager splitter entity.","type":"object","properties":{"admin":{"description":"Admin address creating the entity.","type":"string"},"permissions":{"description":"Permissions mapping each CollectionPermission field to execution criteria.","$ref":"#/definitions/managersplitter.ManagerSplitterPermissions"}}},"managersplitter.MsgCreateManagerSplitterResponse":{"description":"MsgCreateManagerSplitterResponse is the response to MsgCreateManagerSplitter.","type":"object","properties":{"address":{"description":"The address of the created manager splitter.","type":"string"}}},"managersplitter.MsgDeleteManagerSplitter":{"description":"MsgDeleteManagerSplitter deletes a manager splitter entity.","type":"object","properties":{"address":{"description":"Address of the manager splitter to delete.","type":"string"},"admin":{"description":"Admin address deleting the entity.","type":"string"}}},"managersplitter.MsgDeleteManagerSplitterResponse":{"description":"MsgDeleteManagerSplitterResponse is the response to MsgDeleteManagerSplitter.","type":"object"},"managersplitter.MsgExecuteUniversalUpdateCollection":{"description":"MsgExecuteUniversalUpdateCollection executes a UniversalUpdateCollection message\nthrough the manager splitter, checking permissions before execution.","type":"object","properties":{"executor":{"description":"Address executing the message (must be approved or admin).","type":"string"},"managerSplitterAddress":{"description":"Address of the manager splitter to execute through.","type":"string"},"universalUpdateCollectionMsg":{"description":"The UniversalUpdateCollection message to execute.","$ref":"#/definitions/tokenization.MsgUniversalUpdateCollection"}}},"managersplitter.MsgExecuteUniversalUpdateCollectionResponse":{"description":"MsgExecuteUniversalUpdateCollectionResponse is the response to MsgExecuteUniversalUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection that was updated.","type":"string"}}},"managersplitter.MsgUpdateManagerSplitter":{"description":"MsgUpdateManagerSplitter updates an existing manager splitter entity.","type":"object","properties":{"address":{"description":"Address of the manager splitter to update.","type":"string"},"admin":{"description":"Admin address updating the entity.","type":"string"},"permissions":{"description":"New permissions to set.","$ref":"#/definitions/managersplitter.ManagerSplitterPermissions"}}},"managersplitter.MsgUpdateManagerSplitterResponse":{"description":"MsgUpdateManagerSplitterResponse is the response to MsgUpdateManagerSplitter.","type":"object"},"managersplitter.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/managersplitter.Params"}}},"managersplitter.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"managersplitter.Params":{"description":"Params defines the parameters for the module.","type":"object"},"managersplitter.PermissionCriteria":{"description":"PermissionCriteria defines the criteria for executing a permission.\nCurrently supports approved addresses (whitelist).","type":"object","properties":{"approvedAddresses":{"description":"List of approved addresses that can execute this permission.","type":"array","items":{"type":"string"}}}},"managersplitter.QueryAllManagerSplittersResponse":{"description":"QueryAllManagerSplittersResponse is response type for the Query/AllManagerSplitters RPC method.","type":"object","properties":{"managerSplitters":{"type":"array","items":{"type":"object","$ref":"#/definitions/managersplitter.ManagerSplitter"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"managersplitter.QueryGetManagerSplitterResponse":{"description":"QueryGetManagerSplitterResponse is response type for the Query/ManagerSplitter RPC method.","type":"object","properties":{"managerSplitter":{"$ref":"#/definitions/managersplitter.ManagerSplitter"}}},"managersplitter.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/managersplitter.Params"}}},"poolmanager.v1beta1.Affiliate":{"type":"object","title":"===================== Affiliate\nAffiliate represents an affiliate fee recipient","properties":{"address":{"type":"string","title":"address is the affiliate recipient address"},"basis_points_fee":{"type":"string","title":"basis_points_fee is the fee in basis points (1/10000, e.g., 100 = 1%)"}}},"poolmanager.v1beta1.AllPoolsResponse":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"poolmanager.v1beta1.AllRegisteredAlloyedPoolsResponse":{"type":"object","properties":{"contract_states":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.AlloyContractTakerFeeShareState"}}}},"poolmanager.v1beta1.AllTakerFeeShareAccumulatorsResponse":{"type":"object","properties":{"taker_fee_skim_accumulators":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeSkimAccumulator"}}}},"poolmanager.v1beta1.AllTakerFeeShareAgreementsResponse":{"type":"object","properties":{"taker_fee_share_agreements":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareAgreement"}}}},"poolmanager.v1beta1.AlloyContractTakerFeeShareState":{"description":"AlloyContractTakerFeeShareState contains the contract address of the alloyed\nasset pool, along with the adjusted taker fee share agreements for any asset\nwithin the alloyed asset pool that has a taker fee share agreement. If for\ninstance there are two denoms, and denomA makes up 50 percent and denomB\nmakes up 50 percent, and denom A has a taker fee share agreement with a skim\npercent of 10%, then the adjusted taker fee share agreement for denomA will\nbe 5%.","type":"object","properties":{"contract_address":{"description":"contract_address is the address of the alloyed asset pool contract.","type":"string"},"taker_fee_share_agreements":{"description":"taker_fee_share_agreements is the adjusted taker fee share agreements for\nany asset within the alloyed asset pool that has a taker fee share\nagreement.","type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareAgreement"}}}},"poolmanager.v1beta1.DenomPairTakerFee":{"type":"object","properties":{"denom0":{"description":"DEPRECATED: Now that we are using uni-directional trading pairs, we are\nusing tokenInDenom and tokenOutDenom instead of denom0 and denom1 to\nprevent confusion.","type":"string"},"denom1":{"type":"string"},"taker_fee":{"type":"string"},"tokenInDenom":{"type":"string"},"tokenOutDenom":{"type":"string"}}},"poolmanager.v1beta1.EstimateSwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"poolmanager.v1beta1.EstimateSwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"poolmanager.v1beta1.EstimateTradeBasedOnPriceImpactResponse":{"description":"EstimateTradeBasedOnPriceImpactResponse represents the response data\nfor an estimated trade based on price impact. If a trade fails to be\nestimated the response would be 0,0 for input_coin and output_coin and will\nnot error.","type":"object","properties":{"input_coin":{"description":"input_coin is the actual input amount that would be tradeable\nunder the specified price impact.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"output_coin":{"description":"output_coin is the amount of tokens of the ToCoinDenom type\nthat will be received for the actual InputCoin trade.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"poolmanager.v1beta1.ListPoolsByDenomResponse":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"poolmanager.v1beta1.MsgSetDenomPairTakerFee":{"type":"object","title":"===================== MsgSetDenomPairTakerFee","properties":{"denom_pair_taker_fee":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.DenomPairTakerFee"}},"sender":{"type":"string"}}},"poolmanager.v1beta1.MsgSetDenomPairTakerFeeResponse":{"type":"object","properties":{"success":{"type":"boolean"}}},"poolmanager.v1beta1.MsgSetTakerFeeShareAgreementForDenom":{"type":"object","title":"===================== MsgSetTakerFeeShareAgreementForDenom","properties":{"denom":{"description":"denom is the denom that the taker fee share agreement is being set for.\nEx. If this is set to \"nBTC\", then any trade route that includes \"nBTC\"\nwill have the skim_percent skimmed from the taker fees and sent to the\nskim_address.","type":"string"},"sender":{"type":"string"},"skim_address":{"description":"skim_address is the address belonging to the respective bridge provider\nthat the skimmed taker fees will be sent to at the end of each epoch.","type":"string"},"skim_percent":{"description":"skim_percent is the percentage of taker fees that will be skimmed for the\nbridge provider, in the event that the bridge provider's denom is included\nin the swap route.","type":"string"}}},"poolmanager.v1beta1.MsgSetTakerFeeShareAgreementForDenomResponse":{"type":"object"},"poolmanager.v1beta1.MsgSplitRouteSwapExactAmountIn":{"type":"object","title":"===================== MsgSplitRouteSwapExactAmountIn","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInSplitRoute"}},"sender":{"type":"string"},"token_in_denom":{"type":"string"},"token_out_min_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSplitRouteSwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSplitRouteSwapExactAmountOut":{"type":"object","title":"===================== MsgSplitRouteSwapExactAmountOut","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountOutSplitRoute"}},"sender":{"type":"string"},"token_in_max_amount":{"type":"string"},"token_out_denom":{"type":"string"}}},"poolmanager.v1beta1.MsgSplitRouteSwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSwapExactAmountIn":{"type":"object","title":"===================== MsgSwapExactAmountIn","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInRoute"}},"sender":{"type":"string"},"token_in":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"token_out_min_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSwapExactAmountOut":{"type":"object","title":"===================== MsgSwapExactAmountOut","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountOutRoute"}},"sender":{"type":"string"},"token_in_max_amount":{"type":"string"},"token_out":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"poolmanager.v1beta1.MsgSwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"poolmanager.v1beta1.NumPoolsResponse":{"type":"object","properties":{"num_pools":{"type":"string","format":"uint64"}}},"poolmanager.v1beta1.Params":{"type":"object","title":"Params holds parameters for the poolmanager module","properties":{"taker_fee_params":{"description":"taker_fee_params is the container of taker fee parameters.","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeParams"}}},"poolmanager.v1beta1.ParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/poolmanager.v1beta1.Params"}}},"poolmanager.v1beta1.PoolResponse":{"type":"object","properties":{"pool":{"$ref":"#/definitions/google.protobuf.Any"}}},"poolmanager.v1beta1.RegisteredAlloyedPoolFromDenomResponse":{"type":"object","properties":{"contract_state":{"$ref":"#/definitions/poolmanager.v1beta1.AlloyContractTakerFeeShareState"}}},"poolmanager.v1beta1.RegisteredAlloyedPoolFromPoolIdResponse":{"type":"object","properties":{"contract_state":{"$ref":"#/definitions/poolmanager.v1beta1.AlloyContractTakerFeeShareState"}}},"poolmanager.v1beta1.SpotPriceResponse":{"description":"SpotPriceResponse defines the gRPC response structure for a SpotPrice\nquery.","type":"object","properties":{"spot_price":{"type":"string","title":"String of the Dec. Ex) 10.203uatom"}}},"poolmanager.v1beta1.SwapAmountInRoute":{"type":"object","properties":{"pool_id":{"type":"string","format":"uint64"},"token_out_denom":{"type":"string"}}},"poolmanager.v1beta1.SwapAmountInSplitRoute":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInRoute"}},"token_in_amount":{"type":"string"}}},"poolmanager.v1beta1.SwapAmountOutRoute":{"type":"object","properties":{"pool_id":{"type":"string","format":"uint64"},"token_in_denom":{"type":"string"}}},"poolmanager.v1beta1.SwapAmountOutSplitRoute":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountOutRoute"}},"token_out_amount":{"type":"string"}}},"poolmanager.v1beta1.TakerFeeDistributionPercentage":{"description":"TakerFeeDistributionPercentage defines what percent of the taker fee category\ngets distributed to the available categories.","type":"object","properties":{"community_pool":{"type":"string"},"staking_rewards":{"type":"string"}}},"poolmanager.v1beta1.TakerFeeParams":{"description":"TakerFeeParams consolidates the taker fee parameters for the poolmanager.","type":"object","properties":{"admin_addresses":{"description":"admin_addresses is a list of addresses that are allowed to set and remove\ncustom taker fees for denom pairs. Governance also has the ability to set\nand remove custom taker fees for denom pairs, but with the normal\ngovernance delay.","type":"array","items":{"type":"string"}},"community_pool_denom_to_swap_non_whitelisted_assets_to":{"description":"community_pool_denom_to_swap_non_whitelisted_assets_to is the denom that\nnon-whitelisted taker fees will be swapped to before being sent to\nthe community pool.","type":"string"},"community_pool_denom_whitelist":{"description":"community_pool_denom_whitelist is a list of denoms that should be sent\ndirectly to the community pool instead of being swapped to the\n`community_pool_denom_to_swap_non_whitelisted_assets_to`.","type":"array","items":{"type":"string"}},"default_taker_fee":{"description":"default_taker_fee is the fee used when creating a new pool that doesn't\nfall under a custom pool taker fee or stableswap taker fee category.","type":"string"},"non_osmo_taker_fee_distribution":{"description":"non_osmo_taker_fee_distribution defines the distribution of taker fees\ngenerated in non-OSMO. As of this writing, it has two categories:\n- staking_rewards: the percent of the taker fee that gets swapped to OSMO\n and then distributed to stakers.\n- community_pool: the percent of the taker fee that gets sent to the\n community pool. Note: If the non-OSMO asset is an authorized_quote_denom,\n that denom is sent directly to the community pool. Otherwise, it is\n swapped to the community_pool_denom_to_swap_non_whitelisted_assets_to and\n then sent to the community pool as that denom.","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeDistributionPercentage"},"osmo_taker_fee_distribution":{"description":"osmo_taker_fee_distribution defines the distribution of taker fees\ngenerated in OSMO. As of this writing, it has two categories:\n- staking_rewards: the percent of the taker fee that gets distributed to\n stakers.\n- community_pool: the percent of the taker fee that gets sent to the\n community pool.","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeDistributionPercentage"},"reduced_fee_whitelist":{"description":"reduced_fee_whitelist is a list of addresses that are\nallowed to pay a reduce taker fee when performing a swap\n(i.e. swap without paying the taker fee).\nIt is intended to be used for integrators who meet qualifying factors\nthat are approved by governance.\nInitially, the taker fee is allowed to be bypassed completely. However\nIn the future, we will charge a reduced taker fee instead of no fee at all.","type":"array","items":{"type":"string"}}}},"poolmanager.v1beta1.TakerFeeShareAgreement":{"description":"TakerFeeShareAgreement represents the agreement between the Osmosis protocol\nand a specific denom to share a certain percent of taker fees generated in\nany route that contains said denom. For example, if the agreement specifies a\n10% skim_percent, this means 10% of the taker fees generated in a swap route\ncontaining the specified denom will be sent to the address specified\nin the skim_address field at the end of each epoch. These skim_percents are\nadditive, so if three taker fee agreements have skim percents of 10%, 20%,\nand 30%, the total skim percent for the route will be 60%.","type":"object","properties":{"denom":{"description":"denom is the denom that has the taker fee share agreement.","type":"string"},"skim_address":{"description":"skim_address is the address belonging to the respective denom\nthat the skimmed taker fees will be sent to at the end of each epoch.","type":"string"},"skim_percent":{"description":"skim_percent is the percentage of taker fees that will be skimmed for the\ndenom, in the event that the denom is included in the swap route.","type":"string"}}},"poolmanager.v1beta1.TakerFeeShareAgreementFromDenomResponse":{"type":"object","properties":{"taker_fee_share_agreement":{"$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareAgreement"}}},"poolmanager.v1beta1.TakerFeeShareDenomsToAccruedValueResponse":{"type":"object","properties":{"amount":{"type":"string"}}},"poolmanager.v1beta1.TakerFeeSkimAccumulator":{"description":"TakerFeeSkimAccumulator accumulates the total skimmed taker fees for each\ndenom that has a taker fee share agreement.","type":"object","properties":{"denom":{"description":"denom is the denom that has the taker fee share agreement.","type":"string"},"skimmed_taker_fees":{"description":"skimmed_taker_fees is the total skimmed taker fees for the denom.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"poolmanager.v1beta1.TotalLiquidityResponse":{"type":"object","properties":{"liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"poolmanager.v1beta1.TotalPoolLiquidityResponse":{"type":"object","properties":{"liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"poolmanager.v1beta1.TotalVolumeForPoolResponse":{"type":"object","properties":{"volume":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"poolmanager.v1beta1.TradingPairTakerFeeResponse":{"type":"object","properties":{"taker_fee":{"type":"string"}}},"poolmanager.v2.SpotPriceResponse":{"description":"SpotPriceResponse defines the gRPC response structure for a SpotPrice\nquery.","type":"object","properties":{"spot_price":{"type":"string","title":"String of the BigDec. Ex) 10.203uatom"}}},"sendmanager.MsgSendWithAliasRouting":{"description":"MsgSendWithAliasRouting defines a message for sending coins with alias denom routing.\nThis message mirrors cosmos bank MsgSend but routes through sendmanager to handle\nboth standard coins and alias denoms (e.g., badgeslp:).","type":"object","properties":{"amount":{"description":"amount is the list of coins to send.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"description":"from_address is the address of the account sending the coins.","type":"string"},"to_address":{"description":"to_address is the address of the account receiving the coins.","type":"string"}}},"sendmanager.MsgSendWithAliasRoutingResponse":{"description":"MsgSendWithAliasRoutingResponse defines the response structure for executing a\nMsgSendWithAliasRouting message.","type":"object"},"sendmanager.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/sendmanager.Params"}}},"sendmanager.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"sendmanager.Params":{"description":"Params defines the parameters for the module.","type":"object"},"sendmanager.QueryBalanceResponse":{"description":"QueryBalanceResponse is response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the specified denom for the address.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"sendmanager.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/sendmanager.Params"}}},"tokenization.ActionPermission":{"description":"ActionPermission defines the permissions for performing an action.\n\nThis is simple and straightforward as the only thing we need to check is the permitted/forbidden times.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.AddressChecks":{"type":"object","title":"AddressChecks defines checks for address types (EVM contract, liquidity pool, etc.)","properties":{"mustBeEvmContract":{"description":"Require the address to be an EVM contract (has code).","type":"boolean"},"mustBeLiquidityPool":{"description":"Require the address to be a liquidity pool.","type":"boolean"},"mustNotBeEvmContract":{"description":"Require the address to not be an EVM contract (no code).","type":"boolean"},"mustNotBeLiquidityPool":{"description":"Require the address to not be a liquidity pool.","type":"boolean"}}},"tokenization.AddressList":{"type":"object","title":"An AddressList is a list of addresses that are referenced by an ID.\nAddressLists are used in defining approvals ia a reusbale identifier. \nNote: We also support a reserved ID system by string ID; \"Mint\", \"!Mint\"","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"createdBy":{"description":"The user or entity who created the address list.","type":"string"},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.AddressListInput":{"description":"AddressListInput is used for creating address lists via MsgCreateAddressLists.\nIt contains all fields from AddressList except createdBy, which is automatically set from the message creator.","type":"object","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.AliasPath":{"type":"object","properties":{"conversion":{"description":"The conversion between cosmos coin and token balances.","$ref":"#/definitions/tokenization.ConversionWithoutDenom"},"denom":{"description":"The denomination (denom) to be used for the alias.","type":"string"},"denomUnits":{"description":"Denomination units for the alias. Defines how the coin can be displayed with different decimal places and symbols.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"description":"The symbol for the alias (e.g., \"BADGE\", \"NFT\"). Used for display purposes. Note that this may not be the default.","type":"string"}}},"tokenization.AliasPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.AltTimeChecks":{"type":"object","title":"AltTimeChecks defines alternative time-based checks for approval denial.\nIf the transfer time falls within any of the specified offline hours or days, the approval is denied.\nUses UTC timezone for neutral timezone approach.\nofflineHours: ranges of hours (0-23) when transfers should be denied\nofflineDays: ranges of days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied","properties":{"offlineDays":{"description":"Days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"offlineDaysOfMonth":{"description":"Days of month (1-31) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"offlineHours":{"description":"Hours (0-23) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"offlineMonths":{"description":"Months (1-12, where 1=January, 12=December) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"offlineWeeksOfYear":{"description":"Weeks of year (1-52) when transfers should be denied. Uses ISO 8601 week numbering.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"timezoneOffsetMinutes":{"description":"Timezone offset magnitude in minutes from UTC. Default 0 = UTC. Examples: 300 for EST (UTC-5), 330 for IST (UTC+5:30).\nAll time checks are evaluated after applying this offset to the block time.","type":"string"},"timezoneOffsetNegative":{"type":"boolean","title":"If true, the timezone offset is subtracted (west of UTC). If false, it is added (east of UTC).\nExample: EST (UTC-5) = timezoneOffsetMinutes: 300, timezoneOffsetNegative: true"}}},"tokenization.ApprovalAmounts":{"description":"ApprovalAmounts defines approval amounts per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the amounts transferred for the specified token IDs and ownership times \nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallApprovalAmount":{"description":"Overall approval amount.","type":"string"},"perFromAddressApprovalAmount":{"description":"Approval amount per \"from\" address.","type":"string"},"perInitiatedByAddressApprovalAmount":{"description":"Approval amount per \"initiated by\" address.","type":"string"},"perToAddressApprovalAmount":{"description":"Approval amount per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.ResetTimeIntervals"}}},"tokenization.ApprovalChange":{"description":"ApprovalChange represents a change to an approval (created, edited, or deleted).","type":"object","properties":{"action":{"type":"string"},"approvalId":{"type":"string"},"approvalLevel":{"type":"string"},"version":{"type":"string"}}},"tokenization.ApprovalCriteria":{"description":"ApprovalCriteria defines the criteria for approving transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"allowBackedMinting":{"description":"If true, this collection approval allows backed minting operations (CosmosCoinBackedPath).\nWhen false, this approval cannot be used for transfers involving backed minting addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"allowSpecialWrapping":{"description":"If true, this collection approval allows special wrapping operations (CosmosCoinWrapperPath).\nWhen false, this approval cannot be used for transfers involving wrapping addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"overridesFromOutgoingApprovals":{"description":"Overrides the user's outgoing approvals for approval. If true, this collection-level approval\ntakes precedence over any outgoing approvals defined by the sender, allowing the collection to\ncontrol outgoing transfer behavior.","type":"boolean"},"overridesToIncomingApprovals":{"description":"Overrides the user's incoming approvals for approval. If true, this collection-level approval\ntakes precedence over any incoming approvals defined by the recipient, allowing the collection to\ncontrol incoming transfer behavior.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"userApprovalSettings":{"description":"Issuer-imposed constraints on user-level coin transfers. Propagated to user-level approvals\nduring greedy transfer matching (same pattern as userRoyalties). Only applicable on collection-level approvals.\nIf conflicting settings across multiple matched approvals, the transfer is rejected (like royalties).","$ref":"#/definitions/tokenization.UserApprovalSettings"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.VotingChallenge"}}}},"tokenization.ApprovalIdentifierDetails":{"description":"ApprovalIdentifierDetails defines the details to identify a specific approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.ApprovalTracker":{"description":"ApprovalTracker defines the tracker for approvals. This tracks the cumulative number of transfers and associated balances transferred.","type":"object","properties":{"amounts":{"description":"Cumulative balances associated with the transfers that have been processed.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"lastUpdatedAt":{"description":"Last updated at time.","type":"string"},"numTransfers":{"description":"The number of transfers that have been processed.","type":"string"}}},"tokenization.ApprovalUsed":{"description":"ApprovalUsed represents an approval that was consumed during a transfer.","type":"object","properties":{"approvalId":{"type":"string"},"approvalLevel":{"type":"string"},"approverAddress":{"type":"string"},"version":{"type":"string"}}},"tokenization.AutoDeletionOptions":{"description":"AutoDeletionOptions defines the options for auto-deletion of approvals.","type":"object","properties":{"afterOneUse":{"type":"boolean","title":"After one use?"},"afterOverallMaxNumTransfers":{"type":"boolean","title":"After overall max number of uses threshold is met?"},"allowCounterpartyPurge":{"type":"boolean","title":"Allow counterparty to purge this approval if they are the only initiator"},"allowPurgeIfExpired":{"type":"boolean","title":"Allow others to call PurgeApprovals on behalf of this approval owner"}}},"tokenization.Balance":{"description":"Balance represents the balance of a token for a specific user.\nThe user amounts xAmount of a token specified for the time ranges specified.\n\nExample: User A owns x10 of token IDs 1-10 from 1/1/2020 to 1/1/2021.\n\nIf times or tokenIDs have len \u003e 1, then the user owns all token IDs specified for all time ranges specified.","type":"object","properties":{"amount":{"description":"The amount of the token owned by the user.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"The token IDs for which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.CoinTransfer":{"type":"object","properties":{"coins":{"description":"The sdk.Coins to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"overrideFromWithApproverAddress":{"description":"By default, the from address is the initiator of the transaction.\nIf this is set to true, we will override the from address with the approver address.\nNote: This is not applicable for collection approvals (since approverAddress == '').","type":"boolean"},"overrideToWithInitiator":{"description":"By default, the to address is what is specified in the coin transfer.\nIf this is set to true, we will override the to address with the initiator of the transaction.","type":"boolean"},"to":{"description":"The address of the recipient of the transfer.","type":"string"}}},"tokenization.CoinTransferProto":{"description":"CoinTransferProto represents a coin transfer that occurred during a transaction.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"},"from":{"type":"string"},"isProtocolFee":{"type":"boolean"},"to":{"type":"string"}}},"tokenization.CollectionApproval":{"type":"object","title":"CollectionApproval defines the rules for the approval of a transfer on the collection level","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.ApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.CollectionApprovalPermission":{"description":"CollectionApprovalPermission defines what collection approved transfers can be updated vs. are locked.\n\nEach transfer is broken down to a (from, to, initiatedBy, transferTime, tokenId) tuple.\nFor a transfer to match, we need to match ALL of the fields in the combination. \nThese are determined by the fromListId, toListId, initiatedByListId, transferTimes, tokenIds fields.\nAddressLists are used for (from, to, initiatedBy) which are a permanent list of addresses identified by an ID (see AddressLists). \n\npermanentlyPermitted/ForbiddenTimes: when can the manager execute this permission?\n\nEx: Let's say we are updating the transferability for the transfer tuple (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", 10, 1000).\nWe would check to find the FIRST CollectionApprovalPermission that matches this combination.\nIf we find a match, we would check the permitted/forbidden times to see if we can execute this permission (default is ALLOWED).\n\nEx: So if you wanted to freeze the transferability to enforce that token ID 1 will always be transferable, you could set\nthe combination (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", \"All Transfer Times\", 1) to always be forbidden.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.CollectionInvariants":{"description":"CollectionInvariants defines the invariants that apply to a collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.","$ref":"#/definitions/tokenization.CosmosCoinBackedPath"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.CollectionMetadata":{"description":"This message defines the metadata for the collection.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the collection metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the collection metadata.","type":"string"}}},"tokenization.CollectionPermissions":{"description":"CollectionPermissions defines the permissions for the collection (i.e., what the manager can and cannot do).\n\nThere are three types of permissions for a collection: ActionPermission, TokenIdsActionPermission, and CollectionApprovalPermission.\n\nThe permission type allows fine-grained access control for each action.\n- ActionPermission: defines when the manager can perform an action or update a field.\n- TokenIdsActionPermission: defines when the manager can perform an action for specific tokens\n- CollectionApprovalPermission: defines when the manager can update the transferability of the collection and what transfers can be updated vs. locked.\n\nNote there are a few different times here which could get confusing:\n- permanentlyPermitted/ForbiddenTimes - the times that a permission can be performed\n- transferTimes - the times that a transfer occurs\n- ownershipTimes - the times when a token is owned by a user\n\nThe permitted/permanentlyForbiddenTimes are used to determine when a permission can be executed.\nOnce a time is set to be permitted or forbidden, it is PERMANENT and cannot be changed.\nIf a time is not set to be permitted or forbidden, it is considered NEUTRAL and can be updated but is ALLOWED by default.\n\nIMPORTANT: We take first-match only for the permissions. This means that if you forbid time T in array index 0 and permit time T in index 1, \nwe will only check the first permission (forbid time T) and not the second permission (permit time T).","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApprovalPermission"}},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenIdsActionPermission"}},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenIdsActionPermission"}}}},"tokenization.CollectionStats":{"description":"CollectionStats tracks aggregated statistics for a collection.","type":"object","properties":{"balances":{"type":"array","title":"Tracks circulating supply as Balance[] for proper range handling","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"holderCount":{"type":"string"}}},"tokenization.Conversion":{"description":"Conversion defines a bidirectional conversion between a cosmos coin (with denom) and token balances.","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin side of the conversion (amount + denom).","$ref":"#/definitions/tokenization.ConversionSideAWithDenom"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}}}},"tokenization.ConversionSideA":{"description":"ConversionSideA represents the cosmos coin amount side of a conversion without denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"}}},"tokenization.ConversionSideAWithDenom":{"description":"ConversionSideAWithDenom represents the cosmos coin side of a conversion with denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"},"denom":{"description":"The denomination of the cosmos coin.","type":"string"}}},"tokenization.ConversionWithoutDenom":{"description":"ConversionWithoutDenom defines a bidirectional conversion between a cosmos coin amount (without denom) and token balances.\nThe denom is stored at the base level (e.g., in AliasPath or CosmosCoinWrapperPath).","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin amount side of the conversion (amount only, denom stored separately).","$ref":"#/definitions/tokenization.ConversionSideA"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}}}},"tokenization.CosmosCoinBackedPath":{"type":"object","properties":{"address":{"description":"The address associated with this backed path. Used for routing and escrowing IBC tokens.","type":"string"},"conversion":{"description":"The conversion between IBC cosmos coin and token balances.","$ref":"#/definitions/tokenization.Conversion"}}},"tokenization.CosmosCoinBackedPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.Conversion"}}},"tokenization.CosmosCoinWrapperPath":{"type":"object","properties":{"address":{"description":"The BitBadges address associated with this wrapper path. Used for routing and identifying the wrapper.","type":"string"},"allowOverrideWithAnyValidToken":{"description":"If true, allows this wrapper path to be used with any valid token ID in the collection via an {id} placeholder.","type":"boolean"},"conversion":{"description":"The conversion between cosmos coin and token balances.","$ref":"#/definitions/tokenization.ConversionWithoutDenom"},"denom":{"description":"The denomination (denom) to be used for the wrapped coin or the alias denom.","type":"string"},"denomUnits":{"description":"Denomination units for the wrapped coin. Defines how the coin can be displayed with different\ndecimal places and symbols (e.g., base unit, display unit). You can specify which is the default display unit (base level or one of these).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"description":"The symbol for the wrapped coin (e.g., \"BADGE\", \"NFT\"). Used for display purposes. Note that this may not be the default.","type":"string"}}},"tokenization.CosmosCoinWrapperPathAddObject":{"type":"object","properties":{"allowOverrideWithAnyValidToken":{"type":"boolean"},"conversion":{"$ref":"#/definitions/tokenization.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.DenomUnit":{"type":"object","properties":{"decimals":{"description":"The number of decimal places for this unit. Defines the precision of the unit.","type":"string"},"isDefaultDisplay":{"description":"If true, this is the default display unit. Only one unit should be marked as the default display unit.\nThis unit will be used by default when displaying the coin amount. If none are marked default, we use the base level.","type":"boolean"},"metadata":{"description":"The metadata for this denomination unit.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"description":"The symbol for this unit (e.g., \"BADGE\", \"nBADGE\"). Used for display purposes.","type":"string"}}},"tokenization.DynamicStore":{"description":"A DynamicStore is a flexible storage object that can store arbitrary data.\nIt is identified by a unique ID assigned by the blockchain, which is a uint64 that increments.\nDynamic stores are created by users and can only be updated or deleted by their creator.\nThey provide a way to store custom data on-chain with proper access control.","type":"object","properties":{"createdBy":{"description":"The address of the creator of this dynamic store.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"Global kill switch state (defaults to true on creation, can be toggled via UpdateDynamicStore).\nWhen false, all approvals using this store via DynamicStoreChallenge will fail immediately.","type":"boolean"},"storeId":{"description":"The unique identifier for this dynamic store. This is assigned by the blockchain.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.DynamicStoreChallenge":{"description":"DynamicStoreChallenge defines a challenge that requires the initiator to pass a dynamic store check.","type":"object","properties":{"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"storeId":{"description":"The ID of the dynamic store to check.","type":"string"}}},"tokenization.DynamicStoreValue":{"description":"A DynamicStoreValue stores a boolean value for a specific address in a dynamic store.\nThis allows the creator to set true/false values per address that can be checked during approval.","type":"object","properties":{"address":{"description":"The address for which this value is stored.","type":"string"},"storeId":{"description":"The unique identifier for this dynamic store.","type":"string"},"value":{"description":"The boolean value (true/false).","type":"boolean"}}},"tokenization.ETHSignatureChallenge":{"description":"ETHSignatureChallenge defines a rule for the approval in the form of an Ethereum signature challenge.\n\nAn ETH signature challenge is a challenge where the user must provide a valid Ethereum signature for a specific nonce.\nThe signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId) and each signature can only be used once.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: We track the usage of each signature to prevent replay attacks. Each signature can only be used once.\nIf you update the challenge ID, then the used signatures tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this ETH signature challenge for tracking the number of uses per signature.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this ETH signature challenge.","type":"string"},"signer":{"description":"The Ethereum address that must sign the nonce for verification.","type":"string"},"uri":{"description":"The URI associated with this ETH signature challenge, optionally providing metadata about the challenge.","type":"string"}}},"tokenization.ETHSignatureProof":{"description":"ETHSignatureProof represents an Ethereum signature proof for a challenge.","type":"object","properties":{"nonce":{"description":"The nonce that was signed. The signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId).","type":"string"},"signature":{"description":"The Ethereum signature of the nonce.","type":"string"}}},"tokenization.EVMQueryChallenge":{"description":"EVMQueryChallenge defines a rule for approval via read-only EVM contract query.\n\nThe challenge executes a staticcall to the specified contract with the given calldata.\nThe result is compared against the expected result (if provided) or checked for non-zero return.\n\nIMPORTANT: This is read-only and cannot modify state. The query is executed with a gas limit\nto prevent DoS attacks. All results are deterministic since EVM state is consistent within a block.","type":"object","properties":{"calldata":{"type":"string","title":"ABI-encoded function selector + arguments (hex string without 0x prefix)\nExample: \"70a08231000000000000000000000000{address}\" for balanceOf(address)\nCan use placeholders: $initiator, $sender, $recipient (replaced at runtime)"},"comparisonOperator":{"description":"Comparison operator: \"eq\" (equals), \"ne\" (not equals), \"gt\" (greater than), \"gte\", \"lt\", \"lte\"\nOnly \"eq\" and \"ne\" work for non-numeric types. Default is \"eq\".","type":"string"},"contractAddress":{"type":"string","title":"The EVM contract address to query (0x format or bb1 format)"},"customData":{"type":"string","title":"Arbitrary custom data"},"expectedResult":{"description":"Expected return value (hex string without 0x prefix). If empty, any non-error result passes.\nFor boolean checks, use \"0000...0001\" for true.","type":"string"},"gasLimit":{"type":"string","title":"Gas limit for the query (default 100000, max 500000)"},"uri":{"type":"string","title":"The URI associated with this challenge (metadata)"}}},"tokenization.IncomingApprovalCriteria":{"description":"IncomingApprovalCriteria defines the criteria for approving incoming transfers.\nThis is used for user-level incoming approvals and only includes fields relevant to incoming transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.PredeterminedBalances"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No recipient checks are included for incoming approvals since the recipient is the user themselves.","$ref":"#/definitions/tokenization.AddressChecks"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.VotingChallenge"}}}},"tokenization.IncrementedBalances":{"description":"IncrementedBalances represents balances that are incremented by specific amounts, according to the order calculation method.","type":"object","properties":{"allowAmountScaling":{"description":"When true, the actual transfer can be any evenly divisible integer multiple (\u003e=1x) of startBalances.\napprovalCriteria.coinTransfers are scaled by the same multiplier.\nAll other IncrementedBalances fields must be zero/false/nil when this is true.","type":"boolean"},"allowOverrideTimestamp":{"description":"Whether to allow overriding the timestamp for the balances (only applicable with durationFromTimestamp set).","type":"boolean"},"allowOverrideWithAnyValidToken":{"type":"boolean","title":"Allow override of any valid ID"},"durationFromTimestamp":{"description":"The amount of unix milliseconds to approve starting from now. Incompatible with incrementOwnershipTimesBy.","type":"string"},"incrementOwnershipTimesBy":{"description":"The amount by which to increment ownership times. Incompatible with approveStartingFromNowBy.","type":"string"},"incrementTokenIdsBy":{"description":"The amount by which to increment token IDs.","type":"string"},"maxScalingMultiplier":{"description":"Maximum allowed scaling multiplier. Must be \u003e 0 when allowAmountScaling is true.\nThe chain rejects transfers where the computed multiplier exceeds this cap.\nIgnored (set to \"0\") when allowAmountScaling is false.","type":"string"},"recurringOwnershipTimes":{"description":"Recurring ownership times.","$ref":"#/definitions/tokenization.RecurringOwnershipTimes"},"startBalances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}}}},"tokenization.InvariantsAddObject":{"description":"InvariantsAddObject is used for adding invariants without specifying addresses.\nAddresses are generated by the keeper and stored in the collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.\nAddress will be generated by the keeper.","$ref":"#/definitions/tokenization.CosmosCoinBackedPathAddObject"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.ManualBalances":{"description":"ManualBalances represents a list of manual balances entered for the predetermined balances criteria. Order is calculated according to the calculation method set.","type":"object","properties":{"balances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}}}},"tokenization.MaxNumTransfers":{"description":"MaxNumTransfers defines the maximum number of transfers per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the number of transfers for the specified token IDs and ownership times\nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallMaxNumTransfers":{"description":"Overall maximum number of transfers.","type":"string"},"perFromAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"from\" address.","type":"string"},"perInitiatedByAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"initiated by\" address.","type":"string"},"perToAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.ResetTimeIntervals"}}},"tokenization.MerkleChallenge":{"description":"Challenges define a rule for the approval in the form of a Merkle challenge.\n\nA Merkle challenge is a challenge where the user must provide a Merkle proof to a Merkle tree. If they provide a valid proof,\nthen the challenge is met. All challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Merkle challenges currently are limited to SHA256 hashes. See documentation for MerkleChallenge for more details and tutorials.\n\nIMPORTANT: We track the number of uses per leaf according to the challengeTrackerId specified by the parent approval of this challenge.\nIf you update the challenge ID, then the used leaves tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this Merkle challenge for tracking the number of uses per leaf.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this Merkle challenge.","type":"string"},"expectedProofLength":{"description":"The expected length of the Merkle path for verification. Used to prevent Merkle path truncation attacks.","type":"string"},"leafSigner":{"description":"Ethereum address that must sign the leaf. Used to protect against man-in-the-middle attacks.\nSignature scheme: sign(leaf + \"-\" + creatorAddress), verified using elliptic curve signature verification.","type":"string"},"maxUsesPerLeaf":{"description":"The maximum number of times each leaf can be used. Must be 1 if useCreatorAddressAsLeaf is false to prevent replay attacks.","type":"string"},"root":{"description":"The root hash of the Merkle tree to which the Merkle path must lead for verification.","type":"string"},"uri":{"description":"The URI associated with this Merkle challenge, optionally providing metadata about the challenge.","type":"string"},"useCreatorAddressAsLeaf":{"description":"If true, we will override the user's leaf for their proof with their creator address. Used for whitelist trees where all leaves are valid BitBadges addresses.","type":"boolean"}}},"tokenization.MerklePathItem":{"description":"MerklePathItem represents an item in a Merkle path.","type":"object","properties":{"aunt":{"description":"The hash of the sibling node (aunt) in the Merkle path.","type":"string"},"onRight":{"description":"Indicates whether the aunt node is on the right side of the path.","type":"boolean"}}},"tokenization.MerkleProof":{"description":"MerkleProof represents a Merkle proof, consistent with Tendermint/Crypto Merkle tree.","type":"object","properties":{"aunts":{"description":"List of Merkle path items (aunts) that make up the proof.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerklePathItem"}},"leaf":{"description":"The hash of the leaf node for which the proof is generated.","type":"string"},"leafSignature":{"description":"The signature of the leaf node tying the address to the leaf node.","type":"string"}}},"tokenization.MsgCastVote":{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","type":"object","properties":{"approvalId":{"description":"The approval ID.","type":"string"},"approvalLevel":{"description":"The approval level (\"collection\", \"incoming\", or \"outgoing\").","type":"string"},"approverAddress":{"description":"The approver address (empty string for collection-level approvals).","type":"string"},"collectionId":{"description":"The collection ID for the voting challenge.","type":"string"},"creator":{"description":"The address of the voter casting the vote.","type":"string"},"proposalId":{"description":"The proposal ID (challenge ID) from the VotingChallenge.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.MsgCastVoteResponse":{"type":"object"},"tokenization.MsgCreateAddressLists":{"description":"MsgCreateAddressLists is used to create address lists.","type":"object","properties":{"addressLists":{"description":"Address lists to create. The createdBy field will be automatically set to the creator address.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AddressListInput"}},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgCreateAddressListsResponse":{"description":"MsgCreateAddressListsResponse is the response to MsgCreateAddressLists.","type":"object"},"tokenization.MsgCreateCollection":{"description":"MsgCreateCollection is used to create a new collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AliasPathAddObject"}},"collectionApprovals":{"description":"Collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionMetadata":{"description":"Collection metadata.","$ref":"#/definitions/tokenization.CollectionMetadata"},"collectionPermissions":{"description":"Collection permissions.","$ref":"#/definitions/tokenization.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.InvariantsAddObject"},"isArchived":{"description":"isArchived flag.","type":"boolean"},"manager":{"description":"Manager address.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"Standards entries.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"Token metadata entries.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.MsgCreateCollectionResponse":{"description":"MsgCreateCollectionResponse is the response to MsgCreateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgCreateDynamicStore":{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.MsgCreateDynamicStoreResponse":{"description":"MsgCreateDynamicStoreResponse is the response to MsgCreateDynamicStore.","type":"object","properties":{"reviewItems":{"type":"array","items":{"type":"string"}},"storeId":{"description":"ID of the dynamic store.","type":"string"}}},"tokenization.MsgDeleteCollection":{"description":"MsgDeleteCollection is used to delete a collection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgDeleteCollectionResponse":{"description":"MsgDeleteCollectionResponse is the response to MsgDeleteCollection.","type":"object"},"tokenization.MsgDeleteDynamicStore":{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store to delete.","type":"string"}}},"tokenization.MsgDeleteDynamicStoreResponse":{"description":"MsgDeleteDynamicStoreResponse is the response to MsgDeleteDynamicStore.","type":"object"},"tokenization.MsgDeleteIncomingApproval":{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgDeleteIncomingApprovalResponse":{"description":"MsgDeleteIncomingApprovalResponse is the response to MsgDeleteIncomingApproval.","type":"object","properties":{"found":{"type":"boolean"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.MsgDeleteOutgoingApproval":{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgDeleteOutgoingApprovalResponse":{"description":"MsgDeleteOutgoingApprovalResponse is the response to MsgDeleteOutgoingApproval.","type":"object","properties":{"found":{"type":"boolean"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.MsgPurgeApprovals":{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","type":"object","properties":{"approvalsToPurge":{"description":"Specific approvals to purge. If empty, purges all applicable approvals based on other flags.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalIdentifierDetails"}},"approverAddress":{"description":"Address of the user whose approvals to purge. If empty, defaults to creator.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"purgeCounterpartyApprovals":{"description":"Whether to purge counterparty approvals (approvals where the creator is the only initiator).","type":"boolean"},"purgeExpired":{"description":"Whether to purge expired approvals (approvals with no future valid transfer times).","type":"boolean"}}},"tokenization.MsgPurgeApprovalsResponse":{"description":"MsgPurgeApprovalsResponse is the response to MsgPurgeApprovals.","type":"object","properties":{"numPurged":{"description":"Number of approvals purged.","type":"string"},"purgedApprovalIds":{"type":"array","items":{"type":"string"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgSetCollectionApprovals":{"type":"object","title":"MsgSetCollectionApprovals sets the collection approvals and canUpdateCollectionApprovals permission","properties":{"canUpdateCollectionApprovals":{"type":"array","title":"Permission to update collection approvals","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApprovalPermission"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgSetCollectionApprovalsResponse":{"description":"MsgSetCollectionApprovalsResponse is the response to MsgSetCollectionApprovals.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgSetCollectionMetadata":{"type":"object","title":"MsgSetCollectionMetadata sets the collection metadata and canUpdateCollectionMetadata permission","properties":{"canUpdateCollectionMetadata":{"type":"array","title":"Permission to update collection metadata","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.CollectionMetadata"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgSetCollectionMetadataResponse":{"description":"MsgSetCollectionMetadataResponse is the response to MsgSetCollectionMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetCustomData":{"type":"object","title":"MsgSetCustomData sets the custom data and canUpdateCustomData permission","properties":{"canUpdateCustomData":{"type":"array","title":"Permission to update custom data","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"}}},"tokenization.MsgSetCustomDataResponse":{"description":"MsgSetCustomDataResponse is the response to MsgSetCustomData.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetDynamicStoreValue":{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","type":"object","properties":{"address":{"description":"The address for which to set the value.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store.","type":"string"},"value":{"description":"The boolean value to set (true/false).","type":"boolean"}}},"tokenization.MsgSetDynamicStoreValueResponse":{"description":"MsgSetDynamicStoreValueResponse is the response to MsgSetDynamicStoreValue.","type":"object","properties":{"previousValue":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgSetIncomingApproval":{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","type":"object","properties":{"approval":{"description":"The incoming approval to set.","$ref":"#/definitions/tokenization.UserIncomingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgSetIncomingApprovalResponse":{"description":"MsgSetIncomingApprovalResponse is the response to MsgSetIncomingApproval.","type":"object","properties":{"action":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.MsgSetIsArchived":{"type":"object","title":"MsgSetIsArchived sets the isArchived and canArchiveCollection permission","properties":{"canArchiveCollection":{"type":"array","title":"Permission to archive collection","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"isArchived":{"description":"New isArchived to set.","type":"boolean"}}},"tokenization.MsgSetIsArchivedResponse":{"description":"MsgSetIsArchivedResponse is the response to MsgSetIsArchived.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetManager":{"type":"object","title":"MsgSetManager sets the manager and canUpdateManager permission","properties":{"canUpdateManager":{"type":"array","title":"Permission to update manager","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"manager":{"description":"New manager to set.","type":"string"}}},"tokenization.MsgSetManagerResponse":{"description":"MsgSetManagerResponse is the response to MsgSetManager.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetOutgoingApproval":{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","type":"object","properties":{"approval":{"description":"The outgoing approval to set.","$ref":"#/definitions/tokenization.UserOutgoingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgSetOutgoingApprovalResponse":{"description":"MsgSetOutgoingApprovalResponse is the response to MsgSetOutgoingApproval.","type":"object","properties":{"action":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.MsgSetReservedProtocolAddress":{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","type":"object","properties":{"address":{"description":"Address to set or unset as reserved protocol address.","type":"string"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"isReservedProtocol":{"description":"Whether the address should be a reserved protocol address (true) or not (false).","type":"boolean"}}},"tokenization.MsgSetReservedProtocolAddressResponse":{"description":"MsgSetReservedProtocolAddressResponse is the response to MsgSetReservedProtocolAddress.","type":"object"},"tokenization.MsgSetStandards":{"type":"object","title":"MsgSetStandards sets the standards and canUpdateStandards permission","properties":{"canUpdateStandards":{"type":"array","title":"Permission to update standards","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}}}},"tokenization.MsgSetStandardsResponse":{"description":"MsgSetStandardsResponse is the response to MsgSetStandards.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetTokenMetadata":{"type":"object","title":"MsgSetTokenMetadata sets the token metadata and canUpdateTokenMetadata permission","properties":{"canUpdateTokenMetadata":{"type":"array","title":"Permission to update token metadata","items":{"type":"object","$ref":"#/definitions/tokenization.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}}}},"tokenization.MsgSetTokenMetadataResponse":{"description":"MsgSetTokenMetadataResponse is the response to MsgSetTokenMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetValidTokenIds":{"type":"object","title":"MsgSetValidTokenIds sets the validTokenIds and canUpdateValidTokenIds permission","properties":{"canUpdateValidTokenIds":{"type":"array","title":"Permission to update valid token IDs","items":{"type":"object","$ref":"#/definitions/tokenization.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.MsgSetValidTokenIdsResponse":{"description":"MsgSetValidTokenIdsResponse is the response to MsgSetValidTokenIds.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgTransferTokens":{"description":"MsgTransferTokens is used to transfer tokens.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"transfers":{"description":"Transfers to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Transfer"}}}},"tokenization.MsgTransferTokensResponse":{"description":"MsgTransferTokensResponse is the response to MsgTransferTokens.","type":"object","properties":{"approvalsUsed":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalUsed"}},"balancesTransferred":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"coinTransfers":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CoinTransferProto"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgUniversalUpdateCollection":{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.MsgUniversalUpdateCollectionResponse":{"description":"MsgUniversalUpdateCollectionResponse is the response to MsgUniversalUpdateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgUpdateCollection":{"description":"MsgUpdateCollection is used to update a collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.MsgUpdateCollectionResponse":{"description":"MsgUpdateCollectionResponse is the response to MsgUpdateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgUpdateDynamicStore":{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The new default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"The global kill switch state (true = enabled, false = disabled/halted).\nCallers should query the current value first if they want to keep it unchanged.","type":"boolean"},"storeId":{"description":"ID of the dynamic store to update.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.MsgUpdateDynamicStoreResponse":{"description":"MsgUpdateDynamicStoreResponse is the response to MsgUpdateDynamicStore.","type":"object"},"tokenization.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tokenization.Params"}}},"tokenization.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"tokenization.MsgUpdateUserApprovals":{"description":"MsgUpdateUserApprovals is used to update user approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Auto-approve setting for all incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Auto-approve setting for self-initiated incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Auto-approve setting for self-initiated outgoing transfers.","type":"boolean"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"incomingApprovals":{"description":"New incoming approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserIncomingApproval"}},"outgoingApprovals":{"description":"New outgoing approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserOutgoingApproval"}},"updateAutoApproveAllIncomingTransfers":{"description":"Indicates if auto-approve settings for all incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Indicates if auto-approve settings for self-initiated incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Indicates if auto-approve settings for self-initiated outgoing transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIncomingApprovals":{"description":"Indicates if incoming approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateOutgoingApprovals":{"description":"Indicates if outgoing approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateUserPermissions":{"description":"Indicates if user permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"userPermissions":{"description":"New user permissions to set.","$ref":"#/definitions/tokenization.UserPermissions"}}},"tokenization.MsgUpdateUserApprovalsResponse":{"description":"MsgUpdateUserApprovalsResponse is the response to MsgUpdateUserApprovals.","type":"object","properties":{"incomingChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"outgoingChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MustOwnTokens":{"description":"MustOwnTokens represents a condition where a user must own specific tokens\nto be approved to transfer.\n\n- collectionId: The ID of the collection for the tokens that must be owned\n- amountRange: The range of amounts the user must own (min to max)\n- ownershipTimes: The time ranges during which the user must own the tokens.\n- tokenIds: The token IDs the user must own.\n- overrideWithCurrentTime: If true, auto override ownershipTimes with the current time.\n- mustSatisfyForAllAssets: If true, the user must own all specified tokens; otherwise, owning any one for \u003e= 1 millisecond is sufficient.","type":"object","properties":{"amountRange":{"description":"The range of amounts the user must own (min to max).","$ref":"#/definitions/tokenization.UintRange"},"collectionId":{"description":"The ID of the collection.","type":"string"},"mustSatisfyForAllAssets":{"description":"If true, the user must meet ownership requirements for all specified tokens; else, must meet requirements for any single token.","type":"boolean"},"overrideWithCurrentTime":{"description":"If true, override ownershipTimes with the current time.","type":"boolean"},"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user must own the tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"The token IDs the user must own.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.OutgoingApprovalCriteria":{"description":"OutgoingApprovalCriteria defines the criteria for approving outgoing transfers.\nThis is used for user-level outgoing approvals and only includes fields relevant to outgoing transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No sender checks are included for outgoing approvals since the sender is the user themselves.","$ref":"#/definitions/tokenization.AddressChecks"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.VotingChallenge"}}}},"tokenization.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"affiliate_percentage":{"type":"string","title":"affiliate_percentage defines the percentage of the transfer amount that goes to the affiliate"},"allowed_denoms":{"type":"array","title":"allowed_denoms defines the list of denoms that are allowed to be used in coin_transfers","items":{"type":"string"}}}},"tokenization.PathMetadata":{"description":"This message defines the metadata for paths (alias paths and cosmos coin wrapper paths).\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the path metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the path metadata.","type":"string"}}},"tokenization.PrecalculateBalancesFromApprovalDetails":{"description":"PrecalculateBalancesFromApprovalDetails defines the details for precalculating balances from an approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"precalculationOptions":{"description":"The options for precalculating the balances.","$ref":"#/definitions/tokenization.PrecalculationOptions"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.PrecalculationOptions":{"description":"PrecalculationOptions defines the options for precalculating the balances.","type":"object","properties":{"overrideTimestamp":{"description":"The timestamp to override with when calculating the balances.","type":"string"},"scalingMultiplier":{"description":"When \u003e 0 and allowAmountScaling is true on the approval, all precalculated balance amounts\nare multiplied by this value. Must be \u003c= maxScalingMultiplier. 0 means no scaling (returns 1x base).","type":"string"},"tokenIdsOverride":{"description":"The IDs to override for the transfer. Only applicable if using this option in precalculation.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.PredeterminedBalances":{"description":"PredeterminedBalances represents balances with predetermined order calculation.","type":"object","properties":{"incrementedBalances":{"description":"Balances that have a starting amount and increment. If this is nil, then we use the manual balances.","$ref":"#/definitions/tokenization.IncrementedBalances"},"manualBalances":{"description":"Manual balances that can be entered. If this is nil, then we use the incremented balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ManualBalances"}},"orderCalculationMethod":{"description":"The method to calculate the order of predetermined balances.","$ref":"#/definitions/tokenization.PredeterminedOrderCalculationMethod"}}},"tokenization.PredeterminedOrderCalculationMethod":{"description":"PredeterminedOrderCalculationMethod defines the method to calculate predetermined balances order.","type":"object","properties":{"challengeTrackerId":{"description":"If useMerkleChallengeLeafIndex is set, then this is the ID of the challenge tracker associated with this calculation method.","type":"string"},"useMerkleChallengeLeafIndex":{"description":"Use the Merkle challenge leaf index to calculate the order. Ex: Transfer that uses leaf index 0 gets the first balance, transfer that uses leaf index 1 gets the second balance, etc.","type":"boolean"},"useOverallNumTransfers":{"description":"Use the overall number of transfers to calculate the order. Ex: First transfer gets the first balance, second transfer gets the second balance, etc.","type":"boolean"},"usePerFromAddressNumTransfers":{"description":"Use the number of transfers per \"from\" address to calculate the order. Ex: First transfer from address A gets the first balance, second transfer from address A gets the second balance, etc.","type":"boolean"},"usePerInitiatedByAddressNumTransfers":{"description":"Use the number of transfers per \"initiated by\" address to calculate the order. Ex: First transfer initiated by address A gets the first balance, second transfer initiated by address A gets the second balance, etc.","type":"boolean"},"usePerToAddressNumTransfers":{"description":"Use the number of transfers per \"to\" address to calculate the order. Ex: First transfer to address A gets the first balance, second transfer to address A gets the second balance, etc.","type":"boolean"}}},"tokenization.QueryGetAddressListResponse":{"type":"object","properties":{"list":{"$ref":"#/definitions/tokenization.AddressList"}}},"tokenization.QueryGetAllReservedProtocolAddressesResponse":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}}}},"tokenization.QueryGetApprovalTrackerResponse":{"type":"object","properties":{"tracker":{"$ref":"#/definitions/tokenization.ApprovalTracker"}}},"tokenization.QueryGetBalanceForTokenResponse":{"type":"object","properties":{"balance":{"type":"string"}}},"tokenization.QueryGetBalanceResponse":{"type":"object","properties":{"balance":{"$ref":"#/definitions/tokenization.UserBalanceStore"}}},"tokenization.QueryGetChallengeTrackerResponse":{"type":"object","properties":{"numUsed":{"type":"string"}}},"tokenization.QueryGetCollectionResponse":{"type":"object","properties":{"collection":{"$ref":"#/definitions/tokenization.TokenCollection"}}},"tokenization.QueryGetCollectionStatsResponse":{"type":"object","properties":{"stats":{"$ref":"#/definitions/tokenization.CollectionStats"}}},"tokenization.QueryGetDynamicStoreResponse":{"type":"object","properties":{"store":{"$ref":"#/definitions/tokenization.DynamicStore"}}},"tokenization.QueryGetDynamicStoreValueResponse":{"type":"object","properties":{"value":{"$ref":"#/definitions/tokenization.DynamicStoreValue"}}},"tokenization.QueryGetETHSignatureTrackerResponse":{"type":"object","properties":{"numUsed":{"type":"string"}}},"tokenization.QueryGetVoteResponse":{"type":"object","properties":{"vote":{"$ref":"#/definitions/tokenization.VoteProof"}}},"tokenization.QueryGetVotesResponse":{"type":"object","properties":{"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.VoteProof"}}}},"tokenization.QueryGetWrappableBalancesResponse":{"type":"object","properties":{"amount":{"type":"string"}}},"tokenization.QueryIsAddressReservedProtocolResponse":{"type":"object","properties":{"isReservedProtocol":{"type":"boolean"}}},"tokenization.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/tokenization.Params"}}},"tokenization.RecurringOwnershipTimes":{"description":"RecurringOwnershipTimes represents a list of recurring ownership times.","type":"object","properties":{"chargePeriodLength":{"type":"string","title":"Grace period length where you can charge the next interval (nextStartTime - chargePeriodLength) until (nextStartTime) = charge period"},"intervalLength":{"description":"The interval length in unix milliseconds.","type":"string"},"startTime":{"description":"The original start time of the first interval.","type":"string"}}},"tokenization.ResetTimeIntervals":{"description":"Time intervals to reset the trackers at.","type":"object","properties":{"intervalLength":{"description":"Interval length in unix milliseconds.","type":"string"},"startTime":{"description":"Original start time of the first interval.","type":"string"}}},"tokenization.TokenCollection":{"description":"A TokenCollection is the top-level object for a collection of tokens. \nIt defines everything about the collection, such as the manager, metadata, etc.\n\nAll collections are identified by a collectionId assigned by the blockchain, which is a uint64 that increments (i.e. the first collection has ID 1).\n\nAll collections can have a manager who is responsible for managing the collection and can be granted certain admin\npermissions, such as the ability to mint new tokens.\n\nCollections may have different balance types: standard vs. off-chain - indexed vs. inherited.vs off-chain - non-indexed vs non-public.\n\nSee documentation for more details.","type":"object","properties":{"aliasPaths":{"description":"The alias (non-wrapping) paths for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AliasPath"}},"collectionApprovals":{"description":"Transferability of the collection for collections with standard balances, subject to changes over time.\nOverrides user approvals for a transfer if specified.\nTransfer must satisfy both user and collection-level approvals.\nOnly applicable to on-chain balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionId":{"description":"The unique identifier for this collection. This is assigned by the blockchain. First collection has ID 1.","type":"string"},"collectionMetadata":{"description":"The metadata for the collection itself.","$ref":"#/definitions/tokenization.CollectionMetadata"},"collectionPermissions":{"description":"Permissions that define what the manager of the collection can do or not do.","$ref":"#/definitions/tokenization.CollectionPermissions"},"cosmosCoinWrapperPaths":{"description":"The IBC wrapper (sdk.coin) paths for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CosmosCoinWrapperPath"}},"createdBy":{"description":"The user or entity who created the collection.","type":"string"},"customData":{"description":"An arbitrary field that can store any data.","type":"string"},"defaultBalances":{"description":"The default store of a balance / approvals for a user, upon genesis.","$ref":"#/definitions/tokenization.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.","$ref":"#/definitions/tokenization.CollectionInvariants"},"isArchived":{"description":"Whether the collection is archived or not.\nWhen archived, it becomes read-only, and no transactions can be processed until it is unarchived.","type":"boolean"},"manager":{"description":"The address of the manager of this collection.","type":"string"},"mintEscrowAddress":{"description":"The generated address of the collection. Also used to escrow Mint balances.","type":"string"},"standards":{"description":"Standards that define how to interpret the fields of the collection.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"The metadata for each token in the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}},"validTokenIds":{"description":"The valid token IDs for this collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.TokenIdsActionPermission":{"description":"TokenIdsActionPermission defines the permissions for performing an action for specific tokens.\nCurrently, this is only used for creating new tokens.\n\nEx: If you want to lock the ability to create new tokens for tokenIds [1,2] at ownershipTimes 1/1/2020 - 1/1/2021, \nyou could set the combination (tokenIds: [1,2], ownershipTimes: [1/1/2020 - 1/1/2021]) to always be forbidden.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.TokenMetadata":{"description":"This message defines the metadata for specific token IDs.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the token metadata.","type":"string"},"tokenIds":{"description":"The token IDs to which this metadata applies.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the token metadata.","type":"string"}}},"tokenization.Transfer":{"description":"Transfer defines the details of a transfer of tokens.","type":"object","properties":{"balances":{"description":"The balances to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"ethSignatureProofs":{"description":"The ETH signature proofs / solutions for all ETH signature challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ETHSignatureProof"}},"from":{"description":"The address of the sender of the transfer.","type":"string"},"memo":{"description":"The memo for the transfer.","type":"string"},"merkleProofs":{"description":"The Merkle proofs / solutions for all Merkle challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerkleProof"}},"onlyCheckPrioritizedCollectionApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedIncomingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedOutgoingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"precalculateBalancesFromApproval":{"description":"If defined, we will use the predeterminedBalances from the specified approval to calculate the balances at execution time.\nWe will override the balances field with the precalculated balances. Only applicable for approvals with predeterminedBalances set.","$ref":"#/definitions/tokenization.PrecalculateBalancesFromApprovalDetails"},"prioritizedApprovals":{"description":"The prioritized approvals for the transfer. By default, we scan linearly through the approvals and use the first match.\nThis field can be used to prioritize specific approvals and scan through them first.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalIdentifierDetails"}},"toAddresses":{"description":"The addresses of the recipients of the transfer.","type":"array","items":{"type":"string"}}}},"tokenization.UintRange":{"description":"The UintRange is a range of IDs from some start to some end (inclusive).\nuintRanges are one of the core types used.\n\nThey are used for everything from token IDs to time ranges to min/max balance amounts.\n\nSee the BitBadges documentation for more information.","type":"object","properties":{"end":{"description":"The ending value of the range (inclusive).","type":"string"},"start":{"description":"The starting value of the range (inclusive).","type":"string"}}},"tokenization.UserApprovalSettings":{"description":"UserApprovalSettings defines issuer-imposed constraints on user-level approvals.\nSet on collection-level ApprovalCriteria and propagated to user-level approvals\nduring greedy transfer matching. Each balance slice carries its own settings.","type":"object","properties":{"allowedDenoms":{"description":"Restricts which denoms user-level coinTransfers can reference (beyond params-level AllowedDenoms).\nIf empty, all params-allowed denoms are permitted.","type":"array","items":{"type":"string"}},"disableUserCoinTransfers":{"description":"If true, user-level approvals cannot trigger coinTransfers at all for transfers matched by this collection approval.","type":"boolean"},"userRoyalties":{"description":"User-level royalties to enforce for transfers matched by this collection approval.","$ref":"#/definitions/tokenization.UserRoyalties"}}},"tokenization.UserBalanceStore":{"description":"UserBalanceStore is the store for the user balances for a collection.\n\nIt consists of a list of balances, a list of approved outgoing transfers, and a list of approved incoming transfers,\nas well as the permissions for updating the approved incoming/outgoing transfers.\n\nUpon initialization, all fields (minus the balances) are set to the defaults specified by the collection.\n\nThe outgoing transfers can be used to allow / disallow transfers which are sent from this user.\nIf a transfer has no match, then it is disallowed by default, unless from == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedOutgoingTransfers is set to true.\n\nThe incoming transfers can be used to allow / disallow transfers which are sent to this user.\nIf a transfer has no match, then it is disallowed by default, unless to == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedIncomingTransfers is set to true.\n\nNote that the user approved transfers are only checked if the collection approved transfers do not specify to override\nthe user approved transfers. \n\nThe permissions are used to determine whether the user can update the approved incoming/outgoing transfers and auto approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Whether to auto-approve all incoming transfers by default. \nThis is just shorthand for adding an accept everything incoming approval\nwith no restrictions.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Whether to auto-approve self-initiated incoming transfers for this user (i.e. to == initiatedBy).","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Whether to auto-approve self-initiated outgoing transfers for this user (i.e. from == initiatedBy).","type":"boolean"},"balances":{"description":"The list of balances associated with this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"incomingApprovals":{"description":"The list of approved incoming transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserIncomingApproval"}},"outgoingApprovals":{"description":"The list of approved outgoing transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserOutgoingApproval"}},"userPermissions":{"description":"The permissions for this user's actions and transfers.","$ref":"#/definitions/tokenization.UserPermissions"}}},"tokenization.UserIncomingApproval":{"description":"UserIncomingApproval defines the rules for the approval of an incoming transfer to a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.IncomingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.UserIncomingApprovalPermission":{"description":"UserIncomingApprovalPermission defines the permissions for updating the user's approved incoming transfers.\n\nSee CollectionApprovalPermission for more details. This is equivalent without the toListId field because that is always the user.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.UserOutgoingApproval":{"description":"UserOutgoingApproval defines the rules for the approval of an outgoing transfer from a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.OutgoingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.UserOutgoingApprovalPermission":{"description":"UserOutgoingApprovalPermission defines the permissions for updating the user's approved outgoing transfers.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.UserPermissions":{"description":"UserPermissions defines the permissions for the user about their approvals (i.e., what the user can and cannot do).\n\nSee CollectionPermissions for more details on the different types of permissions.\n\ncanUpdateOutgoingApprovals and canUpdateOutgoingApprovals follow the same as the canUpdateCollectionApprovals in CollectionPermissions,\nbut certain fields are removed because they are not relevant to the user.","type":"object","properties":{"canUpdateAutoApproveAllIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for all incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated outgoing transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateIncomingApprovals":{"description":"Permissions related to updating the user's approved incoming transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserIncomingApprovalPermission"}},"canUpdateOutgoingApprovals":{"description":"Permissions related to updating the user's approved outgoing transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserOutgoingApprovalPermission"}}}},"tokenization.UserRoyalties":{"description":"UserRoyalties defines the royalties for a user.","type":"object","properties":{"payoutAddress":{"description":"Payout address for the royalties.","type":"string"},"percentage":{"description":"Percentage of the transfer amount to apply as royalties. 1 to 10000 represents basis points.","type":"string"}}},"tokenization.VoteProof":{"description":"VoteProof represents a vote cast for a voting challenge.","type":"object","properties":{"proposalId":{"description":"The proposal ID this vote is for.","type":"string"},"votedAt":{"description":"Timestamp (unix ms) when this vote was cast. Set automatically by the chain.","type":"string"},"voter":{"description":"The address of the voter casting the vote.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.Voter":{"description":"Voter defines a voter with their address and weight.","type":"object","properties":{"address":{"description":"The address of the voter.","type":"string"},"weight":{"description":"The weight of this voter's vote.","type":"string"}}},"tokenization.VotingChallenge":{"description":"VotingChallenge defines a rule for approval in the form of a voting/multi-sig challenge.\nRequires a weighted quorum threshold to be met through votes from specified voters.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Votes are stored separately and can be updated. The threshold is calculated as a percentage\nof total possible weight (all voters), not just voted weight. If you update the proposal ID, then the\nvote tracker will reset and start a new tally. We recommend using a unique proposal ID for each challenge\nto prevent overlap and unexpected behavior.","type":"object","properties":{"customData":{"description":"Arbitrary custom data associated with this voting challenge.","type":"string"},"delayAfterQuorum":{"description":"Mandatory delay in milliseconds after quorum is reached before the transfer can execute.\nIf set, the transfer will fail until: now \u003e= quorumReachedTimestamp + delayAfterQuorum.\nDuring the delay, signers can remove their votes to cancel (quorum drops = delay resets).","type":"string"},"proposalId":{"type":"string","title":"The ID of this voting challenge for tracking votes (scoped like challengeTrackerId).\nFormat: collectionId-approverAddress-approvalLevel-approvalId-challengeId"},"quorumThreshold":{"description":"The quorum threshold as a percentage (0-100) of total possible weight that must vote \"yes\".\nExample: 50 means 50% of total voter weight must vote yes for approval.","type":"string"},"resetAfterExecution":{"description":"If true, all votes for this challenge are cleared after a successful transfer execution.\nThis makes the challenge reusable (e.g., for vault withdrawals that need fresh approval each time).","type":"boolean"},"uri":{"description":"The URI associated with this voting challenge.","type":"string"},"voters":{"description":"List of voters with their weights. Each voter can cast a weighted vote.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Voter"}}}},"tokenization.v27.ActionPermission":{"description":"ActionPermission defines the permissions for performing an action.\n\nThis is simple and straightforward as the only thing we need to check is the permitted/forbidden times.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.AddressChecks":{"type":"object","title":"AddressChecks defines checks for address types (EVM contract, liquidity pool, etc.)","properties":{"mustBeEvmContract":{"description":"Require the address to be an EVM contract (has code).","type":"boolean"},"mustBeLiquidityPool":{"description":"Require the address to be a liquidity pool.","type":"boolean"},"mustNotBeEvmContract":{"description":"Require the address to not be an EVM contract (no code).","type":"boolean"},"mustNotBeLiquidityPool":{"description":"Require the address to not be a liquidity pool.","type":"boolean"}}},"tokenization.v27.AddressListInput":{"description":"AddressListInput is used for creating address lists via MsgCreateAddressLists.\nIt contains all fields from AddressList except createdBy, which is automatically set from the message creator.","type":"object","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.v27.AliasPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v27.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.v27.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v27.AltTimeChecks":{"type":"object","title":"AltTimeChecks defines alternative time-based checks for approval denial.\nIf the transfer time falls within any of the specified offline hours or days, the approval is denied.\nUses UTC timezone for neutral timezone approach.\nofflineHours: ranges of hours (0-23) when transfers should be denied\nofflineDays: ranges of days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied","properties":{"offlineDays":{"description":"Days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied. Uses UTC timezone.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"offlineHours":{"description":"Hours (0-23) when transfers should be denied. Uses UTC timezone.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.ApprovalAmounts":{"description":"ApprovalAmounts defines approval amounts per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the amounts transferred for the specified token IDs and ownership times \nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallApprovalAmount":{"description":"Overall approval amount.","type":"string"},"perFromAddressApprovalAmount":{"description":"Approval amount per \"from\" address.","type":"string"},"perInitiatedByAddressApprovalAmount":{"description":"Approval amount per \"initiated by\" address.","type":"string"},"perToAddressApprovalAmount":{"description":"Approval amount per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v27.ResetTimeIntervals"}}},"tokenization.v27.ApprovalCriteria":{"description":"ApprovalCriteria defines the criteria for approving transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"allowBackedMinting":{"description":"If true, this collection approval allows backed minting operations (CosmosCoinBackedPath).\nWhen false, this approval cannot be used for transfers involving backed minting addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"allowSpecialWrapping":{"description":"If true, this collection approval allows special wrapping operations (CosmosCoinWrapperPath).\nWhen false, this approval cannot be used for transfers involving wrapping addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v27.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v27.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v27.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v27.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"overridesFromOutgoingApprovals":{"description":"Overrides the user's outgoing approvals for approval. If true, this collection-level approval\ntakes precedence over any outgoing approvals defined by the sender, allowing the collection to\ncontrol outgoing transfer behavior.","type":"boolean"},"overridesToIncomingApprovals":{"description":"Overrides the user's incoming approvals for approval. If true, this collection-level approval\ntakes precedence over any incoming approvals defined by the recipient, allowing the collection to\ncontrol incoming transfer behavior.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v27.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"userRoyalties":{"description":"User level royalties to apply to the transfer. Defines the percentage and payout address for\nroyalties that should be collected when this approval is used for a transfer.","$ref":"#/definitions/tokenization.v27.UserRoyalties"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.VotingChallenge"}}}},"tokenization.v27.ApprovalIdentifierDetails":{"description":"ApprovalIdentifierDetails defines the details to identify a specific approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v27.AutoDeletionOptions":{"description":"AutoDeletionOptions defines the options for auto-deletion of approvals.","type":"object","properties":{"afterOneUse":{"type":"boolean","title":"After one use?"},"afterOverallMaxNumTransfers":{"type":"boolean","title":"After overall max number of uses threshold is met?"},"allowCounterpartyPurge":{"type":"boolean","title":"Allow counterparty to purge this approval if they are the only initiator"},"allowPurgeIfExpired":{"type":"boolean","title":"Allow others to call PurgeApprovals on behalf of this approval owner"}}},"tokenization.v27.Balance":{"description":"Balance represents the balance of a token for a specific user.\nThe user amounts xAmount of a token specified for the time ranges specified.\n\nExample: User A owns x10 of token IDs 1-10 from 1/1/2020 to 1/1/2021.\n\nIf times or tokenIDs have len \u003e 1, then the user owns all token IDs specified for all time ranges specified.","type":"object","properties":{"amount":{"description":"The amount of the token owned by the user.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"The token IDs for which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.CoinTransfer":{"type":"object","properties":{"coins":{"description":"The sdk.Coins to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"overrideFromWithApproverAddress":{"description":"By default, the from address is the initiator of the transaction.\nIf this is set to true, we will override the from address with the approver address.\nNote: This is not applicable for collection approvals (since approverAddress == '').","type":"boolean"},"overrideToWithInitiator":{"description":"By default, the to address is what is specified in the coin transfer.\nIf this is set to true, we will override the to address with the initiator of the transaction.","type":"boolean"},"to":{"description":"The address of the recipient of the transfer.","type":"string"}}},"tokenization.v27.CollectionApproval":{"type":"object","title":"CollectionApproval defines the rules for the approval of a transfer on the collection level","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v27.ApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v27.CollectionApprovalPermission":{"description":"CollectionApprovalPermission defines what collection approved transfers can be updated vs. are locked.\n\nEach transfer is broken down to a (from, to, initiatedBy, transferTime, tokenId) tuple.\nFor a transfer to match, we need to match ALL of the fields in the combination. \nThese are determined by the fromListId, toListId, initiatedByListId, transferTimes, tokenIds fields.\nAddressLists are used for (from, to, initiatedBy) which are a permanent list of addresses identified by an ID (see AddressLists). \n\npermanentlyPermitted/ForbiddenTimes: when can the manager execute this permission?\n\nEx: Let's say we are updating the transferability for the transfer tuple (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", 10, 1000).\nWe would check to find the FIRST CollectionApprovalPermission that matches this combination.\nIf we find a match, we would check the permitted/forbidden times to see if we can execute this permission (default is ALLOWED).\n\nEx: So if you wanted to freeze the transferability to enforce that token ID 1 will always be transferable, you could set\nthe combination (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", \"All Transfer Times\", 1) to always be forbidden.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.CollectionMetadata":{"description":"This message defines the metadata for the collection.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the collection metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the collection metadata.","type":"string"}}},"tokenization.v27.CollectionPermissions":{"description":"CollectionPermissions defines the permissions for the collection (i.e., what the manager can and cannot do).\n\nThere are three types of permissions for a collection: ActionPermission, TokenIdsActionPermission, and CollectionApprovalPermission.\n\nThe permission type allows fine-grained access control for each action.\n- ActionPermission: defines when the manager can perform an action or update a field.\n- TokenIdsActionPermission: defines when the manager can perform an action for specific tokens\n- CollectionApprovalPermission: defines when the manager can update the transferability of the collection and what transfers can be updated vs. locked.\n\nNote there are a few different times here which could get confusing:\n- permanentlyPermitted/ForbiddenTimes - the times that a permission can be performed\n- transferTimes - the times that a transfer occurs\n- ownershipTimes - the times when a token is owned by a user\n\nThe permitted/permanentlyForbiddenTimes are used to determine when a permission can be executed.\nOnce a time is set to be permitted or forbidden, it is PERMANENT and cannot be changed.\nIf a time is not set to be permitted or forbidden, it is considered NEUTRAL and can be updated but is ALLOWED by default.\n\nIMPORTANT: We take first-match only for the permissions. This means that if you forbid time T in array index 0 and permit time T in index 1, \nwe will only check the first permission (forbid time T) and not the second permission (permit time T).","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApprovalPermission"}},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenIdsActionPermission"}},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenIdsActionPermission"}}}},"tokenization.v27.Conversion":{"description":"Conversion defines a bidirectional conversion between a cosmos coin (with denom) and token balances.","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin side of the conversion (amount + denom).","$ref":"#/definitions/tokenization.v27.ConversionSideAWithDenom"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}}}},"tokenization.v27.ConversionSideA":{"description":"ConversionSideA represents the cosmos coin amount side of a conversion without denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"}}},"tokenization.v27.ConversionSideAWithDenom":{"description":"ConversionSideAWithDenom represents the cosmos coin side of a conversion with denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"},"denom":{"description":"The denomination of the cosmos coin.","type":"string"}}},"tokenization.v27.ConversionWithoutDenom":{"description":"ConversionWithoutDenom defines a bidirectional conversion between a cosmos coin amount (without denom) and token balances.\nThe denom is stored at the base level (e.g., in AliasPath or CosmosCoinWrapperPath).","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin amount side of the conversion (amount only, denom stored separately).","$ref":"#/definitions/tokenization.v27.ConversionSideA"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}}}},"tokenization.v27.CosmosCoinBackedPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v27.Conversion"}}},"tokenization.v27.CosmosCoinWrapperPathAddObject":{"type":"object","properties":{"allowOverrideWithAnyValidToken":{"type":"boolean"},"conversion":{"$ref":"#/definitions/tokenization.v27.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.v27.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v27.DenomUnit":{"type":"object","properties":{"decimals":{"description":"The number of decimal places for this unit. Defines the precision of the unit.","type":"string"},"isDefaultDisplay":{"description":"If true, this is the default display unit. Only one unit should be marked as the default display unit.\nThis unit will be used by default when displaying the coin amount. If none are marked default, we use the base level.","type":"boolean"},"metadata":{"description":"The metadata for this denomination unit.","$ref":"#/definitions/tokenization.v27.PathMetadata"},"symbol":{"description":"The symbol for this unit (e.g., \"BADGE\", \"nBADGE\"). Used for display purposes.","type":"string"}}},"tokenization.v27.DynamicStoreChallenge":{"description":"DynamicStoreChallenge defines a challenge that requires the initiator to pass a dynamic store check.","type":"object","properties":{"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"storeId":{"description":"The ID of the dynamic store to check.","type":"string"}}},"tokenization.v27.ETHSignatureChallenge":{"description":"ETHSignatureChallenge defines a rule for the approval in the form of an Ethereum signature challenge.\n\nAn ETH signature challenge is a challenge where the user must provide a valid Ethereum signature for a specific nonce.\nThe signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId) and each signature can only be used once.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: We track the usage of each signature to prevent replay attacks. Each signature can only be used once.\nIf you update the challenge ID, then the used signatures tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this ETH signature challenge for tracking the number of uses per signature.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this ETH signature challenge.","type":"string"},"signer":{"description":"The Ethereum address that must sign the nonce for verification.","type":"string"},"uri":{"description":"The URI associated with this ETH signature challenge, optionally providing metadata about the challenge.","type":"string"}}},"tokenization.v27.ETHSignatureProof":{"description":"ETHSignatureProof represents an Ethereum signature proof for a challenge.","type":"object","properties":{"nonce":{"description":"The nonce that was signed. The signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId).","type":"string"},"signature":{"description":"The Ethereum signature of the nonce.","type":"string"}}},"tokenization.v27.EVMQueryChallenge":{"description":"EVMQueryChallenge defines a rule for approval via read-only EVM contract query.\n\nThe challenge executes a staticcall to the specified contract with the given calldata.\nThe result is compared against the expected result (if provided) or checked for non-zero return.\n\nIMPORTANT: This is read-only and cannot modify state. The query is executed with a gas limit\nto prevent DoS attacks. All results are deterministic since EVM state is consistent within a block.","type":"object","properties":{"calldata":{"type":"string","title":"ABI-encoded function selector + arguments (hex string without 0x prefix)\nExample: \"70a08231000000000000000000000000{address}\" for balanceOf(address)\nCan use placeholders: $initiator, $sender, $recipient (replaced at runtime)"},"comparisonOperator":{"description":"Comparison operator: \"eq\" (equals), \"ne\" (not equals), \"gt\" (greater than), \"gte\", \"lt\", \"lte\"\nOnly \"eq\" and \"ne\" work for non-numeric types. Default is \"eq\".","type":"string"},"contractAddress":{"type":"string","title":"The EVM contract address to query (0x format or bb1 format)"},"customData":{"type":"string","title":"Arbitrary custom data"},"expectedResult":{"description":"Expected return value (hex string without 0x prefix). If empty, any non-error result passes.\nFor boolean checks, use \"0000...0001\" for true.","type":"string"},"gasLimit":{"type":"string","title":"Gas limit for the query (default 100000, max 500000)"},"uri":{"type":"string","title":"The URI associated with this challenge (metadata)"}}},"tokenization.v27.IncomingApprovalCriteria":{"description":"IncomingApprovalCriteria defines the criteria for approving incoming transfers.\nThis is used for user-level incoming approvals and only includes fields relevant to incoming transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v27.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v27.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v27.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v27.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v27.PredeterminedBalances"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No recipient checks are included for incoming approvals since the recipient is the user themselves.","$ref":"#/definitions/tokenization.v27.AddressChecks"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.VotingChallenge"}}}},"tokenization.v27.IncrementedBalances":{"description":"IncrementedBalances represents balances that are incremented by specific amounts, according to the order calculation method.","type":"object","properties":{"allowOverrideTimestamp":{"description":"Whether to allow overriding the timestamp for the balances (only applicable with durationFromTimestamp set).","type":"boolean"},"allowOverrideWithAnyValidToken":{"type":"boolean","title":"Allow override of any valid ID"},"durationFromTimestamp":{"description":"The amount of unix milliseconds to approve starting from now. Incompatible with incrementOwnershipTimesBy.","type":"string"},"incrementOwnershipTimesBy":{"description":"The amount by which to increment ownership times. Incompatible with approveStartingFromNowBy.","type":"string"},"incrementTokenIdsBy":{"description":"The amount by which to increment token IDs.","type":"string"},"recurringOwnershipTimes":{"description":"Recurring ownership times.","$ref":"#/definitions/tokenization.v27.RecurringOwnershipTimes"},"startBalances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}}}},"tokenization.v27.InvariantsAddObject":{"description":"InvariantsAddObject is used for adding invariants without specifying addresses.\nAddresses are generated by the keeper and stored in the collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.\nAddress will be generated by the keeper.","$ref":"#/definitions/tokenization.v27.CosmosCoinBackedPathAddObject"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.v27.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.v27.ManualBalances":{"description":"ManualBalances represents a list of manual balances entered for the predetermined balances criteria. Order is calculated according to the calculation method set.","type":"object","properties":{"balances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}}}},"tokenization.v27.MaxNumTransfers":{"description":"MaxNumTransfers defines the maximum number of transfers per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the number of transfers for the specified token IDs and ownership times\nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallMaxNumTransfers":{"description":"Overall maximum number of transfers.","type":"string"},"perFromAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"from\" address.","type":"string"},"perInitiatedByAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"initiated by\" address.","type":"string"},"perToAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v27.ResetTimeIntervals"}}},"tokenization.v27.MerkleChallenge":{"description":"Challenges define a rule for the approval in the form of a Merkle challenge.\n\nA Merkle challenge is a challenge where the user must provide a Merkle proof to a Merkle tree. If they provide a valid proof,\nthen the challenge is met. All challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Merkle challenges currently are limited to SHA256 hashes. See documentation for MerkleChallenge for more details and tutorials.\n\nIMPORTANT: We track the number of uses per leaf according to the challengeTrackerId specified by the parent approval of this challenge.\nIf you update the challenge ID, then the used leaves tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this Merkle challenge for tracking the number of uses per leaf.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this Merkle challenge.","type":"string"},"expectedProofLength":{"description":"The expected length of the Merkle path for verification. Used to prevent Merkle path truncation attacks.","type":"string"},"leafSigner":{"description":"Ethereum address that must sign the leaf. Used to protect against man-in-the-middle attacks.\nSignature scheme: sign(leaf + \"-\" + creatorAddress), verified using elliptic curve signature verification.","type":"string"},"maxUsesPerLeaf":{"description":"The maximum number of times each leaf can be used. Must be 1 if useCreatorAddressAsLeaf is false to prevent replay attacks.","type":"string"},"root":{"description":"The root hash of the Merkle tree to which the Merkle path must lead for verification.","type":"string"},"uri":{"description":"The URI associated with this Merkle challenge, optionally providing metadata about the challenge.","type":"string"},"useCreatorAddressAsLeaf":{"description":"If true, we will override the user's leaf for their proof with their creator address. Used for whitelist trees where all leaves are valid BitBadges addresses.","type":"boolean"}}},"tokenization.v27.MerklePathItem":{"description":"MerklePathItem represents an item in a Merkle path.","type":"object","properties":{"aunt":{"description":"The hash of the sibling node (aunt) in the Merkle path.","type":"string"},"onRight":{"description":"Indicates whether the aunt node is on the right side of the path.","type":"boolean"}}},"tokenization.v27.MerkleProof":{"description":"MerkleProof represents a Merkle proof, consistent with Tendermint/Crypto Merkle tree.","type":"object","properties":{"aunts":{"description":"List of Merkle path items (aunts) that make up the proof.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerklePathItem"}},"leaf":{"description":"The hash of the leaf node for which the proof is generated.","type":"string"},"leafSignature":{"description":"The signature of the leaf node tying the address to the leaf node.","type":"string"}}},"tokenization.v27.MsgCastVote":{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","type":"object","properties":{"approvalId":{"description":"The approval ID.","type":"string"},"approvalLevel":{"description":"The approval level (\"collection\", \"incoming\", or \"outgoing\").","type":"string"},"approverAddress":{"description":"The approver address (empty string for collection-level approvals).","type":"string"},"collectionId":{"description":"The collection ID for the voting challenge.","type":"string"},"creator":{"description":"The address of the voter casting the vote.","type":"string"},"proposalId":{"description":"The proposal ID (challenge ID) from the VotingChallenge.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.v27.MsgCastVoteResponse":{"type":"object"},"tokenization.v27.MsgCreateAddressLists":{"description":"MsgCreateAddressLists is used to create address lists.","type":"object","properties":{"addressLists":{"description":"Address lists to create. The createdBy field will be automatically set to the creator address.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.AddressListInput"}},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgCreateAddressListsResponse":{"description":"MsgCreateAddressListsResponse is the response to MsgCreateAddressLists.","type":"object"},"tokenization.v27.MsgCreateCollection":{"description":"MsgCreateCollection is used to create a new collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.AliasPathAddObject"}},"collectionApprovals":{"description":"Collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApproval"}},"collectionMetadata":{"description":"Collection metadata.","$ref":"#/definitions/tokenization.v27.CollectionMetadata"},"collectionPermissions":{"description":"Collection permissions.","$ref":"#/definitions/tokenization.v27.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v27.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v27.InvariantsAddObject"},"isArchived":{"description":"isArchived flag.","type":"boolean"},"manager":{"description":"Manager address.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"Standards entries.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"Token metadata entries.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenMetadata"}},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.MsgCreateCollectionResponse":{"description":"MsgCreateCollectionResponse is the response to MsgCreateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgCreateDynamicStore":{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v27.MsgCreateDynamicStoreResponse":{"description":"MsgCreateDynamicStoreResponse is the response to MsgCreateDynamicStore.","type":"object","properties":{"storeId":{"description":"ID of the dynamic store.","type":"string"}}},"tokenization.v27.MsgDeleteCollection":{"description":"MsgDeleteCollection is used to delete a collection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgDeleteCollectionResponse":{"description":"MsgDeleteCollectionResponse is the response to MsgDeleteCollection.","type":"object"},"tokenization.v27.MsgDeleteDynamicStore":{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store to delete.","type":"string"}}},"tokenization.v27.MsgDeleteDynamicStoreResponse":{"description":"MsgDeleteDynamicStoreResponse is the response to MsgDeleteDynamicStore.","type":"object"},"tokenization.v27.MsgDeleteIncomingApproval":{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgDeleteIncomingApprovalResponse":{"description":"MsgDeleteIncomingApprovalResponse is the response to MsgDeleteIncomingApproval.","type":"object"},"tokenization.v27.MsgDeleteOutgoingApproval":{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgDeleteOutgoingApprovalResponse":{"description":"MsgDeleteOutgoingApprovalResponse is the response to MsgDeleteOutgoingApproval.","type":"object"},"tokenization.v27.MsgPurgeApprovals":{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","type":"object","properties":{"approvalsToPurge":{"description":"Specific approvals to purge. If empty, purges all applicable approvals based on other flags.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ApprovalIdentifierDetails"}},"approverAddress":{"description":"Address of the user whose approvals to purge. If empty, defaults to creator.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"purgeCounterpartyApprovals":{"description":"Whether to purge counterparty approvals (approvals where the creator is the only initiator).","type":"boolean"},"purgeExpired":{"description":"Whether to purge expired approvals (approvals with no future valid transfer times).","type":"boolean"}}},"tokenization.v27.MsgPurgeApprovalsResponse":{"description":"MsgPurgeApprovalsResponse is the response to MsgPurgeApprovals.","type":"object","properties":{"numPurged":{"description":"Number of approvals purged.","type":"string"}}},"tokenization.v27.MsgSetCollectionApprovals":{"type":"object","title":"MsgSetCollectionApprovals sets the collection approvals and canUpdateCollectionApprovals permission","properties":{"canUpdateCollectionApprovals":{"type":"array","title":"Permission to update collection approvals","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApprovalPermission"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApproval"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgSetCollectionApprovalsResponse":{"description":"MsgSetCollectionApprovalsResponse is the response to MsgSetCollectionApprovals.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetCollectionMetadata":{"type":"object","title":"MsgSetCollectionMetadata sets the collection metadata and canUpdateCollectionMetadata permission","properties":{"canUpdateCollectionMetadata":{"type":"array","title":"Permission to update collection metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v27.CollectionMetadata"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgSetCollectionMetadataResponse":{"description":"MsgSetCollectionMetadataResponse is the response to MsgSetCollectionMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetCustomData":{"type":"object","title":"MsgSetCustomData sets the custom data and canUpdateCustomData permission","properties":{"canUpdateCustomData":{"type":"array","title":"Permission to update custom data","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"}}},"tokenization.v27.MsgSetCustomDataResponse":{"description":"MsgSetCustomDataResponse is the response to MsgSetCustomData.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetDynamicStoreValue":{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","type":"object","properties":{"address":{"description":"The address for which to set the value.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store.","type":"string"},"value":{"description":"The boolean value to set (true/false).","type":"boolean"}}},"tokenization.v27.MsgSetDynamicStoreValueResponse":{"description":"MsgSetDynamicStoreValueResponse is the response to MsgSetDynamicStoreValue.","type":"object"},"tokenization.v27.MsgSetIncomingApproval":{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","type":"object","properties":{"approval":{"description":"The incoming approval to set.","$ref":"#/definitions/tokenization.v27.UserIncomingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgSetIncomingApprovalResponse":{"description":"MsgSetIncomingApprovalResponse is the response to MsgSetIncomingApproval.","type":"object"},"tokenization.v27.MsgSetIsArchived":{"type":"object","title":"MsgSetIsArchived sets the isArchived and canArchiveCollection permission","properties":{"canArchiveCollection":{"type":"array","title":"Permission to archive collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"isArchived":{"description":"New isArchived to set.","type":"boolean"}}},"tokenization.v27.MsgSetIsArchivedResponse":{"description":"MsgSetIsArchivedResponse is the response to MsgSetIsArchived.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetManager":{"type":"object","title":"MsgSetManager sets the manager and canUpdateManager permission","properties":{"canUpdateManager":{"type":"array","title":"Permission to update manager","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"manager":{"description":"New manager to set.","type":"string"}}},"tokenization.v27.MsgSetManagerResponse":{"description":"MsgSetManagerResponse is the response to MsgSetManager.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetOutgoingApproval":{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","type":"object","properties":{"approval":{"description":"The outgoing approval to set.","$ref":"#/definitions/tokenization.v27.UserOutgoingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgSetOutgoingApprovalResponse":{"description":"MsgSetOutgoingApprovalResponse is the response to MsgSetOutgoingApproval.","type":"object"},"tokenization.v27.MsgSetReservedProtocolAddress":{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","type":"object","properties":{"address":{"description":"Address to set or unset as reserved protocol address.","type":"string"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"isReservedProtocol":{"description":"Whether the address should be a reserved protocol address (true) or not (false).","type":"boolean"}}},"tokenization.v27.MsgSetReservedProtocolAddressResponse":{"description":"MsgSetReservedProtocolAddressResponse is the response to MsgSetReservedProtocolAddress.","type":"object"},"tokenization.v27.MsgSetStandards":{"type":"object","title":"MsgSetStandards sets the standards and canUpdateStandards permission","properties":{"canUpdateStandards":{"type":"array","title":"Permission to update standards","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}}}},"tokenization.v27.MsgSetStandardsResponse":{"description":"MsgSetStandardsResponse is the response to MsgSetStandards.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetTokenMetadata":{"type":"object","title":"MsgSetTokenMetadata sets the token metadata and canUpdateTokenMetadata permission","properties":{"canUpdateTokenMetadata":{"type":"array","title":"Permission to update token metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenMetadata"}}}},"tokenization.v27.MsgSetTokenMetadataResponse":{"description":"MsgSetTokenMetadataResponse is the response to MsgSetTokenMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetValidTokenIds":{"type":"object","title":"MsgSetValidTokenIds sets the validTokenIds and canUpdateValidTokenIds permission","properties":{"canUpdateValidTokenIds":{"type":"array","title":"Permission to update valid token IDs","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.MsgSetValidTokenIdsResponse":{"description":"MsgSetValidTokenIdsResponse is the response to MsgSetValidTokenIds.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgTransferTokens":{"description":"MsgTransferTokens is used to transfer tokens.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"transfers":{"description":"Transfers to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Transfer"}}}},"tokenization.v27.MsgTransferTokensResponse":{"description":"MsgTransferTokensResponse is the response to MsgTransferTokens.","type":"object"},"tokenization.v27.MsgUniversalUpdateCollection":{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v27.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v27.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v27.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v27.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.MsgUniversalUpdateCollectionResponse":{"description":"MsgUniversalUpdateCollectionResponse is the response to MsgUniversalUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgUpdateCollection":{"description":"MsgUpdateCollection is used to update a collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v27.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v27.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v27.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.MsgUpdateCollectionResponse":{"description":"MsgUpdateCollectionResponse is the response to MsgUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgUpdateDynamicStore":{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The new default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"The global kill switch state (true = enabled, false = disabled/halted).\nCallers should query the current value first if they want to keep it unchanged.","type":"boolean"},"storeId":{"description":"ID of the dynamic store to update.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v27.MsgUpdateDynamicStoreResponse":{"description":"MsgUpdateDynamicStoreResponse is the response to MsgUpdateDynamicStore.","type":"object"},"tokenization.v27.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tokenization.v27.Params"}}},"tokenization.v27.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"tokenization.v27.MsgUpdateUserApprovals":{"description":"MsgUpdateUserApprovals is used to update user approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Auto-approve setting for all incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Auto-approve setting for self-initiated incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Auto-approve setting for self-initiated outgoing transfers.","type":"boolean"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"incomingApprovals":{"description":"New incoming approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserIncomingApproval"}},"outgoingApprovals":{"description":"New outgoing approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserOutgoingApproval"}},"updateAutoApproveAllIncomingTransfers":{"description":"Indicates if auto-approve settings for all incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Indicates if auto-approve settings for self-initiated incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Indicates if auto-approve settings for self-initiated outgoing transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIncomingApprovals":{"description":"Indicates if incoming approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateOutgoingApprovals":{"description":"Indicates if outgoing approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateUserPermissions":{"description":"Indicates if user permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"userPermissions":{"description":"New user permissions to set.","$ref":"#/definitions/tokenization.v27.UserPermissions"}}},"tokenization.v27.MsgUpdateUserApprovalsResponse":{"description":"MsgUpdateUserApprovalsResponse is the response to MsgUpdateUserApprovals.","type":"object"},"tokenization.v27.MustOwnTokens":{"description":"MustOwnTokens represents a condition where a user must own specific tokens\nto be approved to transfer.\n\n- collectionId: The ID of the collection for the tokens that must be owned\n- amountRange: The range of amounts the user must own (min to max)\n- ownershipTimes: The time ranges during which the user must own the tokens.\n- tokenIds: The token IDs the user must own.\n- overrideWithCurrentTime: If true, auto override ownershipTimes with the current time.\n- mustSatisfyForAllAssets: If true, the user must own all specified tokens; otherwise, owning any one for \u003e= 1 millisecond is sufficient.","type":"object","properties":{"amountRange":{"description":"The range of amounts the user must own (min to max).","$ref":"#/definitions/tokenization.v27.UintRange"},"collectionId":{"description":"The ID of the collection.","type":"string"},"mustSatisfyForAllAssets":{"description":"If true, the user must meet ownership requirements for all specified tokens; else, must meet requirements for any single token.","type":"boolean"},"overrideWithCurrentTime":{"description":"If true, override ownershipTimes with the current time.","type":"boolean"},"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user must own the tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"The token IDs the user must own.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.OutgoingApprovalCriteria":{"description":"OutgoingApprovalCriteria defines the criteria for approving outgoing transfers.\nThis is used for user-level outgoing approvals and only includes fields relevant to outgoing transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v27.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v27.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v27.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v27.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v27.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No sender checks are included for outgoing approvals since the sender is the user themselves.","$ref":"#/definitions/tokenization.v27.AddressChecks"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.VotingChallenge"}}}},"tokenization.v27.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"affiliate_percentage":{"type":"string","title":"affiliate_percentage defines the percentage of the transfer amount that goes to the affiliate"},"allowed_denoms":{"type":"array","title":"allowed_denoms defines the list of denoms that are allowed to be used in coin_transfers","items":{"type":"string"}}}},"tokenization.v27.PathMetadata":{"description":"This message defines the metadata for paths (alias paths and cosmos coin wrapper paths).\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the path metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the path metadata.","type":"string"}}},"tokenization.v27.PrecalculateBalancesFromApprovalDetails":{"description":"PrecalculateBalancesFromApprovalDetails defines the details for precalculating balances from an approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"precalculationOptions":{"description":"The options for precalculating the balances.","$ref":"#/definitions/tokenization.v27.PrecalculationOptions"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v27.PrecalculationOptions":{"description":"PrecalculationOptions defines the options for precalculating the balances.","type":"object","properties":{"overrideTimestamp":{"description":"The timestamp to override with when calculating the balances.","type":"string"},"tokenIdsOverride":{"description":"The IDs to override for the transfer. Only applicable if using this option in precalculation.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.PredeterminedBalances":{"description":"PredeterminedBalances represents balances with predetermined order calculation.","type":"object","properties":{"incrementedBalances":{"description":"Balances that have a starting amount and increment. If this is nil, then we use the manual balances.","$ref":"#/definitions/tokenization.v27.IncrementedBalances"},"manualBalances":{"description":"Manual balances that can be entered. If this is nil, then we use the incremented balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ManualBalances"}},"orderCalculationMethod":{"description":"The method to calculate the order of predetermined balances.","$ref":"#/definitions/tokenization.v27.PredeterminedOrderCalculationMethod"}}},"tokenization.v27.PredeterminedOrderCalculationMethod":{"description":"PredeterminedOrderCalculationMethod defines the method to calculate predetermined balances order.","type":"object","properties":{"challengeTrackerId":{"description":"If useMerkleChallengeLeafIndex is set, then this is the ID of the challenge tracker associated with this calculation method.","type":"string"},"useMerkleChallengeLeafIndex":{"description":"Use the Merkle challenge leaf index to calculate the order. Ex: Transfer that uses leaf index 0 gets the first balance, transfer that uses leaf index 1 gets the second balance, etc.","type":"boolean"},"useOverallNumTransfers":{"description":"Use the overall number of transfers to calculate the order. Ex: First transfer gets the first balance, second transfer gets the second balance, etc.","type":"boolean"},"usePerFromAddressNumTransfers":{"description":"Use the number of transfers per \"from\" address to calculate the order. Ex: First transfer from address A gets the first balance, second transfer from address A gets the second balance, etc.","type":"boolean"},"usePerInitiatedByAddressNumTransfers":{"description":"Use the number of transfers per \"initiated by\" address to calculate the order. Ex: First transfer initiated by address A gets the first balance, second transfer initiated by address A gets the second balance, etc.","type":"boolean"},"usePerToAddressNumTransfers":{"description":"Use the number of transfers per \"to\" address to calculate the order. Ex: First transfer to address A gets the first balance, second transfer to address A gets the second balance, etc.","type":"boolean"}}},"tokenization.v27.RecurringOwnershipTimes":{"description":"RecurringOwnershipTimes represents a list of recurring ownership times.","type":"object","properties":{"chargePeriodLength":{"type":"string","title":"Grace period length where you can charge the next interval (nextStartTime - chargePeriodLength) until (nextStartTime) = charge period"},"intervalLength":{"description":"The interval length in unix milliseconds.","type":"string"},"startTime":{"description":"The original start time of the first interval.","type":"string"}}},"tokenization.v27.ResetTimeIntervals":{"description":"Time intervals to reset the trackers at.","type":"object","properties":{"intervalLength":{"description":"Interval length in unix milliseconds.","type":"string"},"startTime":{"description":"Original start time of the first interval.","type":"string"}}},"tokenization.v27.TokenIdsActionPermission":{"description":"TokenIdsActionPermission defines the permissions for performing an action for specific tokens.\nCurrently, this is only used for creating new tokens.\n\nEx: If you want to lock the ability to create new tokens for tokenIds [1,2] at ownershipTimes 1/1/2020 - 1/1/2021, \nyou could set the combination (tokenIds: [1,2], ownershipTimes: [1/1/2020 - 1/1/2021]) to always be forbidden.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.TokenMetadata":{"description":"This message defines the metadata for specific token IDs.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the token metadata.","type":"string"},"tokenIds":{"description":"The token IDs to which this metadata applies.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the token metadata.","type":"string"}}},"tokenization.v27.Transfer":{"description":"Transfer defines the details of a transfer of tokens.","type":"object","properties":{"balances":{"description":"The balances to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}},"ethSignatureProofs":{"description":"The ETH signature proofs / solutions for all ETH signature challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ETHSignatureProof"}},"from":{"description":"The address of the sender of the transfer.","type":"string"},"memo":{"description":"The memo for the transfer.","type":"string"},"merkleProofs":{"description":"The Merkle proofs / solutions for all Merkle challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerkleProof"}},"onlyCheckPrioritizedCollectionApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedIncomingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedOutgoingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"precalculateBalancesFromApproval":{"description":"If defined, we will use the predeterminedBalances from the specified approval to calculate the balances at execution time.\nWe will override the balances field with the precalculated balances. Only applicable for approvals with predeterminedBalances set.","$ref":"#/definitions/tokenization.v27.PrecalculateBalancesFromApprovalDetails"},"prioritizedApprovals":{"description":"The prioritized approvals for the transfer. By default, we scan linearly through the approvals and use the first match.\nThis field can be used to prioritize specific approvals and scan through them first.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ApprovalIdentifierDetails"}},"toAddresses":{"description":"The addresses of the recipients of the transfer.","type":"array","items":{"type":"string"}}}},"tokenization.v27.UintRange":{"description":"The UintRange is a range of IDs from some start to some end (inclusive).\nuintRanges are one of the core types used.\n\nThey are used for everything from token IDs to time ranges to min/max balance amounts.\n\nSee the BitBadges documentation for more information.","type":"object","properties":{"end":{"description":"The ending value of the range (inclusive).","type":"string"},"start":{"description":"The starting value of the range (inclusive).","type":"string"}}},"tokenization.v27.UserBalanceStore":{"description":"UserBalanceStore is the store for the user balances for a collection.\n\nIt consists of a list of balances, a list of approved outgoing transfers, and a list of approved incoming transfers,\nas well as the permissions for updating the approved incoming/outgoing transfers.\n\nUpon initialization, all fields (minus the balances) are set to the defaults specified by the collection.\n\nThe outgoing transfers can be used to allow / disallow transfers which are sent from this user.\nIf a transfer has no match, then it is disallowed by default, unless from == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedOutgoingTransfers is set to true.\n\nThe incoming transfers can be used to allow / disallow transfers which are sent to this user.\nIf a transfer has no match, then it is disallowed by default, unless to == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedIncomingTransfers is set to true.\n\nNote that the user approved transfers are only checked if the collection approved transfers do not specify to override\nthe user approved transfers. \n\nThe permissions are used to determine whether the user can update the approved incoming/outgoing transfers and auto approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Whether to auto-approve all incoming transfers by default. \nThis is just shorthand for adding an accept everything incoming approval\nwith no restrictions.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Whether to auto-approve self-initiated incoming transfers for this user (i.e. to == initiatedBy).","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Whether to auto-approve self-initiated outgoing transfers for this user (i.e. from == initiatedBy).","type":"boolean"},"balances":{"description":"The list of balances associated with this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}},"incomingApprovals":{"description":"The list of approved incoming transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserIncomingApproval"}},"outgoingApprovals":{"description":"The list of approved outgoing transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserOutgoingApproval"}},"userPermissions":{"description":"The permissions for this user's actions and transfers.","$ref":"#/definitions/tokenization.v27.UserPermissions"}}},"tokenization.v27.UserIncomingApproval":{"description":"UserIncomingApproval defines the rules for the approval of an incoming transfer to a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v27.IncomingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v27.UserIncomingApprovalPermission":{"description":"UserIncomingApprovalPermission defines the permissions for updating the user's approved incoming transfers.\n\nSee CollectionApprovalPermission for more details. This is equivalent without the toListId field because that is always the user.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.UserOutgoingApproval":{"description":"UserOutgoingApproval defines the rules for the approval of an outgoing transfer from a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v27.OutgoingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v27.UserOutgoingApprovalPermission":{"description":"UserOutgoingApprovalPermission defines the permissions for updating the user's approved outgoing transfers.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.UserPermissions":{"description":"UserPermissions defines the permissions for the user about their approvals (i.e., what the user can and cannot do).\n\nSee CollectionPermissions for more details on the different types of permissions.\n\ncanUpdateOutgoingApprovals and canUpdateOutgoingApprovals follow the same as the canUpdateCollectionApprovals in CollectionPermissions,\nbut certain fields are removed because they are not relevant to the user.","type":"object","properties":{"canUpdateAutoApproveAllIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for all incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated outgoing transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateIncomingApprovals":{"description":"Permissions related to updating the user's approved incoming transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserIncomingApprovalPermission"}},"canUpdateOutgoingApprovals":{"description":"Permissions related to updating the user's approved outgoing transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserOutgoingApprovalPermission"}}}},"tokenization.v27.UserRoyalties":{"description":"UserRoyalties defines the royalties for a user.","type":"object","properties":{"payoutAddress":{"description":"Payout address for the royalties.","type":"string"},"percentage":{"description":"Percentage of the transfer amount to apply as royalties. 1 to 10000 represents basis points.","type":"string"}}},"tokenization.v27.Voter":{"description":"Voter defines a voter with their address and weight.","type":"object","properties":{"address":{"description":"The address of the voter.","type":"string"},"weight":{"description":"The weight of this voter's vote.","type":"string"}}},"tokenization.v27.VotingChallenge":{"description":"VotingChallenge defines a rule for approval in the form of a voting/multi-sig challenge.\nRequires a weighted quorum threshold to be met through votes from specified voters.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Votes are stored separately and can be updated. The threshold is calculated as a percentage\nof total possible weight (all voters), not just voted weight. If you update the proposal ID, then the\nvote tracker will reset and start a new tally. We recommend using a unique proposal ID for each challenge\nto prevent overlap and unexpected behavior.","type":"object","properties":{"customData":{"description":"Arbitrary custom data associated with this voting challenge.","type":"string"},"proposalId":{"type":"string","title":"The ID of this voting challenge for tracking votes (scoped like challengeTrackerId).\nFormat: collectionId-approverAddress-approvalLevel-approvalId-challengeId"},"quorumThreshold":{"description":"The quorum threshold as a percentage (0-100) of total possible weight that must vote \"yes\".\nExample: 50 means 50% of total voter weight must vote yes for approval.","type":"string"},"uri":{"description":"The URI associated with this voting challenge.","type":"string"},"voters":{"description":"List of voters with their weights. Each voter can cast a weighted vote.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Voter"}}}},"tokenization.v28.ActionPermission":{"description":"ActionPermission defines the permissions for performing an action.\n\nThis is simple and straightforward as the only thing we need to check is the permitted/forbidden times.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.AddressChecks":{"type":"object","title":"AddressChecks defines checks for address types (EVM contract, liquidity pool, etc.)","properties":{"mustBeEvmContract":{"description":"Require the address to be an EVM contract (has code).","type":"boolean"},"mustBeLiquidityPool":{"description":"Require the address to be a liquidity pool.","type":"boolean"},"mustNotBeEvmContract":{"description":"Require the address to not be an EVM contract (no code).","type":"boolean"},"mustNotBeLiquidityPool":{"description":"Require the address to not be a liquidity pool.","type":"boolean"}}},"tokenization.v28.AddressListInput":{"description":"AddressListInput is used for creating address lists via MsgCreateAddressLists.\nIt contains all fields from AddressList except createdBy, which is automatically set from the message creator.","type":"object","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.v28.AliasPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v28.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.v28.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v28.AltTimeChecks":{"type":"object","title":"AltTimeChecks defines alternative time-based checks for approval denial.\nIf the transfer time falls within any of the specified offline hours or days, the approval is denied.\nUses UTC timezone for neutral timezone approach.\nofflineHours: ranges of hours (0-23) when transfers should be denied\nofflineDays: ranges of days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied","properties":{"offlineDays":{"description":"Days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied. Uses UTC timezone.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"offlineHours":{"description":"Hours (0-23) when transfers should be denied. Uses UTC timezone.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.ApprovalAmounts":{"description":"ApprovalAmounts defines approval amounts per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the amounts transferred for the specified token IDs and ownership times \nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallApprovalAmount":{"description":"Overall approval amount.","type":"string"},"perFromAddressApprovalAmount":{"description":"Approval amount per \"from\" address.","type":"string"},"perInitiatedByAddressApprovalAmount":{"description":"Approval amount per \"initiated by\" address.","type":"string"},"perToAddressApprovalAmount":{"description":"Approval amount per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v28.ResetTimeIntervals"}}},"tokenization.v28.ApprovalCriteria":{"description":"ApprovalCriteria defines the criteria for approving transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"allowBackedMinting":{"description":"If true, this collection approval allows backed minting operations (CosmosCoinBackedPath).\nWhen false, this approval cannot be used for transfers involving backed minting addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"allowSpecialWrapping":{"description":"If true, this collection approval allows special wrapping operations (CosmosCoinWrapperPath).\nWhen false, this approval cannot be used for transfers involving wrapping addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v28.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v28.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v28.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v28.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"overridesFromOutgoingApprovals":{"description":"Overrides the user's outgoing approvals for approval. If true, this collection-level approval\ntakes precedence over any outgoing approvals defined by the sender, allowing the collection to\ncontrol outgoing transfer behavior.","type":"boolean"},"overridesToIncomingApprovals":{"description":"Overrides the user's incoming approvals for approval. If true, this collection-level approval\ntakes precedence over any incoming approvals defined by the recipient, allowing the collection to\ncontrol incoming transfer behavior.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v28.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"userRoyalties":{"description":"User level royalties to apply to the transfer. Defines the percentage and payout address for\nroyalties that should be collected when this approval is used for a transfer.","$ref":"#/definitions/tokenization.v28.UserRoyalties"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.VotingChallenge"}}}},"tokenization.v28.ApprovalIdentifierDetails":{"description":"ApprovalIdentifierDetails defines the details to identify a specific approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v28.AutoDeletionOptions":{"description":"AutoDeletionOptions defines the options for auto-deletion of approvals.","type":"object","properties":{"afterOneUse":{"type":"boolean","title":"After one use?"},"afterOverallMaxNumTransfers":{"type":"boolean","title":"After overall max number of uses threshold is met?"},"allowCounterpartyPurge":{"type":"boolean","title":"Allow counterparty to purge this approval if they are the only initiator"},"allowPurgeIfExpired":{"type":"boolean","title":"Allow others to call PurgeApprovals on behalf of this approval owner"}}},"tokenization.v28.Balance":{"description":"Balance represents the balance of a token for a specific user.\nThe user amounts xAmount of a token specified for the time ranges specified.\n\nExample: User A owns x10 of token IDs 1-10 from 1/1/2020 to 1/1/2021.\n\nIf times or tokenIDs have len \u003e 1, then the user owns all token IDs specified for all time ranges specified.","type":"object","properties":{"amount":{"description":"The amount of the token owned by the user.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"The token IDs for which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.CoinTransfer":{"type":"object","properties":{"coins":{"description":"The sdk.Coins to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"overrideFromWithApproverAddress":{"description":"By default, the from address is the initiator of the transaction.\nIf this is set to true, we will override the from address with the approver address.\nNote: This is not applicable for collection approvals (since approverAddress == '').","type":"boolean"},"overrideToWithInitiator":{"description":"By default, the to address is what is specified in the coin transfer.\nIf this is set to true, we will override the to address with the initiator of the transaction.","type":"boolean"},"to":{"description":"The address of the recipient of the transfer.","type":"string"}}},"tokenization.v28.CollectionApproval":{"type":"object","title":"CollectionApproval defines the rules for the approval of a transfer on the collection level","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v28.ApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v28.CollectionApprovalPermission":{"description":"CollectionApprovalPermission defines what collection approved transfers can be updated vs. are locked.\n\nEach transfer is broken down to a (from, to, initiatedBy, transferTime, tokenId) tuple.\nFor a transfer to match, we need to match ALL of the fields in the combination. \nThese are determined by the fromListId, toListId, initiatedByListId, transferTimes, tokenIds fields.\nAddressLists are used for (from, to, initiatedBy) which are a permanent list of addresses identified by an ID (see AddressLists). \n\npermanentlyPermitted/ForbiddenTimes: when can the manager execute this permission?\n\nEx: Let's say we are updating the transferability for the transfer tuple (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", 10, 1000).\nWe would check to find the FIRST CollectionApprovalPermission that matches this combination.\nIf we find a match, we would check the permitted/forbidden times to see if we can execute this permission (default is ALLOWED).\n\nEx: So if you wanted to freeze the transferability to enforce that token ID 1 will always be transferable, you could set\nthe combination (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", \"All Transfer Times\", 1) to always be forbidden.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.CollectionMetadata":{"description":"This message defines the metadata for the collection.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the collection metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the collection metadata.","type":"string"}}},"tokenization.v28.CollectionPermissions":{"description":"CollectionPermissions defines the permissions for the collection (i.e., what the manager can and cannot do).\n\nThere are three types of permissions for a collection: ActionPermission, TokenIdsActionPermission, and CollectionApprovalPermission.\n\nThe permission type allows fine-grained access control for each action.\n- ActionPermission: defines when the manager can perform an action or update a field.\n- TokenIdsActionPermission: defines when the manager can perform an action for specific tokens\n- CollectionApprovalPermission: defines when the manager can update the transferability of the collection and what transfers can be updated vs. locked.\n\nNote there are a few different times here which could get confusing:\n- permanentlyPermitted/ForbiddenTimes - the times that a permission can be performed\n- transferTimes - the times that a transfer occurs\n- ownershipTimes - the times when a token is owned by a user\n\nThe permitted/permanentlyForbiddenTimes are used to determine when a permission can be executed.\nOnce a time is set to be permitted or forbidden, it is PERMANENT and cannot be changed.\nIf a time is not set to be permitted or forbidden, it is considered NEUTRAL and can be updated but is ALLOWED by default.\n\nIMPORTANT: We take first-match only for the permissions. This means that if you forbid time T in array index 0 and permit time T in index 1, \nwe will only check the first permission (forbid time T) and not the second permission (permit time T).","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApprovalPermission"}},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenIdsActionPermission"}},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenIdsActionPermission"}}}},"tokenization.v28.Conversion":{"description":"Conversion defines a bidirectional conversion between a cosmos coin (with denom) and token balances.","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin side of the conversion (amount + denom).","$ref":"#/definitions/tokenization.v28.ConversionSideAWithDenom"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}}}},"tokenization.v28.ConversionSideA":{"description":"ConversionSideA represents the cosmos coin amount side of a conversion without denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"}}},"tokenization.v28.ConversionSideAWithDenom":{"description":"ConversionSideAWithDenom represents the cosmos coin side of a conversion with denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"},"denom":{"description":"The denomination of the cosmos coin.","type":"string"}}},"tokenization.v28.ConversionWithoutDenom":{"description":"ConversionWithoutDenom defines a bidirectional conversion between a cosmos coin amount (without denom) and token balances.\nThe denom is stored at the base level (e.g., in AliasPath or CosmosCoinWrapperPath).","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin amount side of the conversion (amount only, denom stored separately).","$ref":"#/definitions/tokenization.v28.ConversionSideA"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}}}},"tokenization.v28.CosmosCoinBackedPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v28.Conversion"}}},"tokenization.v28.CosmosCoinWrapperPathAddObject":{"type":"object","properties":{"allowOverrideWithAnyValidToken":{"type":"boolean"},"conversion":{"$ref":"#/definitions/tokenization.v28.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.v28.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v28.DenomUnit":{"type":"object","properties":{"decimals":{"description":"The number of decimal places for this unit. Defines the precision of the unit.","type":"string"},"isDefaultDisplay":{"description":"If true, this is the default display unit. Only one unit should be marked as the default display unit.\nThis unit will be used by default when displaying the coin amount. If none are marked default, we use the base level.","type":"boolean"},"metadata":{"description":"The metadata for this denomination unit.","$ref":"#/definitions/tokenization.v28.PathMetadata"},"symbol":{"description":"The symbol for this unit (e.g., \"BADGE\", \"nBADGE\"). Used for display purposes.","type":"string"}}},"tokenization.v28.DynamicStoreChallenge":{"description":"DynamicStoreChallenge defines a challenge that requires the initiator to pass a dynamic store check.","type":"object","properties":{"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"storeId":{"description":"The ID of the dynamic store to check.","type":"string"}}},"tokenization.v28.ETHSignatureChallenge":{"description":"ETHSignatureChallenge defines a rule for the approval in the form of an Ethereum signature challenge.\n\nAn ETH signature challenge is a challenge where the user must provide a valid Ethereum signature for a specific nonce.\nThe signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId) and each signature can only be used once.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: We track the usage of each signature to prevent replay attacks. Each signature can only be used once.\nIf you update the challenge ID, then the used signatures tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this ETH signature challenge for tracking the number of uses per signature.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this ETH signature challenge.","type":"string"},"signer":{"description":"The Ethereum address that must sign the nonce for verification.","type":"string"},"uri":{"description":"The URI associated with this ETH signature challenge, optionally providing metadata about the challenge.","type":"string"}}},"tokenization.v28.ETHSignatureProof":{"description":"ETHSignatureProof represents an Ethereum signature proof for a challenge.","type":"object","properties":{"nonce":{"description":"The nonce that was signed. The signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId).","type":"string"},"signature":{"description":"The Ethereum signature of the nonce.","type":"string"}}},"tokenization.v28.EVMQueryChallenge":{"description":"EVMQueryChallenge defines a rule for approval via read-only EVM contract query.\n\nThe challenge executes a staticcall to the specified contract with the given calldata.\nThe result is compared against the expected result (if provided) or checked for non-zero return.\n\nIMPORTANT: This is read-only and cannot modify state. The query is executed with a gas limit\nto prevent DoS attacks. All results are deterministic since EVM state is consistent within a block.","type":"object","properties":{"calldata":{"type":"string","title":"ABI-encoded function selector + arguments (hex string without 0x prefix)\nExample: \"70a08231000000000000000000000000{address}\" for balanceOf(address)\nCan use placeholders: $initiator, $sender, $recipient (replaced at runtime)"},"comparisonOperator":{"description":"Comparison operator: \"eq\" (equals), \"ne\" (not equals), \"gt\" (greater than), \"gte\", \"lt\", \"lte\"\nOnly \"eq\" and \"ne\" work for non-numeric types. Default is \"eq\".","type":"string"},"contractAddress":{"type":"string","title":"The EVM contract address to query (0x format or bb1 format)"},"customData":{"type":"string","title":"Arbitrary custom data"},"expectedResult":{"description":"Expected return value (hex string without 0x prefix). If empty, any non-error result passes.\nFor boolean checks, use \"0000...0001\" for true.","type":"string"},"gasLimit":{"type":"string","title":"Gas limit for the query (default 100000, max 500000)"},"uri":{"type":"string","title":"The URI associated with this challenge (metadata)"}}},"tokenization.v28.IncomingApprovalCriteria":{"description":"IncomingApprovalCriteria defines the criteria for approving incoming transfers.\nThis is used for user-level incoming approvals and only includes fields relevant to incoming transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v28.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v28.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v28.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v28.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v28.PredeterminedBalances"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No recipient checks are included for incoming approvals since the recipient is the user themselves.","$ref":"#/definitions/tokenization.v28.AddressChecks"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.VotingChallenge"}}}},"tokenization.v28.IncrementedBalances":{"description":"IncrementedBalances represents balances that are incremented by specific amounts, according to the order calculation method.","type":"object","properties":{"allowAmountScaling":{"description":"When true, the actual transfer can be any evenly divisible integer multiple (\u003e=1x) of startBalances.\napprovalCriteria.coinTransfers are scaled by the same multiplier.\nAll other IncrementedBalances fields must be zero/false/nil when this is true.","type":"boolean"},"allowOverrideTimestamp":{"description":"Whether to allow overriding the timestamp for the balances (only applicable with durationFromTimestamp set).","type":"boolean"},"allowOverrideWithAnyValidToken":{"type":"boolean","title":"Allow override of any valid ID"},"durationFromTimestamp":{"description":"The amount of unix milliseconds to approve starting from now. Incompatible with incrementOwnershipTimesBy.","type":"string"},"incrementOwnershipTimesBy":{"description":"The amount by which to increment ownership times. Incompatible with approveStartingFromNowBy.","type":"string"},"incrementTokenIdsBy":{"description":"The amount by which to increment token IDs.","type":"string"},"maxScalingMultiplier":{"description":"Maximum allowed scaling multiplier. Must be \u003e 0 when allowAmountScaling is true.\nThe chain rejects transfers where the computed multiplier exceeds this cap.\nIgnored (set to \"0\") when allowAmountScaling is false.","type":"string"},"recurringOwnershipTimes":{"description":"Recurring ownership times.","$ref":"#/definitions/tokenization.v28.RecurringOwnershipTimes"},"startBalances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}}}},"tokenization.v28.InvariantsAddObject":{"description":"InvariantsAddObject is used for adding invariants without specifying addresses.\nAddresses are generated by the keeper and stored in the collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.\nAddress will be generated by the keeper.","$ref":"#/definitions/tokenization.v28.CosmosCoinBackedPathAddObject"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.v28.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.v28.ManualBalances":{"description":"ManualBalances represents a list of manual balances entered for the predetermined balances criteria. Order is calculated according to the calculation method set.","type":"object","properties":{"balances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}}}},"tokenization.v28.MaxNumTransfers":{"description":"MaxNumTransfers defines the maximum number of transfers per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the number of transfers for the specified token IDs and ownership times\nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallMaxNumTransfers":{"description":"Overall maximum number of transfers.","type":"string"},"perFromAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"from\" address.","type":"string"},"perInitiatedByAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"initiated by\" address.","type":"string"},"perToAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v28.ResetTimeIntervals"}}},"tokenization.v28.MerkleChallenge":{"description":"Challenges define a rule for the approval in the form of a Merkle challenge.\n\nA Merkle challenge is a challenge where the user must provide a Merkle proof to a Merkle tree. If they provide a valid proof,\nthen the challenge is met. All challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Merkle challenges currently are limited to SHA256 hashes. See documentation for MerkleChallenge for more details and tutorials.\n\nIMPORTANT: We track the number of uses per leaf according to the challengeTrackerId specified by the parent approval of this challenge.\nIf you update the challenge ID, then the used leaves tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this Merkle challenge for tracking the number of uses per leaf.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this Merkle challenge.","type":"string"},"expectedProofLength":{"description":"The expected length of the Merkle path for verification. Used to prevent Merkle path truncation attacks.","type":"string"},"leafSigner":{"description":"Ethereum address that must sign the leaf. Used to protect against man-in-the-middle attacks.\nSignature scheme: sign(leaf + \"-\" + creatorAddress), verified using elliptic curve signature verification.","type":"string"},"maxUsesPerLeaf":{"description":"The maximum number of times each leaf can be used. Must be 1 if useCreatorAddressAsLeaf is false to prevent replay attacks.","type":"string"},"root":{"description":"The root hash of the Merkle tree to which the Merkle path must lead for verification.","type":"string"},"uri":{"description":"The URI associated with this Merkle challenge, optionally providing metadata about the challenge.","type":"string"},"useCreatorAddressAsLeaf":{"description":"If true, we will override the user's leaf for their proof with their creator address. Used for whitelist trees where all leaves are valid BitBadges addresses.","type":"boolean"}}},"tokenization.v28.MerklePathItem":{"description":"MerklePathItem represents an item in a Merkle path.","type":"object","properties":{"aunt":{"description":"The hash of the sibling node (aunt) in the Merkle path.","type":"string"},"onRight":{"description":"Indicates whether the aunt node is on the right side of the path.","type":"boolean"}}},"tokenization.v28.MerkleProof":{"description":"MerkleProof represents a Merkle proof, consistent with Tendermint/Crypto Merkle tree.","type":"object","properties":{"aunts":{"description":"List of Merkle path items (aunts) that make up the proof.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerklePathItem"}},"leaf":{"description":"The hash of the leaf node for which the proof is generated.","type":"string"},"leafSignature":{"description":"The signature of the leaf node tying the address to the leaf node.","type":"string"}}},"tokenization.v28.MsgCastVote":{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","type":"object","properties":{"approvalId":{"description":"The approval ID.","type":"string"},"approvalLevel":{"description":"The approval level (\"collection\", \"incoming\", or \"outgoing\").","type":"string"},"approverAddress":{"description":"The approver address (empty string for collection-level approvals).","type":"string"},"collectionId":{"description":"The collection ID for the voting challenge.","type":"string"},"creator":{"description":"The address of the voter casting the vote.","type":"string"},"proposalId":{"description":"The proposal ID (challenge ID) from the VotingChallenge.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.v28.MsgCastVoteResponse":{"type":"object"},"tokenization.v28.MsgCreateAddressLists":{"description":"MsgCreateAddressLists is used to create address lists.","type":"object","properties":{"addressLists":{"description":"Address lists to create. The createdBy field will be automatically set to the creator address.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.AddressListInput"}},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgCreateAddressListsResponse":{"description":"MsgCreateAddressListsResponse is the response to MsgCreateAddressLists.","type":"object"},"tokenization.v28.MsgCreateCollection":{"description":"MsgCreateCollection is used to create a new collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.AliasPathAddObject"}},"collectionApprovals":{"description":"Collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApproval"}},"collectionMetadata":{"description":"Collection metadata.","$ref":"#/definitions/tokenization.v28.CollectionMetadata"},"collectionPermissions":{"description":"Collection permissions.","$ref":"#/definitions/tokenization.v28.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v28.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v28.InvariantsAddObject"},"isArchived":{"description":"isArchived flag.","type":"boolean"},"manager":{"description":"Manager address.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"Standards entries.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"Token metadata entries.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenMetadata"}},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.MsgCreateCollectionResponse":{"description":"MsgCreateCollectionResponse is the response to MsgCreateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgCreateDynamicStore":{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v28.MsgCreateDynamicStoreResponse":{"description":"MsgCreateDynamicStoreResponse is the response to MsgCreateDynamicStore.","type":"object","properties":{"storeId":{"description":"ID of the dynamic store.","type":"string"}}},"tokenization.v28.MsgDeleteCollection":{"description":"MsgDeleteCollection is used to delete a collection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgDeleteCollectionResponse":{"description":"MsgDeleteCollectionResponse is the response to MsgDeleteCollection.","type":"object"},"tokenization.v28.MsgDeleteDynamicStore":{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store to delete.","type":"string"}}},"tokenization.v28.MsgDeleteDynamicStoreResponse":{"description":"MsgDeleteDynamicStoreResponse is the response to MsgDeleteDynamicStore.","type":"object"},"tokenization.v28.MsgDeleteIncomingApproval":{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgDeleteIncomingApprovalResponse":{"description":"MsgDeleteIncomingApprovalResponse is the response to MsgDeleteIncomingApproval.","type":"object"},"tokenization.v28.MsgDeleteOutgoingApproval":{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgDeleteOutgoingApprovalResponse":{"description":"MsgDeleteOutgoingApprovalResponse is the response to MsgDeleteOutgoingApproval.","type":"object"},"tokenization.v28.MsgPurgeApprovals":{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","type":"object","properties":{"approvalsToPurge":{"description":"Specific approvals to purge. If empty, purges all applicable approvals based on other flags.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ApprovalIdentifierDetails"}},"approverAddress":{"description":"Address of the user whose approvals to purge. If empty, defaults to creator.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"purgeCounterpartyApprovals":{"description":"Whether to purge counterparty approvals (approvals where the creator is the only initiator).","type":"boolean"},"purgeExpired":{"description":"Whether to purge expired approvals (approvals with no future valid transfer times).","type":"boolean"}}},"tokenization.v28.MsgPurgeApprovalsResponse":{"description":"MsgPurgeApprovalsResponse is the response to MsgPurgeApprovals.","type":"object","properties":{"numPurged":{"description":"Number of approvals purged.","type":"string"}}},"tokenization.v28.MsgSetCollectionApprovals":{"type":"object","title":"MsgSetCollectionApprovals sets the collection approvals and canUpdateCollectionApprovals permission","properties":{"canUpdateCollectionApprovals":{"type":"array","title":"Permission to update collection approvals","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApprovalPermission"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApproval"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgSetCollectionApprovalsResponse":{"description":"MsgSetCollectionApprovalsResponse is the response to MsgSetCollectionApprovals.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetCollectionMetadata":{"type":"object","title":"MsgSetCollectionMetadata sets the collection metadata and canUpdateCollectionMetadata permission","properties":{"canUpdateCollectionMetadata":{"type":"array","title":"Permission to update collection metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v28.CollectionMetadata"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgSetCollectionMetadataResponse":{"description":"MsgSetCollectionMetadataResponse is the response to MsgSetCollectionMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetCustomData":{"type":"object","title":"MsgSetCustomData sets the custom data and canUpdateCustomData permission","properties":{"canUpdateCustomData":{"type":"array","title":"Permission to update custom data","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"}}},"tokenization.v28.MsgSetCustomDataResponse":{"description":"MsgSetCustomDataResponse is the response to MsgSetCustomData.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetDynamicStoreValue":{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","type":"object","properties":{"address":{"description":"The address for which to set the value.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store.","type":"string"},"value":{"description":"The boolean value to set (true/false).","type":"boolean"}}},"tokenization.v28.MsgSetDynamicStoreValueResponse":{"description":"MsgSetDynamicStoreValueResponse is the response to MsgSetDynamicStoreValue.","type":"object"},"tokenization.v28.MsgSetIncomingApproval":{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","type":"object","properties":{"approval":{"description":"The incoming approval to set.","$ref":"#/definitions/tokenization.v28.UserIncomingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgSetIncomingApprovalResponse":{"description":"MsgSetIncomingApprovalResponse is the response to MsgSetIncomingApproval.","type":"object"},"tokenization.v28.MsgSetIsArchived":{"type":"object","title":"MsgSetIsArchived sets the isArchived and canArchiveCollection permission","properties":{"canArchiveCollection":{"type":"array","title":"Permission to archive collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"isArchived":{"description":"New isArchived to set.","type":"boolean"}}},"tokenization.v28.MsgSetIsArchivedResponse":{"description":"MsgSetIsArchivedResponse is the response to MsgSetIsArchived.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetManager":{"type":"object","title":"MsgSetManager sets the manager and canUpdateManager permission","properties":{"canUpdateManager":{"type":"array","title":"Permission to update manager","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"manager":{"description":"New manager to set.","type":"string"}}},"tokenization.v28.MsgSetManagerResponse":{"description":"MsgSetManagerResponse is the response to MsgSetManager.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetOutgoingApproval":{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","type":"object","properties":{"approval":{"description":"The outgoing approval to set.","$ref":"#/definitions/tokenization.v28.UserOutgoingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgSetOutgoingApprovalResponse":{"description":"MsgSetOutgoingApprovalResponse is the response to MsgSetOutgoingApproval.","type":"object"},"tokenization.v28.MsgSetReservedProtocolAddress":{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","type":"object","properties":{"address":{"description":"Address to set or unset as reserved protocol address.","type":"string"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"isReservedProtocol":{"description":"Whether the address should be a reserved protocol address (true) or not (false).","type":"boolean"}}},"tokenization.v28.MsgSetReservedProtocolAddressResponse":{"description":"MsgSetReservedProtocolAddressResponse is the response to MsgSetReservedProtocolAddress.","type":"object"},"tokenization.v28.MsgSetStandards":{"type":"object","title":"MsgSetStandards sets the standards and canUpdateStandards permission","properties":{"canUpdateStandards":{"type":"array","title":"Permission to update standards","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}}}},"tokenization.v28.MsgSetStandardsResponse":{"description":"MsgSetStandardsResponse is the response to MsgSetStandards.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetTokenMetadata":{"type":"object","title":"MsgSetTokenMetadata sets the token metadata and canUpdateTokenMetadata permission","properties":{"canUpdateTokenMetadata":{"type":"array","title":"Permission to update token metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenMetadata"}}}},"tokenization.v28.MsgSetTokenMetadataResponse":{"description":"MsgSetTokenMetadataResponse is the response to MsgSetTokenMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetValidTokenIds":{"type":"object","title":"MsgSetValidTokenIds sets the validTokenIds and canUpdateValidTokenIds permission","properties":{"canUpdateValidTokenIds":{"type":"array","title":"Permission to update valid token IDs","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.MsgSetValidTokenIdsResponse":{"description":"MsgSetValidTokenIdsResponse is the response to MsgSetValidTokenIds.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgTransferTokens":{"description":"MsgTransferTokens is used to transfer tokens.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"transfers":{"description":"Transfers to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Transfer"}}}},"tokenization.v28.MsgTransferTokensResponse":{"description":"MsgTransferTokensResponse is the response to MsgTransferTokens.","type":"object"},"tokenization.v28.MsgUniversalUpdateCollection":{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v28.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v28.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v28.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v28.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.MsgUniversalUpdateCollectionResponse":{"description":"MsgUniversalUpdateCollectionResponse is the response to MsgUniversalUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgUpdateCollection":{"description":"MsgUpdateCollection is used to update a collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v28.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v28.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v28.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.MsgUpdateCollectionResponse":{"description":"MsgUpdateCollectionResponse is the response to MsgUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgUpdateDynamicStore":{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The new default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"The global kill switch state (true = enabled, false = disabled/halted).\nCallers should query the current value first if they want to keep it unchanged.","type":"boolean"},"storeId":{"description":"ID of the dynamic store to update.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v28.MsgUpdateDynamicStoreResponse":{"description":"MsgUpdateDynamicStoreResponse is the response to MsgUpdateDynamicStore.","type":"object"},"tokenization.v28.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tokenization.v28.Params"}}},"tokenization.v28.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"tokenization.v28.MsgUpdateUserApprovals":{"description":"MsgUpdateUserApprovals is used to update user approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Auto-approve setting for all incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Auto-approve setting for self-initiated incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Auto-approve setting for self-initiated outgoing transfers.","type":"boolean"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"incomingApprovals":{"description":"New incoming approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserIncomingApproval"}},"outgoingApprovals":{"description":"New outgoing approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserOutgoingApproval"}},"updateAutoApproveAllIncomingTransfers":{"description":"Indicates if auto-approve settings for all incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Indicates if auto-approve settings for self-initiated incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Indicates if auto-approve settings for self-initiated outgoing transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIncomingApprovals":{"description":"Indicates if incoming approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateOutgoingApprovals":{"description":"Indicates if outgoing approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateUserPermissions":{"description":"Indicates if user permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"userPermissions":{"description":"New user permissions to set.","$ref":"#/definitions/tokenization.v28.UserPermissions"}}},"tokenization.v28.MsgUpdateUserApprovalsResponse":{"description":"MsgUpdateUserApprovalsResponse is the response to MsgUpdateUserApprovals.","type":"object"},"tokenization.v28.MustOwnTokens":{"description":"MustOwnTokens represents a condition where a user must own specific tokens\nto be approved to transfer.\n\n- collectionId: The ID of the collection for the tokens that must be owned\n- amountRange: The range of amounts the user must own (min to max)\n- ownershipTimes: The time ranges during which the user must own the tokens.\n- tokenIds: The token IDs the user must own.\n- overrideWithCurrentTime: If true, auto override ownershipTimes with the current time.\n- mustSatisfyForAllAssets: If true, the user must own all specified tokens; otherwise, owning any one for \u003e= 1 millisecond is sufficient.","type":"object","properties":{"amountRange":{"description":"The range of amounts the user must own (min to max).","$ref":"#/definitions/tokenization.v28.UintRange"},"collectionId":{"description":"The ID of the collection.","type":"string"},"mustSatisfyForAllAssets":{"description":"If true, the user must meet ownership requirements for all specified tokens; else, must meet requirements for any single token.","type":"boolean"},"overrideWithCurrentTime":{"description":"If true, override ownershipTimes with the current time.","type":"boolean"},"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user must own the tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"The token IDs the user must own.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.OutgoingApprovalCriteria":{"description":"OutgoingApprovalCriteria defines the criteria for approving outgoing transfers.\nThis is used for user-level outgoing approvals and only includes fields relevant to outgoing transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v28.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v28.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v28.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v28.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v28.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No sender checks are included for outgoing approvals since the sender is the user themselves.","$ref":"#/definitions/tokenization.v28.AddressChecks"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.VotingChallenge"}}}},"tokenization.v28.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"affiliate_percentage":{"type":"string","title":"affiliate_percentage defines the percentage of the transfer amount that goes to the affiliate"},"allowed_denoms":{"type":"array","title":"allowed_denoms defines the list of denoms that are allowed to be used in coin_transfers","items":{"type":"string"}}}},"tokenization.v28.PathMetadata":{"description":"This message defines the metadata for paths (alias paths and cosmos coin wrapper paths).\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the path metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the path metadata.","type":"string"}}},"tokenization.v28.PrecalculateBalancesFromApprovalDetails":{"description":"PrecalculateBalancesFromApprovalDetails defines the details for precalculating balances from an approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"precalculationOptions":{"description":"The options for precalculating the balances.","$ref":"#/definitions/tokenization.v28.PrecalculationOptions"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v28.PrecalculationOptions":{"description":"PrecalculationOptions defines the options for precalculating the balances.","type":"object","properties":{"overrideTimestamp":{"description":"The timestamp to override with when calculating the balances.","type":"string"},"scalingMultiplier":{"description":"When \u003e 0 and allowAmountScaling is true on the approval, all precalculated balance amounts\nare multiplied by this value. Must be \u003c= maxScalingMultiplier. 0 means no scaling (returns 1x base).","type":"string"},"tokenIdsOverride":{"description":"The IDs to override for the transfer. Only applicable if using this option in precalculation.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.PredeterminedBalances":{"description":"PredeterminedBalances represents balances with predetermined order calculation.","type":"object","properties":{"incrementedBalances":{"description":"Balances that have a starting amount and increment. If this is nil, then we use the manual balances.","$ref":"#/definitions/tokenization.v28.IncrementedBalances"},"manualBalances":{"description":"Manual balances that can be entered. If this is nil, then we use the incremented balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ManualBalances"}},"orderCalculationMethod":{"description":"The method to calculate the order of predetermined balances.","$ref":"#/definitions/tokenization.v28.PredeterminedOrderCalculationMethod"}}},"tokenization.v28.PredeterminedOrderCalculationMethod":{"description":"PredeterminedOrderCalculationMethod defines the method to calculate predetermined balances order.","type":"object","properties":{"challengeTrackerId":{"description":"If useMerkleChallengeLeafIndex is set, then this is the ID of the challenge tracker associated with this calculation method.","type":"string"},"useMerkleChallengeLeafIndex":{"description":"Use the Merkle challenge leaf index to calculate the order. Ex: Transfer that uses leaf index 0 gets the first balance, transfer that uses leaf index 1 gets the second balance, etc.","type":"boolean"},"useOverallNumTransfers":{"description":"Use the overall number of transfers to calculate the order. Ex: First transfer gets the first balance, second transfer gets the second balance, etc.","type":"boolean"},"usePerFromAddressNumTransfers":{"description":"Use the number of transfers per \"from\" address to calculate the order. Ex: First transfer from address A gets the first balance, second transfer from address A gets the second balance, etc.","type":"boolean"},"usePerInitiatedByAddressNumTransfers":{"description":"Use the number of transfers per \"initiated by\" address to calculate the order. Ex: First transfer initiated by address A gets the first balance, second transfer initiated by address A gets the second balance, etc.","type":"boolean"},"usePerToAddressNumTransfers":{"description":"Use the number of transfers per \"to\" address to calculate the order. Ex: First transfer to address A gets the first balance, second transfer to address A gets the second balance, etc.","type":"boolean"}}},"tokenization.v28.RecurringOwnershipTimes":{"description":"RecurringOwnershipTimes represents a list of recurring ownership times.","type":"object","properties":{"chargePeriodLength":{"type":"string","title":"Grace period length where you can charge the next interval (nextStartTime - chargePeriodLength) until (nextStartTime) = charge period"},"intervalLength":{"description":"The interval length in unix milliseconds.","type":"string"},"startTime":{"description":"The original start time of the first interval.","type":"string"}}},"tokenization.v28.ResetTimeIntervals":{"description":"Time intervals to reset the trackers at.","type":"object","properties":{"intervalLength":{"description":"Interval length in unix milliseconds.","type":"string"},"startTime":{"description":"Original start time of the first interval.","type":"string"}}},"tokenization.v28.TokenIdsActionPermission":{"description":"TokenIdsActionPermission defines the permissions for performing an action for specific tokens.\nCurrently, this is only used for creating new tokens.\n\nEx: If you want to lock the ability to create new tokens for tokenIds [1,2] at ownershipTimes 1/1/2020 - 1/1/2021, \nyou could set the combination (tokenIds: [1,2], ownershipTimes: [1/1/2020 - 1/1/2021]) to always be forbidden.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.TokenMetadata":{"description":"This message defines the metadata for specific token IDs.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the token metadata.","type":"string"},"tokenIds":{"description":"The token IDs to which this metadata applies.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the token metadata.","type":"string"}}},"tokenization.v28.Transfer":{"description":"Transfer defines the details of a transfer of tokens.","type":"object","properties":{"balances":{"description":"The balances to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}},"ethSignatureProofs":{"description":"The ETH signature proofs / solutions for all ETH signature challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ETHSignatureProof"}},"from":{"description":"The address of the sender of the transfer.","type":"string"},"memo":{"description":"The memo for the transfer.","type":"string"},"merkleProofs":{"description":"The Merkle proofs / solutions for all Merkle challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerkleProof"}},"onlyCheckPrioritizedCollectionApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedIncomingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedOutgoingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"precalculateBalancesFromApproval":{"description":"If defined, we will use the predeterminedBalances from the specified approval to calculate the balances at execution time.\nWe will override the balances field with the precalculated balances. Only applicable for approvals with predeterminedBalances set.","$ref":"#/definitions/tokenization.v28.PrecalculateBalancesFromApprovalDetails"},"prioritizedApprovals":{"description":"The prioritized approvals for the transfer. By default, we scan linearly through the approvals and use the first match.\nThis field can be used to prioritize specific approvals and scan through them first.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ApprovalIdentifierDetails"}},"toAddresses":{"description":"The addresses of the recipients of the transfer.","type":"array","items":{"type":"string"}}}},"tokenization.v28.UintRange":{"description":"The UintRange is a range of IDs from some start to some end (inclusive).\nuintRanges are one of the core types used.\n\nThey are used for everything from token IDs to time ranges to min/max balance amounts.\n\nSee the BitBadges documentation for more information.","type":"object","properties":{"end":{"description":"The ending value of the range (inclusive).","type":"string"},"start":{"description":"The starting value of the range (inclusive).","type":"string"}}},"tokenization.v28.UserBalanceStore":{"description":"UserBalanceStore is the store for the user balances for a collection.\n\nIt consists of a list of balances, a list of approved outgoing transfers, and a list of approved incoming transfers,\nas well as the permissions for updating the approved incoming/outgoing transfers.\n\nUpon initialization, all fields (minus the balances) are set to the defaults specified by the collection.\n\nThe outgoing transfers can be used to allow / disallow transfers which are sent from this user.\nIf a transfer has no match, then it is disallowed by default, unless from == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedOutgoingTransfers is set to true.\n\nThe incoming transfers can be used to allow / disallow transfers which are sent to this user.\nIf a transfer has no match, then it is disallowed by default, unless to == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedIncomingTransfers is set to true.\n\nNote that the user approved transfers are only checked if the collection approved transfers do not specify to override\nthe user approved transfers. \n\nThe permissions are used to determine whether the user can update the approved incoming/outgoing transfers and auto approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Whether to auto-approve all incoming transfers by default. \nThis is just shorthand for adding an accept everything incoming approval\nwith no restrictions.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Whether to auto-approve self-initiated incoming transfers for this user (i.e. to == initiatedBy).","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Whether to auto-approve self-initiated outgoing transfers for this user (i.e. from == initiatedBy).","type":"boolean"},"balances":{"description":"The list of balances associated with this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}},"incomingApprovals":{"description":"The list of approved incoming transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserIncomingApproval"}},"outgoingApprovals":{"description":"The list of approved outgoing transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserOutgoingApproval"}},"userPermissions":{"description":"The permissions for this user's actions and transfers.","$ref":"#/definitions/tokenization.v28.UserPermissions"}}},"tokenization.v28.UserIncomingApproval":{"description":"UserIncomingApproval defines the rules for the approval of an incoming transfer to a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v28.IncomingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v28.UserIncomingApprovalPermission":{"description":"UserIncomingApprovalPermission defines the permissions for updating the user's approved incoming transfers.\n\nSee CollectionApprovalPermission for more details. This is equivalent without the toListId field because that is always the user.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.UserOutgoingApproval":{"description":"UserOutgoingApproval defines the rules for the approval of an outgoing transfer from a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v28.OutgoingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v28.UserOutgoingApprovalPermission":{"description":"UserOutgoingApprovalPermission defines the permissions for updating the user's approved outgoing transfers.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.UserPermissions":{"description":"UserPermissions defines the permissions for the user about their approvals (i.e., what the user can and cannot do).\n\nSee CollectionPermissions for more details on the different types of permissions.\n\ncanUpdateOutgoingApprovals and canUpdateOutgoingApprovals follow the same as the canUpdateCollectionApprovals in CollectionPermissions,\nbut certain fields are removed because they are not relevant to the user.","type":"object","properties":{"canUpdateAutoApproveAllIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for all incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated outgoing transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateIncomingApprovals":{"description":"Permissions related to updating the user's approved incoming transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserIncomingApprovalPermission"}},"canUpdateOutgoingApprovals":{"description":"Permissions related to updating the user's approved outgoing transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserOutgoingApprovalPermission"}}}},"tokenization.v28.UserRoyalties":{"description":"UserRoyalties defines the royalties for a user.","type":"object","properties":{"payoutAddress":{"description":"Payout address for the royalties.","type":"string"},"percentage":{"description":"Percentage of the transfer amount to apply as royalties. 1 to 10000 represents basis points.","type":"string"}}},"tokenization.v28.Voter":{"description":"Voter defines a voter with their address and weight.","type":"object","properties":{"address":{"description":"The address of the voter.","type":"string"},"weight":{"description":"The weight of this voter's vote.","type":"string"}}},"tokenization.v28.VotingChallenge":{"description":"VotingChallenge defines a rule for approval in the form of a voting/multi-sig challenge.\nRequires a weighted quorum threshold to be met through votes from specified voters.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Votes are stored separately and can be updated. The threshold is calculated as a percentage\nof total possible weight (all voters), not just voted weight. If you update the proposal ID, then the\nvote tracker will reset and start a new tally. We recommend using a unique proposal ID for each challenge\nto prevent overlap and unexpected behavior.","type":"object","properties":{"customData":{"description":"Arbitrary custom data associated with this voting challenge.","type":"string"},"proposalId":{"type":"string","title":"The ID of this voting challenge for tracking votes (scoped like challengeTrackerId).\nFormat: collectionId-approverAddress-approvalLevel-approvalId-challengeId"},"quorumThreshold":{"description":"The quorum threshold as a percentage (0-100) of total possible weight that must vote \"yes\".\nExample: 50 means 50% of total voter weight must vote yes for approval.","type":"string"},"uri":{"description":"The URI associated with this voting challenge.","type":"string"},"voters":{"description":"List of voters with their weights. Each voter can cast a weighted vote.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Voter"}}}},"tokenization.v29.ActionPermission":{"description":"ActionPermission defines the permissions for performing an action.\n\nThis is simple and straightforward as the only thing we need to check is the permitted/forbidden times.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.AddressChecks":{"type":"object","title":"AddressChecks defines checks for address types (EVM contract, liquidity pool, etc.)","properties":{"mustBeEvmContract":{"description":"Require the address to be an EVM contract (has code).","type":"boolean"},"mustBeLiquidityPool":{"description":"Require the address to be a liquidity pool.","type":"boolean"},"mustNotBeEvmContract":{"description":"Require the address to not be an EVM contract (no code).","type":"boolean"},"mustNotBeLiquidityPool":{"description":"Require the address to not be a liquidity pool.","type":"boolean"}}},"tokenization.v29.AddressListInput":{"description":"AddressListInput is used for creating address lists via MsgCreateAddressLists.\nIt contains all fields from AddressList except createdBy, which is automatically set from the message creator.","type":"object","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.v29.AliasPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v29.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.v29.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v29.AltTimeChecks":{"type":"object","title":"AltTimeChecks defines alternative time-based checks for approval denial.\nIf the transfer time falls within any of the specified offline hours or days, the approval is denied.\nUses UTC timezone for neutral timezone approach.\nofflineHours: ranges of hours (0-23) when transfers should be denied\nofflineDays: ranges of days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied","properties":{"offlineDays":{"description":"Days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"offlineDaysOfMonth":{"description":"Days of month (1-31) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"offlineHours":{"description":"Hours (0-23) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"offlineMonths":{"description":"Months (1-12, where 1=January, 12=December) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"offlineWeeksOfYear":{"description":"Weeks of year (1-52) when transfers should be denied. Uses ISO 8601 week numbering.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"timezoneOffsetMinutes":{"description":"Timezone offset magnitude in minutes from UTC. Default 0 = UTC. Examples: 300 for EST (UTC-5), 330 for IST (UTC+5:30).\nAll time checks are evaluated after applying this offset to the block time.","type":"string"},"timezoneOffsetNegative":{"type":"boolean","title":"If true, the timezone offset is subtracted (west of UTC). If false, it is added (east of UTC).\nExample: EST (UTC-5) = timezoneOffsetMinutes: 300, timezoneOffsetNegative: true"}}},"tokenization.v29.ApprovalAmounts":{"description":"ApprovalAmounts defines approval amounts per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the amounts transferred for the specified token IDs and ownership times \nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallApprovalAmount":{"description":"Overall approval amount.","type":"string"},"perFromAddressApprovalAmount":{"description":"Approval amount per \"from\" address.","type":"string"},"perInitiatedByAddressApprovalAmount":{"description":"Approval amount per \"initiated by\" address.","type":"string"},"perToAddressApprovalAmount":{"description":"Approval amount per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v29.ResetTimeIntervals"}}},"tokenization.v29.ApprovalChange":{"description":"ApprovalChange represents a change to an approval (created, edited, or deleted).","type":"object","properties":{"action":{"type":"string"},"approvalId":{"type":"string"},"approvalLevel":{"type":"string"},"version":{"type":"string"}}},"tokenization.v29.ApprovalCriteria":{"description":"ApprovalCriteria defines the criteria for approving transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"allowBackedMinting":{"description":"If true, this collection approval allows backed minting operations (CosmosCoinBackedPath).\nWhen false, this approval cannot be used for transfers involving backed minting addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"allowSpecialWrapping":{"description":"If true, this collection approval allows special wrapping operations (CosmosCoinWrapperPath).\nWhen false, this approval cannot be used for transfers involving wrapping addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v29.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v29.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v29.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v29.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"overridesFromOutgoingApprovals":{"description":"Overrides the user's outgoing approvals for approval. If true, this collection-level approval\ntakes precedence over any outgoing approvals defined by the sender, allowing the collection to\ncontrol outgoing transfer behavior.","type":"boolean"},"overridesToIncomingApprovals":{"description":"Overrides the user's incoming approvals for approval. If true, this collection-level approval\ntakes precedence over any incoming approvals defined by the recipient, allowing the collection to\ncontrol incoming transfer behavior.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v29.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"userApprovalSettings":{"description":"Issuer-imposed constraints on user-level coin transfers. Propagated to user-level approvals\nduring greedy transfer matching (same pattern as userRoyalties). Only applicable on collection-level approvals.\nIf conflicting settings across multiple matched approvals, the transfer is rejected (like royalties).","$ref":"#/definitions/tokenization.v29.UserApprovalSettings"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.VotingChallenge"}}}},"tokenization.v29.ApprovalIdentifierDetails":{"description":"ApprovalIdentifierDetails defines the details to identify a specific approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v29.ApprovalUsed":{"description":"ApprovalUsed represents an approval that was consumed during a transfer.","type":"object","properties":{"approvalId":{"type":"string"},"approvalLevel":{"type":"string"},"approverAddress":{"type":"string"},"version":{"type":"string"}}},"tokenization.v29.AutoDeletionOptions":{"description":"AutoDeletionOptions defines the options for auto-deletion of approvals.","type":"object","properties":{"afterOneUse":{"type":"boolean","title":"After one use?"},"afterOverallMaxNumTransfers":{"type":"boolean","title":"After overall max number of uses threshold is met?"},"allowCounterpartyPurge":{"type":"boolean","title":"Allow counterparty to purge this approval if they are the only initiator"},"allowPurgeIfExpired":{"type":"boolean","title":"Allow others to call PurgeApprovals on behalf of this approval owner"}}},"tokenization.v29.Balance":{"description":"Balance represents the balance of a token for a specific user.\nThe user amounts xAmount of a token specified for the time ranges specified.\n\nExample: User A owns x10 of token IDs 1-10 from 1/1/2020 to 1/1/2021.\n\nIf times or tokenIDs have len \u003e 1, then the user owns all token IDs specified for all time ranges specified.","type":"object","properties":{"amount":{"description":"The amount of the token owned by the user.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"The token IDs for which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.CoinTransfer":{"type":"object","properties":{"coins":{"description":"The sdk.Coins to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"overrideFromWithApproverAddress":{"description":"By default, the from address is the initiator of the transaction.\nIf this is set to true, we will override the from address with the approver address.\nNote: This is not applicable for collection approvals (since approverAddress == '').","type":"boolean"},"overrideToWithInitiator":{"description":"By default, the to address is what is specified in the coin transfer.\nIf this is set to true, we will override the to address with the initiator of the transaction.","type":"boolean"},"to":{"description":"The address of the recipient of the transfer.","type":"string"}}},"tokenization.v29.CoinTransferProto":{"description":"CoinTransferProto represents a coin transfer that occurred during a transaction.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"},"from":{"type":"string"},"isProtocolFee":{"type":"boolean"},"to":{"type":"string"}}},"tokenization.v29.CollectionApproval":{"type":"object","title":"CollectionApproval defines the rules for the approval of a transfer on the collection level","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v29.ApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v29.CollectionApprovalPermission":{"description":"CollectionApprovalPermission defines what collection approved transfers can be updated vs. are locked.\n\nEach transfer is broken down to a (from, to, initiatedBy, transferTime, tokenId) tuple.\nFor a transfer to match, we need to match ALL of the fields in the combination. \nThese are determined by the fromListId, toListId, initiatedByListId, transferTimes, tokenIds fields.\nAddressLists are used for (from, to, initiatedBy) which are a permanent list of addresses identified by an ID (see AddressLists). \n\npermanentlyPermitted/ForbiddenTimes: when can the manager execute this permission?\n\nEx: Let's say we are updating the transferability for the transfer tuple (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", 10, 1000).\nWe would check to find the FIRST CollectionApprovalPermission that matches this combination.\nIf we find a match, we would check the permitted/forbidden times to see if we can execute this permission (default is ALLOWED).\n\nEx: So if you wanted to freeze the transferability to enforce that token ID 1 will always be transferable, you could set\nthe combination (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", \"All Transfer Times\", 1) to always be forbidden.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.CollectionMetadata":{"description":"This message defines the metadata for the collection.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the collection metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the collection metadata.","type":"string"}}},"tokenization.v29.CollectionPermissions":{"description":"CollectionPermissions defines the permissions for the collection (i.e., what the manager can and cannot do).\n\nThere are three types of permissions for a collection: ActionPermission, TokenIdsActionPermission, and CollectionApprovalPermission.\n\nThe permission type allows fine-grained access control for each action.\n- ActionPermission: defines when the manager can perform an action or update a field.\n- TokenIdsActionPermission: defines when the manager can perform an action for specific tokens\n- CollectionApprovalPermission: defines when the manager can update the transferability of the collection and what transfers can be updated vs. locked.\n\nNote there are a few different times here which could get confusing:\n- permanentlyPermitted/ForbiddenTimes - the times that a permission can be performed\n- transferTimes - the times that a transfer occurs\n- ownershipTimes - the times when a token is owned by a user\n\nThe permitted/permanentlyForbiddenTimes are used to determine when a permission can be executed.\nOnce a time is set to be permitted or forbidden, it is PERMANENT and cannot be changed.\nIf a time is not set to be permitted or forbidden, it is considered NEUTRAL and can be updated but is ALLOWED by default.\n\nIMPORTANT: We take first-match only for the permissions. This means that if you forbid time T in array index 0 and permit time T in index 1, \nwe will only check the first permission (forbid time T) and not the second permission (permit time T).","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApprovalPermission"}},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenIdsActionPermission"}},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenIdsActionPermission"}}}},"tokenization.v29.Conversion":{"description":"Conversion defines a bidirectional conversion between a cosmos coin (with denom) and token balances.","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin side of the conversion (amount + denom).","$ref":"#/definitions/tokenization.v29.ConversionSideAWithDenom"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}}}},"tokenization.v29.ConversionSideA":{"description":"ConversionSideA represents the cosmos coin amount side of a conversion without denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"}}},"tokenization.v29.ConversionSideAWithDenom":{"description":"ConversionSideAWithDenom represents the cosmos coin side of a conversion with denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"},"denom":{"description":"The denomination of the cosmos coin.","type":"string"}}},"tokenization.v29.ConversionWithoutDenom":{"description":"ConversionWithoutDenom defines a bidirectional conversion between a cosmos coin amount (without denom) and token balances.\nThe denom is stored at the base level (e.g., in AliasPath or CosmosCoinWrapperPath).","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin amount side of the conversion (amount only, denom stored separately).","$ref":"#/definitions/tokenization.v29.ConversionSideA"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}}}},"tokenization.v29.CosmosCoinBackedPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v29.Conversion"}}},"tokenization.v29.CosmosCoinWrapperPathAddObject":{"type":"object","properties":{"allowOverrideWithAnyValidToken":{"type":"boolean"},"conversion":{"$ref":"#/definitions/tokenization.v29.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.v29.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v29.DenomUnit":{"type":"object","properties":{"decimals":{"description":"The number of decimal places for this unit. Defines the precision of the unit.","type":"string"},"isDefaultDisplay":{"description":"If true, this is the default display unit. Only one unit should be marked as the default display unit.\nThis unit will be used by default when displaying the coin amount. If none are marked default, we use the base level.","type":"boolean"},"metadata":{"description":"The metadata for this denomination unit.","$ref":"#/definitions/tokenization.v29.PathMetadata"},"symbol":{"description":"The symbol for this unit (e.g., \"BADGE\", \"nBADGE\"). Used for display purposes.","type":"string"}}},"tokenization.v29.DynamicStoreChallenge":{"description":"DynamicStoreChallenge defines a challenge that requires the initiator to pass a dynamic store check.","type":"object","properties":{"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"storeId":{"description":"The ID of the dynamic store to check.","type":"string"}}},"tokenization.v29.ETHSignatureChallenge":{"description":"ETHSignatureChallenge defines a rule for the approval in the form of an Ethereum signature challenge.\n\nAn ETH signature challenge is a challenge where the user must provide a valid Ethereum signature for a specific nonce.\nThe signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId) and each signature can only be used once.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: We track the usage of each signature to prevent replay attacks. Each signature can only be used once.\nIf you update the challenge ID, then the used signatures tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this ETH signature challenge for tracking the number of uses per signature.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this ETH signature challenge.","type":"string"},"signer":{"description":"The Ethereum address that must sign the nonce for verification.","type":"string"},"uri":{"description":"The URI associated with this ETH signature challenge, optionally providing metadata about the challenge.","type":"string"}}},"tokenization.v29.ETHSignatureProof":{"description":"ETHSignatureProof represents an Ethereum signature proof for a challenge.","type":"object","properties":{"nonce":{"description":"The nonce that was signed. The signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId).","type":"string"},"signature":{"description":"The Ethereum signature of the nonce.","type":"string"}}},"tokenization.v29.EVMQueryChallenge":{"description":"EVMQueryChallenge defines a rule for approval via read-only EVM contract query.\n\nThe challenge executes a staticcall to the specified contract with the given calldata.\nThe result is compared against the expected result (if provided) or checked for non-zero return.\n\nIMPORTANT: This is read-only and cannot modify state. The query is executed with a gas limit\nto prevent DoS attacks. All results are deterministic since EVM state is consistent within a block.","type":"object","properties":{"calldata":{"type":"string","title":"ABI-encoded function selector + arguments (hex string without 0x prefix)\nExample: \"70a08231000000000000000000000000{address}\" for balanceOf(address)\nCan use placeholders: $initiator, $sender, $recipient (replaced at runtime)"},"comparisonOperator":{"description":"Comparison operator: \"eq\" (equals), \"ne\" (not equals), \"gt\" (greater than), \"gte\", \"lt\", \"lte\"\nOnly \"eq\" and \"ne\" work for non-numeric types. Default is \"eq\".","type":"string"},"contractAddress":{"type":"string","title":"The EVM contract address to query (0x format or bb1 format)"},"customData":{"type":"string","title":"Arbitrary custom data"},"expectedResult":{"description":"Expected return value (hex string without 0x prefix). If empty, any non-error result passes.\nFor boolean checks, use \"0000...0001\" for true.","type":"string"},"gasLimit":{"type":"string","title":"Gas limit for the query (default 100000, max 500000)"},"uri":{"type":"string","title":"The URI associated with this challenge (metadata)"}}},"tokenization.v29.IncomingApprovalCriteria":{"description":"IncomingApprovalCriteria defines the criteria for approving incoming transfers.\nThis is used for user-level incoming approvals and only includes fields relevant to incoming transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v29.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v29.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v29.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v29.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v29.PredeterminedBalances"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No recipient checks are included for incoming approvals since the recipient is the user themselves.","$ref":"#/definitions/tokenization.v29.AddressChecks"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.VotingChallenge"}}}},"tokenization.v29.IncrementedBalances":{"description":"IncrementedBalances represents balances that are incremented by specific amounts, according to the order calculation method.","type":"object","properties":{"allowAmountScaling":{"description":"When true, the actual transfer can be any evenly divisible integer multiple (\u003e=1x) of startBalances.\napprovalCriteria.coinTransfers are scaled by the same multiplier.\nAll other IncrementedBalances fields must be zero/false/nil when this is true.","type":"boolean"},"allowOverrideTimestamp":{"description":"Whether to allow overriding the timestamp for the balances (only applicable with durationFromTimestamp set).","type":"boolean"},"allowOverrideWithAnyValidToken":{"type":"boolean","title":"Allow override of any valid ID"},"durationFromTimestamp":{"description":"The amount of unix milliseconds to approve starting from now. Incompatible with incrementOwnershipTimesBy.","type":"string"},"incrementOwnershipTimesBy":{"description":"The amount by which to increment ownership times. Incompatible with approveStartingFromNowBy.","type":"string"},"incrementTokenIdsBy":{"description":"The amount by which to increment token IDs.","type":"string"},"maxScalingMultiplier":{"description":"Maximum allowed scaling multiplier. Must be \u003e 0 when allowAmountScaling is true.\nThe chain rejects transfers where the computed multiplier exceeds this cap.\nIgnored (set to \"0\") when allowAmountScaling is false.","type":"string"},"recurringOwnershipTimes":{"description":"Recurring ownership times.","$ref":"#/definitions/tokenization.v29.RecurringOwnershipTimes"},"startBalances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}}}},"tokenization.v29.InvariantsAddObject":{"description":"InvariantsAddObject is used for adding invariants without specifying addresses.\nAddresses are generated by the keeper and stored in the collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.\nAddress will be generated by the keeper.","$ref":"#/definitions/tokenization.v29.CosmosCoinBackedPathAddObject"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.v29.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.v29.ManualBalances":{"description":"ManualBalances represents a list of manual balances entered for the predetermined balances criteria. Order is calculated according to the calculation method set.","type":"object","properties":{"balances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}}}},"tokenization.v29.MaxNumTransfers":{"description":"MaxNumTransfers defines the maximum number of transfers per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the number of transfers for the specified token IDs and ownership times\nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallMaxNumTransfers":{"description":"Overall maximum number of transfers.","type":"string"},"perFromAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"from\" address.","type":"string"},"perInitiatedByAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"initiated by\" address.","type":"string"},"perToAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v29.ResetTimeIntervals"}}},"tokenization.v29.MerkleChallenge":{"description":"Challenges define a rule for the approval in the form of a Merkle challenge.\n\nA Merkle challenge is a challenge where the user must provide a Merkle proof to a Merkle tree. If they provide a valid proof,\nthen the challenge is met. All challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Merkle challenges currently are limited to SHA256 hashes. See documentation for MerkleChallenge for more details and tutorials.\n\nIMPORTANT: We track the number of uses per leaf according to the challengeTrackerId specified by the parent approval of this challenge.\nIf you update the challenge ID, then the used leaves tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this Merkle challenge for tracking the number of uses per leaf.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this Merkle challenge.","type":"string"},"expectedProofLength":{"description":"The expected length of the Merkle path for verification. Used to prevent Merkle path truncation attacks.","type":"string"},"leafSigner":{"description":"Ethereum address that must sign the leaf. Used to protect against man-in-the-middle attacks.\nSignature scheme: sign(leaf + \"-\" + creatorAddress), verified using elliptic curve signature verification.","type":"string"},"maxUsesPerLeaf":{"description":"The maximum number of times each leaf can be used. Must be 1 if useCreatorAddressAsLeaf is false to prevent replay attacks.","type":"string"},"root":{"description":"The root hash of the Merkle tree to which the Merkle path must lead for verification.","type":"string"},"uri":{"description":"The URI associated with this Merkle challenge, optionally providing metadata about the challenge.","type":"string"},"useCreatorAddressAsLeaf":{"description":"If true, we will override the user's leaf for their proof with their creator address. Used for whitelist trees where all leaves are valid BitBadges addresses.","type":"boolean"}}},"tokenization.v29.MerklePathItem":{"description":"MerklePathItem represents an item in a Merkle path.","type":"object","properties":{"aunt":{"description":"The hash of the sibling node (aunt) in the Merkle path.","type":"string"},"onRight":{"description":"Indicates whether the aunt node is on the right side of the path.","type":"boolean"}}},"tokenization.v29.MerkleProof":{"description":"MerkleProof represents a Merkle proof, consistent with Tendermint/Crypto Merkle tree.","type":"object","properties":{"aunts":{"description":"List of Merkle path items (aunts) that make up the proof.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerklePathItem"}},"leaf":{"description":"The hash of the leaf node for which the proof is generated.","type":"string"},"leafSignature":{"description":"The signature of the leaf node tying the address to the leaf node.","type":"string"}}},"tokenization.v29.MsgCastVote":{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","type":"object","properties":{"approvalId":{"description":"The approval ID.","type":"string"},"approvalLevel":{"description":"The approval level (\"collection\", \"incoming\", or \"outgoing\").","type":"string"},"approverAddress":{"description":"The approver address (empty string for collection-level approvals).","type":"string"},"collectionId":{"description":"The collection ID for the voting challenge.","type":"string"},"creator":{"description":"The address of the voter casting the vote.","type":"string"},"proposalId":{"description":"The proposal ID (challenge ID) from the VotingChallenge.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.v29.MsgCastVoteResponse":{"type":"object"},"tokenization.v29.MsgCreateAddressLists":{"description":"MsgCreateAddressLists is used to create address lists.","type":"object","properties":{"addressLists":{"description":"Address lists to create. The createdBy field will be automatically set to the creator address.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.AddressListInput"}},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgCreateAddressListsResponse":{"description":"MsgCreateAddressListsResponse is the response to MsgCreateAddressLists.","type":"object"},"tokenization.v29.MsgCreateCollection":{"description":"MsgCreateCollection is used to create a new collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.AliasPathAddObject"}},"collectionApprovals":{"description":"Collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApproval"}},"collectionMetadata":{"description":"Collection metadata.","$ref":"#/definitions/tokenization.v29.CollectionMetadata"},"collectionPermissions":{"description":"Collection permissions.","$ref":"#/definitions/tokenization.v29.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v29.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v29.InvariantsAddObject"},"isArchived":{"description":"isArchived flag.","type":"boolean"},"manager":{"description":"Manager address.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"Standards entries.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"Token metadata entries.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenMetadata"}},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.MsgCreateCollectionResponse":{"description":"MsgCreateCollectionResponse is the response to MsgCreateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgCreateDynamicStore":{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v29.MsgCreateDynamicStoreResponse":{"description":"MsgCreateDynamicStoreResponse is the response to MsgCreateDynamicStore.","type":"object","properties":{"reviewItems":{"type":"array","items":{"type":"string"}},"storeId":{"description":"ID of the dynamic store.","type":"string"}}},"tokenization.v29.MsgDeleteCollection":{"description":"MsgDeleteCollection is used to delete a collection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgDeleteCollectionResponse":{"description":"MsgDeleteCollectionResponse is the response to MsgDeleteCollection.","type":"object"},"tokenization.v29.MsgDeleteDynamicStore":{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store to delete.","type":"string"}}},"tokenization.v29.MsgDeleteDynamicStoreResponse":{"description":"MsgDeleteDynamicStoreResponse is the response to MsgDeleteDynamicStore.","type":"object"},"tokenization.v29.MsgDeleteIncomingApproval":{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgDeleteIncomingApprovalResponse":{"description":"MsgDeleteIncomingApprovalResponse is the response to MsgDeleteIncomingApproval.","type":"object","properties":{"found":{"type":"boolean"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.v29.MsgDeleteOutgoingApproval":{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgDeleteOutgoingApprovalResponse":{"description":"MsgDeleteOutgoingApprovalResponse is the response to MsgDeleteOutgoingApproval.","type":"object","properties":{"found":{"type":"boolean"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.v29.MsgPurgeApprovals":{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","type":"object","properties":{"approvalsToPurge":{"description":"Specific approvals to purge. If empty, purges all applicable approvals based on other flags.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalIdentifierDetails"}},"approverAddress":{"description":"Address of the user whose approvals to purge. If empty, defaults to creator.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"purgeCounterpartyApprovals":{"description":"Whether to purge counterparty approvals (approvals where the creator is the only initiator).","type":"boolean"},"purgeExpired":{"description":"Whether to purge expired approvals (approvals with no future valid transfer times).","type":"boolean"}}},"tokenization.v29.MsgPurgeApprovalsResponse":{"description":"MsgPurgeApprovalsResponse is the response to MsgPurgeApprovals.","type":"object","properties":{"numPurged":{"description":"Number of approvals purged.","type":"string"},"purgedApprovalIds":{"type":"array","items":{"type":"string"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgSetCollectionApprovals":{"type":"object","title":"MsgSetCollectionApprovals sets the collection approvals and canUpdateCollectionApprovals permission","properties":{"canUpdateCollectionApprovals":{"type":"array","title":"Permission to update collection approvals","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApprovalPermission"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApproval"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgSetCollectionApprovalsResponse":{"description":"MsgSetCollectionApprovalsResponse is the response to MsgSetCollectionApprovals.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgSetCollectionMetadata":{"type":"object","title":"MsgSetCollectionMetadata sets the collection metadata and canUpdateCollectionMetadata permission","properties":{"canUpdateCollectionMetadata":{"type":"array","title":"Permission to update collection metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v29.CollectionMetadata"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgSetCollectionMetadataResponse":{"description":"MsgSetCollectionMetadataResponse is the response to MsgSetCollectionMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetCustomData":{"type":"object","title":"MsgSetCustomData sets the custom data and canUpdateCustomData permission","properties":{"canUpdateCustomData":{"type":"array","title":"Permission to update custom data","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"}}},"tokenization.v29.MsgSetCustomDataResponse":{"description":"MsgSetCustomDataResponse is the response to MsgSetCustomData.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetDynamicStoreValue":{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","type":"object","properties":{"address":{"description":"The address for which to set the value.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store.","type":"string"},"value":{"description":"The boolean value to set (true/false).","type":"boolean"}}},"tokenization.v29.MsgSetDynamicStoreValueResponse":{"description":"MsgSetDynamicStoreValueResponse is the response to MsgSetDynamicStoreValue.","type":"object","properties":{"previousValue":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgSetIncomingApproval":{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","type":"object","properties":{"approval":{"description":"The incoming approval to set.","$ref":"#/definitions/tokenization.v29.UserIncomingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgSetIncomingApprovalResponse":{"description":"MsgSetIncomingApprovalResponse is the response to MsgSetIncomingApproval.","type":"object","properties":{"action":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.v29.MsgSetIsArchived":{"type":"object","title":"MsgSetIsArchived sets the isArchived and canArchiveCollection permission","properties":{"canArchiveCollection":{"type":"array","title":"Permission to archive collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"isArchived":{"description":"New isArchived to set.","type":"boolean"}}},"tokenization.v29.MsgSetIsArchivedResponse":{"description":"MsgSetIsArchivedResponse is the response to MsgSetIsArchived.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetManager":{"type":"object","title":"MsgSetManager sets the manager and canUpdateManager permission","properties":{"canUpdateManager":{"type":"array","title":"Permission to update manager","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"manager":{"description":"New manager to set.","type":"string"}}},"tokenization.v29.MsgSetManagerResponse":{"description":"MsgSetManagerResponse is the response to MsgSetManager.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetOutgoingApproval":{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","type":"object","properties":{"approval":{"description":"The outgoing approval to set.","$ref":"#/definitions/tokenization.v29.UserOutgoingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgSetOutgoingApprovalResponse":{"description":"MsgSetOutgoingApprovalResponse is the response to MsgSetOutgoingApproval.","type":"object","properties":{"action":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.v29.MsgSetReservedProtocolAddress":{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","type":"object","properties":{"address":{"description":"Address to set or unset as reserved protocol address.","type":"string"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"isReservedProtocol":{"description":"Whether the address should be a reserved protocol address (true) or not (false).","type":"boolean"}}},"tokenization.v29.MsgSetReservedProtocolAddressResponse":{"description":"MsgSetReservedProtocolAddressResponse is the response to MsgSetReservedProtocolAddress.","type":"object"},"tokenization.v29.MsgSetStandards":{"type":"object","title":"MsgSetStandards sets the standards and canUpdateStandards permission","properties":{"canUpdateStandards":{"type":"array","title":"Permission to update standards","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgSetStandardsResponse":{"description":"MsgSetStandardsResponse is the response to MsgSetStandards.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetTokenMetadata":{"type":"object","title":"MsgSetTokenMetadata sets the token metadata and canUpdateTokenMetadata permission","properties":{"canUpdateTokenMetadata":{"type":"array","title":"Permission to update token metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenMetadata"}}}},"tokenization.v29.MsgSetTokenMetadataResponse":{"description":"MsgSetTokenMetadataResponse is the response to MsgSetTokenMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetValidTokenIds":{"type":"object","title":"MsgSetValidTokenIds sets the validTokenIds and canUpdateValidTokenIds permission","properties":{"canUpdateValidTokenIds":{"type":"array","title":"Permission to update valid token IDs","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.MsgSetValidTokenIdsResponse":{"description":"MsgSetValidTokenIdsResponse is the response to MsgSetValidTokenIds.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgTransferTokens":{"description":"MsgTransferTokens is used to transfer tokens.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"transfers":{"description":"Transfers to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Transfer"}}}},"tokenization.v29.MsgTransferTokensResponse":{"description":"MsgTransferTokensResponse is the response to MsgTransferTokens.","type":"object","properties":{"approvalsUsed":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalUsed"}},"balancesTransferred":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}},"coinTransfers":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CoinTransferProto"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgUniversalUpdateCollection":{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v29.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v29.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v29.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v29.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.MsgUniversalUpdateCollectionResponse":{"description":"MsgUniversalUpdateCollectionResponse is the response to MsgUniversalUpdateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgUpdateCollection":{"description":"MsgUpdateCollection is used to update a collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v29.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v29.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v29.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.MsgUpdateCollectionResponse":{"description":"MsgUpdateCollectionResponse is the response to MsgUpdateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgUpdateDynamicStore":{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The new default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"The global kill switch state (true = enabled, false = disabled/halted).\nCallers should query the current value first if they want to keep it unchanged.","type":"boolean"},"storeId":{"description":"ID of the dynamic store to update.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v29.MsgUpdateDynamicStoreResponse":{"description":"MsgUpdateDynamicStoreResponse is the response to MsgUpdateDynamicStore.","type":"object"},"tokenization.v29.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tokenization.v29.Params"}}},"tokenization.v29.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"tokenization.v29.MsgUpdateUserApprovals":{"description":"MsgUpdateUserApprovals is used to update user approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Auto-approve setting for all incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Auto-approve setting for self-initiated incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Auto-approve setting for self-initiated outgoing transfers.","type":"boolean"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"incomingApprovals":{"description":"New incoming approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserIncomingApproval"}},"outgoingApprovals":{"description":"New outgoing approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserOutgoingApproval"}},"updateAutoApproveAllIncomingTransfers":{"description":"Indicates if auto-approve settings for all incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Indicates if auto-approve settings for self-initiated incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Indicates if auto-approve settings for self-initiated outgoing transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIncomingApprovals":{"description":"Indicates if incoming approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateOutgoingApprovals":{"description":"Indicates if outgoing approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateUserPermissions":{"description":"Indicates if user permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"userPermissions":{"description":"New user permissions to set.","$ref":"#/definitions/tokenization.v29.UserPermissions"}}},"tokenization.v29.MsgUpdateUserApprovalsResponse":{"description":"MsgUpdateUserApprovalsResponse is the response to MsgUpdateUserApprovals.","type":"object","properties":{"incomingChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"outgoingChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MustOwnTokens":{"description":"MustOwnTokens represents a condition where a user must own specific tokens\nto be approved to transfer.\n\n- collectionId: The ID of the collection for the tokens that must be owned\n- amountRange: The range of amounts the user must own (min to max)\n- ownershipTimes: The time ranges during which the user must own the tokens.\n- tokenIds: The token IDs the user must own.\n- overrideWithCurrentTime: If true, auto override ownershipTimes with the current time.\n- mustSatisfyForAllAssets: If true, the user must own all specified tokens; otherwise, owning any one for \u003e= 1 millisecond is sufficient.","type":"object","properties":{"amountRange":{"description":"The range of amounts the user must own (min to max).","$ref":"#/definitions/tokenization.v29.UintRange"},"collectionId":{"description":"The ID of the collection.","type":"string"},"mustSatisfyForAllAssets":{"description":"If true, the user must meet ownership requirements for all specified tokens; else, must meet requirements for any single token.","type":"boolean"},"overrideWithCurrentTime":{"description":"If true, override ownershipTimes with the current time.","type":"boolean"},"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user must own the tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"The token IDs the user must own.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.OutgoingApprovalCriteria":{"description":"OutgoingApprovalCriteria defines the criteria for approving outgoing transfers.\nThis is used for user-level outgoing approvals and only includes fields relevant to outgoing transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v29.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v29.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v29.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v29.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v29.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No sender checks are included for outgoing approvals since the sender is the user themselves.","$ref":"#/definitions/tokenization.v29.AddressChecks"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.VotingChallenge"}}}},"tokenization.v29.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"affiliate_percentage":{"type":"string","title":"affiliate_percentage defines the percentage of the transfer amount that goes to the affiliate"},"allowed_denoms":{"type":"array","title":"allowed_denoms defines the list of denoms that are allowed to be used in coin_transfers","items":{"type":"string"}}}},"tokenization.v29.PathMetadata":{"description":"This message defines the metadata for paths (alias paths and cosmos coin wrapper paths).\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the path metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the path metadata.","type":"string"}}},"tokenization.v29.PrecalculateBalancesFromApprovalDetails":{"description":"PrecalculateBalancesFromApprovalDetails defines the details for precalculating balances from an approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"precalculationOptions":{"description":"The options for precalculating the balances.","$ref":"#/definitions/tokenization.v29.PrecalculationOptions"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v29.PrecalculationOptions":{"description":"PrecalculationOptions defines the options for precalculating the balances.","type":"object","properties":{"overrideTimestamp":{"description":"The timestamp to override with when calculating the balances.","type":"string"},"scalingMultiplier":{"description":"When \u003e 0 and allowAmountScaling is true on the approval, all precalculated balance amounts\nare multiplied by this value. Must be \u003c= maxScalingMultiplier. 0 means no scaling (returns 1x base).","type":"string"},"tokenIdsOverride":{"description":"The IDs to override for the transfer. Only applicable if using this option in precalculation.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.PredeterminedBalances":{"description":"PredeterminedBalances represents balances with predetermined order calculation.","type":"object","properties":{"incrementedBalances":{"description":"Balances that have a starting amount and increment. If this is nil, then we use the manual balances.","$ref":"#/definitions/tokenization.v29.IncrementedBalances"},"manualBalances":{"description":"Manual balances that can be entered. If this is nil, then we use the incremented balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ManualBalances"}},"orderCalculationMethod":{"description":"The method to calculate the order of predetermined balances.","$ref":"#/definitions/tokenization.v29.PredeterminedOrderCalculationMethod"}}},"tokenization.v29.PredeterminedOrderCalculationMethod":{"description":"PredeterminedOrderCalculationMethod defines the method to calculate predetermined balances order.","type":"object","properties":{"challengeTrackerId":{"description":"If useMerkleChallengeLeafIndex is set, then this is the ID of the challenge tracker associated with this calculation method.","type":"string"},"useMerkleChallengeLeafIndex":{"description":"Use the Merkle challenge leaf index to calculate the order. Ex: Transfer that uses leaf index 0 gets the first balance, transfer that uses leaf index 1 gets the second balance, etc.","type":"boolean"},"useOverallNumTransfers":{"description":"Use the overall number of transfers to calculate the order. Ex: First transfer gets the first balance, second transfer gets the second balance, etc.","type":"boolean"},"usePerFromAddressNumTransfers":{"description":"Use the number of transfers per \"from\" address to calculate the order. Ex: First transfer from address A gets the first balance, second transfer from address A gets the second balance, etc.","type":"boolean"},"usePerInitiatedByAddressNumTransfers":{"description":"Use the number of transfers per \"initiated by\" address to calculate the order. Ex: First transfer initiated by address A gets the first balance, second transfer initiated by address A gets the second balance, etc.","type":"boolean"},"usePerToAddressNumTransfers":{"description":"Use the number of transfers per \"to\" address to calculate the order. Ex: First transfer to address A gets the first balance, second transfer to address A gets the second balance, etc.","type":"boolean"}}},"tokenization.v29.RecurringOwnershipTimes":{"description":"RecurringOwnershipTimes represents a list of recurring ownership times.","type":"object","properties":{"chargePeriodLength":{"type":"string","title":"Grace period length where you can charge the next interval (nextStartTime - chargePeriodLength) until (nextStartTime) = charge period"},"intervalLength":{"description":"The interval length in unix milliseconds.","type":"string"},"startTime":{"description":"The original start time of the first interval.","type":"string"}}},"tokenization.v29.ResetTimeIntervals":{"description":"Time intervals to reset the trackers at.","type":"object","properties":{"intervalLength":{"description":"Interval length in unix milliseconds.","type":"string"},"startTime":{"description":"Original start time of the first interval.","type":"string"}}},"tokenization.v29.TokenIdsActionPermission":{"description":"TokenIdsActionPermission defines the permissions for performing an action for specific tokens.\nCurrently, this is only used for creating new tokens.\n\nEx: If you want to lock the ability to create new tokens for tokenIds [1,2] at ownershipTimes 1/1/2020 - 1/1/2021, \nyou could set the combination (tokenIds: [1,2], ownershipTimes: [1/1/2020 - 1/1/2021]) to always be forbidden.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.TokenMetadata":{"description":"This message defines the metadata for specific token IDs.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the token metadata.","type":"string"},"tokenIds":{"description":"The token IDs to which this metadata applies.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the token metadata.","type":"string"}}},"tokenization.v29.Transfer":{"description":"Transfer defines the details of a transfer of tokens.","type":"object","properties":{"balances":{"description":"The balances to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}},"ethSignatureProofs":{"description":"The ETH signature proofs / solutions for all ETH signature challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ETHSignatureProof"}},"from":{"description":"The address of the sender of the transfer.","type":"string"},"memo":{"description":"The memo for the transfer.","type":"string"},"merkleProofs":{"description":"The Merkle proofs / solutions for all Merkle challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerkleProof"}},"onlyCheckPrioritizedCollectionApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedIncomingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedOutgoingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"precalculateBalancesFromApproval":{"description":"If defined, we will use the predeterminedBalances from the specified approval to calculate the balances at execution time.\nWe will override the balances field with the precalculated balances. Only applicable for approvals with predeterminedBalances set.","$ref":"#/definitions/tokenization.v29.PrecalculateBalancesFromApprovalDetails"},"prioritizedApprovals":{"description":"The prioritized approvals for the transfer. By default, we scan linearly through the approvals and use the first match.\nThis field can be used to prioritize specific approvals and scan through them first.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalIdentifierDetails"}},"toAddresses":{"description":"The addresses of the recipients of the transfer.","type":"array","items":{"type":"string"}}}},"tokenization.v29.UintRange":{"description":"The UintRange is a range of IDs from some start to some end (inclusive).\nuintRanges are one of the core types used.\n\nThey are used for everything from token IDs to time ranges to min/max balance amounts.\n\nSee the BitBadges documentation for more information.","type":"object","properties":{"end":{"description":"The ending value of the range (inclusive).","type":"string"},"start":{"description":"The starting value of the range (inclusive).","type":"string"}}},"tokenization.v29.UserApprovalSettings":{"description":"UserApprovalSettings defines issuer-imposed constraints on user-level approvals.\nSet on collection-level ApprovalCriteria and propagated to user-level approvals\nduring greedy transfer matching. Each balance slice carries its own settings.","type":"object","properties":{"allowedDenoms":{"description":"Restricts which denoms user-level coinTransfers can reference (beyond params-level AllowedDenoms).\nIf empty, all params-allowed denoms are permitted.","type":"array","items":{"type":"string"}},"disableUserCoinTransfers":{"description":"If true, user-level approvals cannot trigger coinTransfers at all for transfers matched by this collection approval.","type":"boolean"},"userRoyalties":{"description":"User-level royalties to enforce for transfers matched by this collection approval.","$ref":"#/definitions/tokenization.v29.UserRoyalties"}}},"tokenization.v29.UserBalanceStore":{"description":"UserBalanceStore is the store for the user balances for a collection.\n\nIt consists of a list of balances, a list of approved outgoing transfers, and a list of approved incoming transfers,\nas well as the permissions for updating the approved incoming/outgoing transfers.\n\nUpon initialization, all fields (minus the balances) are set to the defaults specified by the collection.\n\nThe outgoing transfers can be used to allow / disallow transfers which are sent from this user.\nIf a transfer has no match, then it is disallowed by default, unless from == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedOutgoingTransfers is set to true.\n\nThe incoming transfers can be used to allow / disallow transfers which are sent to this user.\nIf a transfer has no match, then it is disallowed by default, unless to == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedIncomingTransfers is set to true.\n\nNote that the user approved transfers are only checked if the collection approved transfers do not specify to override\nthe user approved transfers. \n\nThe permissions are used to determine whether the user can update the approved incoming/outgoing transfers and auto approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Whether to auto-approve all incoming transfers by default. \nThis is just shorthand for adding an accept everything incoming approval\nwith no restrictions.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Whether to auto-approve self-initiated incoming transfers for this user (i.e. to == initiatedBy).","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Whether to auto-approve self-initiated outgoing transfers for this user (i.e. from == initiatedBy).","type":"boolean"},"balances":{"description":"The list of balances associated with this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}},"incomingApprovals":{"description":"The list of approved incoming transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserIncomingApproval"}},"outgoingApprovals":{"description":"The list of approved outgoing transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserOutgoingApproval"}},"userPermissions":{"description":"The permissions for this user's actions and transfers.","$ref":"#/definitions/tokenization.v29.UserPermissions"}}},"tokenization.v29.UserIncomingApproval":{"description":"UserIncomingApproval defines the rules for the approval of an incoming transfer to a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v29.IncomingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v29.UserIncomingApprovalPermission":{"description":"UserIncomingApprovalPermission defines the permissions for updating the user's approved incoming transfers.\n\nSee CollectionApprovalPermission for more details. This is equivalent without the toListId field because that is always the user.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.UserOutgoingApproval":{"description":"UserOutgoingApproval defines the rules for the approval of an outgoing transfer from a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v29.OutgoingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v29.UserOutgoingApprovalPermission":{"description":"UserOutgoingApprovalPermission defines the permissions for updating the user's approved outgoing transfers.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.UserPermissions":{"description":"UserPermissions defines the permissions for the user about their approvals (i.e., what the user can and cannot do).\n\nSee CollectionPermissions for more details on the different types of permissions.\n\ncanUpdateOutgoingApprovals and canUpdateOutgoingApprovals follow the same as the canUpdateCollectionApprovals in CollectionPermissions,\nbut certain fields are removed because they are not relevant to the user.","type":"object","properties":{"canUpdateAutoApproveAllIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for all incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated outgoing transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateIncomingApprovals":{"description":"Permissions related to updating the user's approved incoming transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserIncomingApprovalPermission"}},"canUpdateOutgoingApprovals":{"description":"Permissions related to updating the user's approved outgoing transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserOutgoingApprovalPermission"}}}},"tokenization.v29.UserRoyalties":{"description":"UserRoyalties defines the royalties for a user.","type":"object","properties":{"payoutAddress":{"description":"Payout address for the royalties.","type":"string"},"percentage":{"description":"Percentage of the transfer amount to apply as royalties. 1 to 10000 represents basis points.","type":"string"}}},"tokenization.v29.Voter":{"description":"Voter defines a voter with their address and weight.","type":"object","properties":{"address":{"description":"The address of the voter.","type":"string"},"weight":{"description":"The weight of this voter's vote.","type":"string"}}},"tokenization.v29.VotingChallenge":{"description":"VotingChallenge defines a rule for approval in the form of a voting/multi-sig challenge.\nRequires a weighted quorum threshold to be met through votes from specified voters.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Votes are stored separately and can be updated. The threshold is calculated as a percentage\nof total possible weight (all voters), not just voted weight. If you update the proposal ID, then the\nvote tracker will reset and start a new tally. We recommend using a unique proposal ID for each challenge\nto prevent overlap and unexpected behavior.","type":"object","properties":{"customData":{"description":"Arbitrary custom data associated with this voting challenge.","type":"string"},"delayAfterQuorum":{"description":"Mandatory delay in milliseconds after quorum is reached before the transfer can execute.\nIf set, the transfer will fail until: now \u003e= quorumReachedTimestamp + delayAfterQuorum.\nDuring the delay, signers can remove their votes to cancel (quorum drops = delay resets).","type":"string"},"proposalId":{"type":"string","title":"The ID of this voting challenge for tracking votes (scoped like challengeTrackerId).\nFormat: collectionId-approverAddress-approvalLevel-approvalId-challengeId"},"quorumThreshold":{"description":"The quorum threshold as a percentage (0-100) of total possible weight that must vote \"yes\".\nExample: 50 means 50% of total voter weight must vote yes for approval.","type":"string"},"resetAfterExecution":{"description":"If true, all votes for this challenge are cleared after a successful transfer execution.\nThis makes the challenge reusable (e.g., for vault withdrawals that need fresh approval each time).","type":"boolean"},"uri":{"description":"The URI associated with this voting challenge.","type":"string"},"voters":{"description":"List of voters with their weights. Each voter can cast a weighted vote.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Voter"}}}}},"tags":[{"name":"Msg"},{"name":"Query"}]} \ No newline at end of file +{"id":"github.com/bitbadges/bitbadgeschain","consumes":["application/json"],"produces":["application/json"],"swagger":"2.0","info":{"description":"Chain github.com/bitbadges/bitbadgeschain REST API","title":"HTTP API Console","contact":{"name":"github.com/bitbadges/bitbadgeschain"},"version":"version not set"},"paths":{"/bitbadges/bitbadgeschain/managersplitter":{"get":{"tags":["Query"],"summary":"AllManagerSplitters queries all manager splitters.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllManagerSplitters","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.QueryAllManagerSplittersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/managersplitter/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubCombitbadgesbitbadgeschainQuery_ParamsMixin22","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/managersplitter/{address}":{"get":{"tags":["Query"],"summary":"ManagerSplitter queries a manager splitter by address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_ManagerSplitter","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.QueryGetManagerSplitterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/sendmanager/balance/{address}/{denom}":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a specific denom for an address with alias routing.\nThis allows querying both standard coins and alias denoms (e.g., badgeslp:).","operationId":"GithubCombitbadgesbitbadgeschainQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the specific denomination to query the balance for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/sendmanager.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/sendmanager/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubCombitbadgesbitbadgeschainQuery_ParamsMixin34","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/sendmanager.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_address_list/{listId}":{"get":{"tags":["Query"],"summary":"Queries an address list by ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetAddressList","parameters":[{"type":"string","name":"listId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetAddressListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_all_reserved_protocol_addresses":{"get":{"tags":["Query"],"summary":"Queries all reserved protocol addresses.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetAllReservedProtocolAddresses","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetAllReservedProtocolAddressesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_approvals_tracker/{collectionId}/{approvalLevel}/{approverAddress}/{amountTrackerId}/{trackerType}/{approvedAddress}":{"get":{"tags":["Query"],"summary":"Queries an approvals tracker by ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetApprovalTracker","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"amountTrackerId","in":"path","required":true},{"type":"string","name":"trackerType","in":"path","required":true},{"type":"string","description":"if trackerType is \"overall\", leave blank","name":"approvedAddress","in":"path","required":true},{"type":"string","name":"approvalId","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetApprovalTrackerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_balance/{collectionId}/{address}":{"get":{"tags":["Query"],"summary":"Queries an addresses balance for a collection, specified by its ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetBalance","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_balance_for_token/{collectionId}/{address}/{tokenId}":{"get":{"tags":["Query"],"summary":"Queries the balance amount for a specific token ID at a specific time.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetBalanceForToken","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","name":"address","in":"path","required":true},{"type":"string","name":"tokenId","in":"path","required":true},{"type":"string","description":"Optional - milliseconds since epoch, defaults to current block time","name":"time","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetBalanceForTokenResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_challenge_tracker/{collectionId}/{approvalLevel}/{approverAddress}/{challengeTrackerId}/{leafIndex}":{"get":{"tags":["Query"],"summary":"Queries the number of times a given leaf has been used for a given merkle challenge.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetChallengeTracker","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"challengeTrackerId","in":"path","required":true},{"type":"string","name":"leafIndex","in":"path","required":true},{"type":"string","name":"approvalId","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetChallengeTrackerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_collection/{collectionId}":{"get":{"tags":["Query"],"summary":"Queries a collection by ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetCollection","parameters":[{"type":"string","name":"collectionId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_collection_stats/{collectionId}":{"get":{"tags":["Query"],"summary":"Queries collection stats (holder count and circulating supply) by collection ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetCollectionStats","parameters":[{"type":"string","name":"collectionId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetCollectionStatsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_dynamic_store/{storeId}":{"get":{"tags":["Query"],"summary":"Queries a dynamic store by ID.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetDynamicStore","parameters":[{"type":"string","name":"storeId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_dynamic_store_value/{storeId}/{address}":{"get":{"tags":["Query"],"summary":"Queries a dynamic store value by store ID and address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetDynamicStoreValue","parameters":[{"type":"string","name":"storeId","in":"path","required":true},{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_eth_signature_tracker/{collectionId}/{approvalLevel}/{approverAddress}/{approvalId}/{challengeTrackerId}/{signature}":{"get":{"tags":["Query"],"summary":"Queries the number of times a given signature has been used for a given ETH signature challenge.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetETHSignatureTracker","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"approvalId","in":"path","required":true},{"type":"string","name":"challengeTrackerId","in":"path","required":true},{"type":"string","name":"signature","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetETHSignatureTrackerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_vote/{collectionId}/{approvalLevel}/{approverAddress}/{approvalId}/{proposalId}/{voterAddress}":{"get":{"tags":["Query"],"summary":"Queries a vote by collection ID, approval level, approver address, approval ID, proposal ID, and voter address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetVote","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"approvalId","in":"path","required":true},{"type":"string","name":"proposalId","in":"path","required":true},{"type":"string","name":"voterAddress","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_votes/{collectionId}/{approvalLevel}/{approverAddress}/{approvalId}/{proposalId}":{"get":{"tags":["Query"],"summary":"Queries all votes for a proposal.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetVotes","parameters":[{"type":"string","name":"collectionId","in":"path","required":true},{"type":"string","description":"\"collection\" or \"incoming\" or \"outgoing\"","name":"approvalLevel","in":"path","required":true},{"type":"string","description":"if approvalLevel is \"collection\", leave blank","name":"approverAddress","in":"path","required":true},{"type":"string","name":"approvalId","in":"path","required":true},{"type":"string","name":"proposalId","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/get_wrappable_balances/{denom}/{address}":{"get":{"tags":["Query"],"summary":"Queries the maximum wrappable amount for a given denom and user address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_GetWrappableBalances","parameters":[{"type":"string","name":"denom","in":"path","required":true},{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryGetWrappableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/is_address_reserved_protocol/{address}":{"get":{"tags":["Query"],"summary":"Queries if an address is a reserved protocol address.","operationId":"GithubCombitbadgesbitbadgeschainQuery_IsAddressReservedProtocol","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryIsAddressReservedProtocolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/bitbadges/bitbadgeschain/tokenization/params":{"get":{"tags":["Query"],"summary":"Parameters queries the parameters of the module.","operationId":"GithubCombitbadgesbitbadgeschainQuery_ParamsMixin53","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.auth.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the x/auth module\nparameters. The authority defaults to the x/gov module account.","operationId":"AuthMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","operationId":"AuthMsg_Exec","parameters":[{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Grant":{"post":{"tags":["Msg"],"summary":"Grant grants the provided authorization to the grantee on the granter's\naccount with the provided expiration time. If there is already a grant\nfor the given (granter, grantee, Authorization) triple, then the grant\nwill be overwritten.","operationId":"AuthMsg_Grant","parameters":[{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgGrantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.authz.v1beta1.Msg/Revoke":{"post":{"tags":["Msg"],"summary":"Revoke revokes any authorization corresponding to the provided method name on the\ngranter's account that has been granted to the grantee.","operationId":"AuthMsg_Revoke","parameters":[{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevoke"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.MsgRevokeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.autocli.v1.Query/AppOptions":{"post":{"tags":["Query"],"summary":"AppOptions returns the autocli options for all of the modules in an app.","operationId":"AuthQuery_AppOptions","parameters":[{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.autocli.v1.AppOptionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/MultiSend":{"post":{"tags":["Msg"],"summary":"MultiSend defines a method for sending coins from some accounts to other accounts.","operationId":"AuthMsg_MultiSend","parameters":[{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgMultiSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method for sending coins from one account to another account.","operationId":"AuthMsg_Send","parameters":[{"description":"MsgSend represents a message to send coins from one account to another.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/SetSendEnabled":{"post":{"tags":["Msg"],"summary":"SetSendEnabled is a governance operation for setting the SendEnabled flag\non any number of Denoms. Only the entries to add or update should be\nincluded. Entries that already exist in the store, but that aren't\nincluded in this message, will be left unchanged.","operationId":"AuthMsg_SetSendEnabled","parameters":[{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabled"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgSetSendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.bank.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/bank module parameters.\nThe authority is defined in the keeper.","operationId":"AuthMsg_UpdateParamsMixin134","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.benchmark.v1.Msg/LoadTest":{"post":{"tags":["Msg"],"summary":"LoadTest defines a method for executing a sequence of load test operations.","operationId":"AuthMsg_LoadTest","parameters":[{"description":"MsgLoadTestOps defines a message containing a sequence of load test operations.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.benchmark.v1.MsgLoadTest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.benchmark.v1.MsgLoadTestResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/AuthorizeCircuitBreaker":{"post":{"tags":["Msg"],"summary":"AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another\naccount's circuit breaker permissions.","operationId":"AuthMsg_AuthorizeCircuitBreaker","parameters":[{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/ResetCircuitBreaker":{"post":{"tags":["Msg"],"summary":"ResetCircuitBreaker resumes processing of Msg's in the state machine that\nhave been been paused using TripCircuitBreaker.","operationId":"AuthMsg_ResetCircuitBreaker","parameters":[{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgResetCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.circuit.v1.Msg/TripCircuitBreaker":{"post":{"tags":["Msg"],"summary":"TripCircuitBreaker pauses processing of Msg's in the state machine.","operationId":"AuthMsg_TripCircuitBreaker","parameters":[{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreaker"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.MsgTripCircuitBreakerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.consensus.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/consensus module parameters.\nThe authority is defined in the keeper.","operationId":"AuthMsg_UpdateParamsMixin149","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.counter.v1.Msg/IncreaseCount":{"post":{"tags":["Msg"],"summary":"IncreaseCount increments the counter by the specified amount.","operationId":"AuthMsg_IncreaseCount","parameters":[{"description":"MsgIncreaseCounter defines a count Msg service counter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.counter.v1.MsgIncreaseCounter"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.counter.v1.MsgIncreaseCountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.counter.v1.Query/GetCount":{"post":{"tags":["Query"],"summary":"GetCount queries the parameters of x/Counter module.","operationId":"AuthQuery_GetCount","parameters":[{"description":"QueryGetCountRequest defines the request type for querying x/mock count.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.counter.v1.QueryGetCountRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.counter.v1.QueryGetCountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/crisis module\nparameters. The authority is defined in the keeper.","operationId":"AuthMsg_UpdateParamsMixin153","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.crisis.v1beta1.Msg/VerifyInvariant":{"post":{"tags":["Msg"],"summary":"VerifyInvariant defines a method to verify a particular invariant.","operationId":"AuthMsg_VerifyInvariant","parameters":[{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariant"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.crisis.v1beta1.MsgVerifyInvariantResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/CommunityPoolSpend":{"post":{"description":"WARNING: This method will fail if an external community pool is used.","tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/distribution module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"AuthMsg_CommunityPoolSpend","parameters":[{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/DepositValidatorRewardsPool":{"post":{"tags":["Msg"],"summary":"DepositValidatorRewardsPool defines a method to provide additional rewards\nto delegators to a specific validator.","operationId":"AuthMsg_DepositValidatorRewardsPool","parameters":[{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/FundCommunityPool":{"post":{"description":"WARNING: This method will fail if an external community pool is used.","tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"AuthMsg_FundCommunityPool","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/SetWithdrawAddress":{"post":{"tags":["Msg"],"summary":"SetWithdrawAddress defines a method to change the withdraw address\nfor a delegator (or validator self-delegation).","operationId":"AuthMsg_SetWithdrawAddress","parameters":[{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/distribution\nmodule parameters. The authority is defined in the keeper.","operationId":"AuthMsg_UpdateParamsMixin164","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawDelegatorReward":{"post":{"tags":["Msg"],"summary":"WithdrawDelegatorReward defines a method to withdraw rewards of delegator\nfrom a single validator.","operationId":"AuthMsg_WithdrawDelegatorReward","parameters":[{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.distribution.v1beta1.Msg/WithdrawValidatorCommission":{"post":{"tags":["Msg"],"summary":"WithdrawValidatorCommission defines a method to withdraw the\nfull commission to the validator address.","operationId":"AuthMsg_WithdrawValidatorCommission","parameters":[{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evidence.v1beta1.Msg/SubmitEvidence":{"post":{"tags":["Msg"],"summary":"SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or\ncounterfactual signing.","operationId":"AuthMsg_SubmitEvidence","parameters":[{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidence"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evm.erc20.v1.Msg/RegisterERC20":{"post":{"tags":["Msg"],"summary":"RegisterERC20 defines a governance operation for registering a token pair\nfor the specified erc20 contract. The authority is hard-coded to the Cosmos\nSDK x/gov module account","operationId":"Erc20Msg_RegisterERC20","parameters":[{"description":"MsgRegisterERC20 is the Msg/RegisterERC20 request type for registering\nan Erc20 contract token pair.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.MsgRegisterERC20"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.MsgRegisterERC20Response"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evm.erc20.v1.Msg/ToggleConversion":{"post":{"tags":["Msg"],"summary":"ToggleConversion defines a governance operation for enabling/disabling a\ntoken pair conversion. The authority is hard-coded to the Cosmos SDK x/gov\nmodule account","operationId":"Erc20Msg_ToggleConversion","parameters":[{"description":"MsgToggleConversion is the Msg/MsgToggleConversion request type for toggling\nan Erc20 contract conversion capability.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.MsgToggleConversion"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.MsgToggleConversionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evm.erc20.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/erc20 module\nparameters. The authority is hard-coded to the Cosmos SDK x/gov module\naccount","operationId":"Erc20Msg_UpdateParams","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evm.feemarket.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defined a governance operation for updating the x/feemarket\nmodule parameters. The authority is hard-coded to the Cosmos SDK x/gov\nmodule account","operationId":"Erc20Msg_UpdateParamsMixin300","parameters":[{"description":"MsgUpdateParams defines a Msg for updating the x/feemarket module parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evm.feemarket.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.feemarket.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evm.vm.v1.Msg/RegisterPreinstalls":{"post":{"tags":["Msg"],"summary":"RegisterPreinstalls defines a governance operation for directly registering\npreinstalled contracts in the EVM. The authority is the same as is used for\nParams updates.","operationId":"Erc20Msg_RegisterPreinstalls","parameters":[{"description":"MsgRegisterPreinstalls defines a Msg for creating preinstalls in evm state.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgRegisterPreinstalls"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgRegisterPreinstallsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.evm.vm.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defined a governance operation for updating the x/vm module\nparameters. The authority is hard-coded to the Cosmos SDK x/gov module\naccount","operationId":"Erc20Msg_UpdateParamsMixin308","parameters":[{"description":"MsgUpdateParams defines a Msg for updating the x/vm module parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/GrantAllowance":{"post":{"tags":["Msg"],"summary":"GrantAllowance grants fee allowance to the grantee on the granter's\naccount with the provided expiration time.","operationId":"AuthMsg_GrantAllowance","parameters":[{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/PruneAllowances":{"post":{"tags":["Msg"],"summary":"PruneAllowances prunes expired fee allowances, currently up to 75 at a time.","operationId":"AuthMsg_PruneAllowances","parameters":[{"description":"MsgPruneAllowances prunes expired fee allowances.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowances"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.feegrant.v1beta1.Msg/RevokeAllowance":{"post":{"tags":["Msg"],"summary":"RevokeAllowance revokes any fee allowance of granter's account that\nhas been granted to the grantee.","operationId":"AuthMsg_RevokeAllowance","parameters":[{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowance"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/CancelProposal":{"post":{"tags":["Msg"],"summary":"CancelProposal defines a method to cancel governance proposal","operationId":"AuthMsg_CancelProposal","parameters":[{"description":"MsgCancelProposal is the Msg/CancelProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgCancelProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"AuthMsg_Deposit","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/ExecLegacyContent":{"post":{"tags":["Msg"],"summary":"ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal\nto execute a legacy content-based proposal.","operationId":"AuthMsg_ExecLegacyContent","parameters":[{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContent"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgExecLegacyContentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given the messages.","operationId":"AuthMsg_SubmitProposal","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/gov module\nparameters. The authority is defined in the keeper.","operationId":"AuthMsg_UpdateParamsMixin180","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"AuthMsg_Vote","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1.Msg/VoteWeighted":{"post":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"AuthMsg_VoteWeighted","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Deposit":{"post":{"tags":["Msg"],"summary":"Deposit defines a method to add deposit on a specific proposal.","operationId":"AuthMsg_DepositMixin184","parameters":[{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDeposit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal defines a method to create new proposal given a content.","operationId":"AuthMsg_SubmitProposalMixin184","parameters":[{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote defines a method to add a vote on a specific proposal.","operationId":"AuthMsg_VoteMixin184","parameters":[{"description":"MsgVote defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.gov.v1beta1.Msg/VoteWeighted":{"post":{"tags":["Msg"],"summary":"VoteWeighted defines a method to add a weighted vote on a specific proposal.","operationId":"AuthMsg_VoteWeightedMixin184","parameters":[{"description":"MsgVoteWeighted defines a message to cast a vote.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeighted"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.MsgVoteWeightedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroup":{"post":{"tags":["Msg"],"summary":"CreateGroup creates a new group with an admin account address, a list of members and some optional metadata.","operationId":"AuthMsg_CreateGroup","parameters":[{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupPolicy creates a new group policy using given DecisionPolicy.","operationId":"AuthMsg_CreateGroupPolicy","parameters":[{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/CreateGroupWithPolicy":{"post":{"tags":["Msg"],"summary":"CreateGroupWithPolicy creates a new group with policy.","operationId":"AuthMsg_CreateGroupWithPolicy","parameters":[{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgCreateGroupWithPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Exec":{"post":{"tags":["Msg"],"summary":"Exec executes a proposal.","operationId":"AuthMsg_ExecMixin188","parameters":[{"description":"MsgExec is the Msg/Exec request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExec"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgExecResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/LeaveGroup":{"post":{"tags":["Msg"],"summary":"LeaveGroup allows a group member to leave the group.","operationId":"AuthMsg_LeaveGroup","parameters":[{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroup"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgLeaveGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/SubmitProposal":{"post":{"tags":["Msg"],"summary":"SubmitProposal submits a new proposal.","operationId":"AuthMsg_SubmitProposalMixin188","parameters":[{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgSubmitProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupAdmin updates the group admin with given group id and previous admin address.","operationId":"AuthMsg_UpdateGroupAdmin","parameters":[{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMembers":{"post":{"tags":["Msg"],"summary":"UpdateGroupMembers updates the group members with given group id and admin address.","operationId":"AuthMsg_UpdateGroupMembers","parameters":[{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembers"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupMetadata updates the group metadata with given group id and admin address.","operationId":"AuthMsg_UpdateGroupMetadata","parameters":[{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyAdmin":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyAdmin updates a group policy admin.","operationId":"AuthMsg_UpdateGroupPolicyAdmin","parameters":[{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdmin"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyDecisionPolicy":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyDecisionPolicy allows a group policy's decision policy to be updated.","operationId":"AuthMsg_UpdateGroupPolicyDecisionPolicy","parameters":[{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/UpdateGroupPolicyMetadata":{"post":{"tags":["Msg"],"summary":"UpdateGroupPolicyMetadata updates a group policy metadata.","operationId":"AuthMsg_UpdateGroupPolicyMetadata","parameters":[{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/Vote":{"post":{"tags":["Msg"],"summary":"Vote allows a voter to vote on a proposal.","operationId":"AuthMsg_VoteMixin188","parameters":[{"description":"MsgVote is the Msg/Vote request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.group.v1.Msg/WithdrawProposal":{"post":{"tags":["Msg"],"summary":"WithdrawProposal withdraws a proposal.","operationId":"AuthMsg_WithdrawProposal","parameters":[{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.MsgWithdrawProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.mint.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/mint module\nparameters. The authority is defaults to the x/gov module account.","operationId":"AuthMsg_UpdateParamsMixin193","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.nft.v1beta1.Msg/Send":{"post":{"tags":["Msg"],"summary":"Send defines a method to send a nft from one account to another account.","operationId":"AuthMsg_SendMixin199","parameters":[{"description":"MsgSend represents a message to send a nft from one account to another account.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.MsgSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/CancelContinuousFund":{"post":{"tags":["Msg"],"summary":"CancelContinuousFund defines a method for cancelling continuous fund.","operationId":"AuthMsg_CancelContinuousFund","parameters":[{"description":"MsgCancelContinuousFund defines a message to cancel continuous funds for a specific recipient.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCancelContinuousFund"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCancelContinuousFundResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/CommunityPoolSpend":{"post":{"tags":["Msg"],"summary":"CommunityPoolSpend defines a governance operation for sending tokens from\nthe community pool in the x/protocolpool module to another account, which\ncould be the governance module itself. The authority is defined in the\nkeeper.","operationId":"AuthMsg_CommunityPoolSpendMixin204","parameters":[{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCommunityPoolSpend"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCommunityPoolSpendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/CreateContinuousFund":{"post":{"tags":["Msg"],"summary":"CreateContinuousFund defines a method to distribute a percentage of funds to an address continuously.\nThis ContinuousFund can be indefinite or run until a given expiry time.\nFunds come from validator block rewards from x/distribution, but may also come from\nany user who funds the ProtocolPoolEscrow module account directly through x/bank.","operationId":"AuthMsg_CreateContinuousFund","parameters":[{"description":"MsgCreateContinuousFund defines a message for adding continuous funds.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCreateContinuousFund"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgCreateContinuousFundResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/FundCommunityPool":{"post":{"tags":["Msg"],"summary":"FundCommunityPool defines a method to allow an account to directly\nfund the community pool.","operationId":"AuthMsg_FundCommunityPoolMixin204","parameters":[{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgFundCommunityPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgFundCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.protocolpool.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/protocolpool module parameters.\nThe authority is defined in the keeper.","operationId":"AuthMsg_UpdateParamsMixin204","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/Unjail":{"post":{"tags":["Msg"],"summary":"Unjail defines a method for unjailing a jailed validator, thus returning\nthem into the bonded validator set, so they can begin receiving provisions\nand rewards again.","operationId":"AuthMsg_Unjail","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjail"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUnjailResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.slashing.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a governance operation for updating the x/slashing module\nparameters. The authority defaults to the x/gov module account.","operationId":"AuthMsg_UpdateParamsMixin210","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/BeginRedelegate":{"post":{"tags":["Msg"],"summary":"BeginRedelegate defines a method for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","operationId":"AuthMsg_BeginRedelegate","parameters":[{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgBeginRedelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation":{"post":{"tags":["Msg"],"summary":"CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation\nand delegate back to previous validator.","operationId":"AuthMsg_CancelUnbondingDelegation","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegation"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/CreateValidator":{"post":{"tags":["Msg"],"summary":"CreateValidator defines a method for creating a new validator.","operationId":"AuthMsg_CreateValidator","parameters":[{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgCreateValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Delegate":{"post":{"tags":["Msg"],"summary":"Delegate defines a method for performing a delegation of coins\nfrom a delegator to a validator.","operationId":"AuthMsg_Delegate","parameters":[{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgDelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/EditValidator":{"post":{"tags":["Msg"],"summary":"EditValidator defines a method for editing an existing validator.","operationId":"AuthMsg_EditValidator","parameters":[{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgEditValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/Undelegate":{"post":{"tags":["Msg"],"summary":"Undelegate defines a method for performing an undelegation from a\ndelegate and a validator.","operationId":"AuthMsg_Undelegate","parameters":[{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegate"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUndelegateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.staking.v1beta1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines an operation for updating the x/staking module\nparameters.","operationId":"AuthMsg_UpdateParamsMixin215","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenCommit":{"post":{"tags":["ABCIListenerService"],"summary":"ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit","operationId":"AuthABCIListenerService_ListenCommit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenCommitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.store.streaming.abci.ABCIListenerService/ListenFinalizeBlock":{"post":{"tags":["ABCIListenerService"],"summary":"ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock","operationId":"AuthABCIListenerService_ListenFinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.store.streaming.abci.ListenFinalizeBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/CancelUpgrade":{"post":{"tags":["Msg"],"summary":"CancelUpgrade is a governance operation for cancelling a previously\napproved software upgrade.","operationId":"AuthMsg_CancelUpgrade","parameters":[{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade":{"post":{"tags":["Msg"],"summary":"SoftwareUpgrade is a governance operation for initiating a software upgrade.","operationId":"AuthMsg_SoftwareUpgrade","parameters":[{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePeriodicVestingAccount":{"post":{"tags":["Msg"],"summary":"CreatePeriodicVestingAccount defines a method that enables creating a\nperiodic vesting account.","operationId":"AuthMsg_CreatePeriodicVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreatePermanentLockedAccount":{"post":{"tags":["Msg"],"summary":"CreatePermanentLockedAccount defines a method that enables creating a permanent\nlocked account.","operationId":"AuthMsg_CreatePermanentLockedAccount","parameters":[{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos.vesting.v1beta1.Msg/CreateVestingAccount":{"post":{"tags":["Msg"],"summary":"CreateVestingAccount defines a method that enables creating a vesting\naccount.","operationId":"AuthMsg_CreateVestingAccount","parameters":[{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/account_info/{address}":{"get":{"tags":["Query"],"summary":"AccountInfo queries account info which is common to all account types.","operationId":"AuthQuery_AccountInfo","parameters":[{"type":"string","description":"address is the account address string.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Accounts returns all the existing accounts.","operationId":"AuthQuery_Accounts","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account details based on address.","operationId":"AuthQuery_Account","parameters":[{"type":"string","description":"address defines the address to query for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/address_by_id/{id}":{"get":{"tags":["Query"],"summary":"AccountAddressByID returns account address based on account number.","operationId":"AuthQuery_AccountAddressByID","parameters":[{"type":"string","format":"int64","description":"Deprecated, use account_id instead\n\nid is the account number of the address to be queried. This field\nshould have been an uint64 (like all account numbers), and will be\nupdated to uint64 in a future version of the auth query.","name":"id","in":"path","required":true},{"type":"string","format":"uint64","description":"account_id is the account number of the address to be queried.","name":"account_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryAccountAddressByIDResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32":{"get":{"tags":["Query"],"summary":"Bech32Prefix queries bech32Prefix","operationId":"AuthQuery_Bech32Prefix","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.Bech32PrefixResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_bytes}":{"get":{"tags":["Query"],"summary":"AddressBytesToString converts Account Address bytes to string","operationId":"AuthQuery_AddressBytesToString","parameters":[{"type":"string","format":"byte","name":"address_bytes","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressBytesToStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/bech32/{address_string}":{"get":{"tags":["Query"],"summary":"AddressStringToBytes converts Address string to bytes","operationId":"AuthQuery_AddressStringToBytes","parameters":[{"type":"string","name":"address_string","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.AddressStringToBytesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts":{"get":{"tags":["Query"],"summary":"ModuleAccounts returns all the existing module accounts.","operationId":"AuthQuery_ModuleAccounts","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/module_accounts/{name}":{"get":{"tags":["Query"],"summary":"ModuleAccountByName returns the module account info by module name","operationId":"AuthQuery_ModuleAccountByName","parameters":[{"type":"string","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryModuleAccountByNameResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/auth/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters.","operationId":"AuthQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.auth.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants":{"get":{"tags":["Query"],"summary":"Returns list of `Authorization`, granted to the grantee by the granter.","operationId":"AuthQuery_Grants","parameters":[{"type":"string","name":"granter","in":"query"},{"type":"string","name":"grantee","in":"query"},{"type":"string","description":"Optional, msg_type_url, when set, will query only grants matching given msg type.","name":"msg_type_url","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/grantee/{grantee}":{"get":{"tags":["Query"],"summary":"GranteeGrants returns a list of `GrantAuthorization` by grantee.","operationId":"AuthQuery_GranteeGrants","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranteeGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/authz/v1beta1/grants/granter/{granter}":{"get":{"tags":["Query"],"summary":"GranterGrants returns list of `GrantAuthorization`, granted by granter.","operationId":"AuthQuery_GranterGrants","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.authz.v1beta1.QueryGranterGrantsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"AllBalances queries the balance of all coins for a single account.","operationId":"AuthQuery_AllBalances","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"type":"boolean","description":"resolve_denom is the flag to resolve the denom into a human-readable form from the metadata.","name":"resolve_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryAllBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/balances/{address}/by_denom":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a single coin for a single account.","operationId":"AuthQuery_Balance","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners/{denom}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DenomOwners queries for all account addresses that own a particular token\ndenomination.","operationId":"AuthQuery_DenomOwners","parameters":[{"pattern":".+","type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denom_owners_by_query":{"get":{"tags":["Query"],"summary":"DenomOwnersByQuery queries for all account addresses that own a particular token\ndenomination.","operationId":"AuthQuery_DenomOwnersByQuery","parameters":[{"type":"string","description":"denom defines the coin denomination to query all account holders for.","name":"denom","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata":{"get":{"tags":["Query"],"summary":"DenomsMetadata queries the client metadata for all registered coin\ndenominations.","operationId":"AuthQuery_DenomsMetadata","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomsMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata/{denom}":{"get":{"tags":["Query"],"summary":"DenomMetadata queries the client metadata of a given coin denomination.","operationId":"AuthQuery_DenomMetadata","parameters":[{"pattern":".+","type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/denoms_metadata_by_query_string":{"get":{"tags":["Query"],"summary":"DenomMetadataByQueryString queries the client metadata of a given coin denomination.","operationId":"AuthQuery_DenomMetadataByQueryString","parameters":[{"type":"string","description":"denom is the coin denom to query the metadata for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/bank module.","operationId":"AuthQuery_ParamsMixin133","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/send_enabled":{"get":{"description":"This query only returns denominations that have specific SendEnabled settings.\nAny denomination that does not have a specific setting will use the default\nparams.default_send_enabled, and will not be returned by this query.","tags":["Query"],"summary":"SendEnabled queries for SendEnabled entries.","operationId":"AuthQuery_SendEnabled","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"denoms is the specific denoms you want look up. Leave empty to get all entries.","name":"denoms","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySendEnabledResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SpendableBalances queries the spendable balance of all coins for a single\naccount.","operationId":"AuthQuery_SpendableBalances","parameters":[{"type":"string","description":"address is the address to query spendable balances for.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SpendableBalanceByDenom queries the spendable balance of a single denom for\na single account.","operationId":"AuthQuery_SpendableBalanceByDenom","parameters":[{"type":"string","description":"address is the address to query balances for.","name":"address","in":"path","required":true},{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"TotalSupply queries the total supply of all coins.","operationId":"AuthQuery_TotalSupply","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QueryTotalSupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/bank/v1beta1/supply/by_denom":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"SupplyOf queries the supply of a single coin.","operationId":"AuthQuery_SupplyOf","parameters":[{"type":"string","description":"denom is the coin denom to query balances for.","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.bank.v1beta1.QuerySupplyOfResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/config":{"get":{"tags":["Service"],"summary":"Config queries for the operator configuration.","operationId":"AuthService_Config","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.ConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/node/v1beta1/status":{"get":{"tags":["Service"],"summary":"Status queries for the node status.","operationId":"AuthService_Status","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.node.v1beta1.StatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/authn":{"get":{"tags":["ReflectionService"],"summary":"GetAuthnDescriptor returns information on how to authenticate transactions in the application\nNOTE: this RPC is still experimental and might be subject to breaking changes or removal in\nfuture releases of the cosmos-sdk.","operationId":"AuthReflectionService_GetAuthnDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/chain":{"get":{"tags":["ReflectionService"],"summary":"GetChainDescriptor returns the description of the chain","operationId":"AuthReflectionService_GetChainDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/codec":{"get":{"tags":["ReflectionService"],"summary":"GetCodecDescriptor returns the descriptor of the codec of the application","operationId":"AuthReflectionService_GetCodecDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/configuration":{"get":{"tags":["ReflectionService"],"summary":"GetConfigurationDescriptor returns the descriptor for the sdk.Config of the application","operationId":"AuthReflectionService_GetConfigurationDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/query_services":{"get":{"tags":["ReflectionService"],"summary":"GetQueryServicesDescriptor returns the available gRPC queryable services of the application","operationId":"AuthReflectionService_GetQueryServicesDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/app_descriptor/tx_descriptor":{"get":{"tags":["ReflectionService"],"summary":"GetTxDescriptor returns information on the used transaction object and available msgs that can be used","operationId":"AuthReflectionService_GetTxDescriptor","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces":{"get":{"tags":["ReflectionService"],"summary":"ListAllInterfaces lists all the interfaces registered in the interface\nregistry.","operationId":"AuthReflectionService_ListAllInterfaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListAllInterfacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/reflection/v1beta1/interfaces/{interface_name}/implementations":{"get":{"tags":["ReflectionService"],"summary":"ListImplementations list all the concrete types that implement a given\ninterface.","operationId":"AuthReflectionService_ListImplementations","parameters":[{"type":"string","description":"interface_name defines the interface to query the implementations for.","name":"interface_name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.reflection.v1beta1.ListImplementationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/abci_query":{"get":{"tags":["Service"],"summary":"ABCIQuery defines a query handler that supports ABCI queries directly to the\napplication, bypassing Tendermint completely. The ABCI query must contain\na valid and supported path, including app, custom, p2p, and store.","operationId":"AuthService_ABCIQuery","parameters":[{"type":"string","format":"byte","name":"data","in":"query"},{"type":"string","name":"path","in":"query"},{"type":"string","format":"int64","name":"height","in":"query"},{"type":"boolean","name":"prove","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ABCIQueryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/latest":{"get":{"tags":["Service"],"summary":"GetLatestBlock returns the latest block.","operationId":"AuthService_GetLatestBlock","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/blocks/{height}":{"get":{"tags":["Service"],"summary":"GetBlockByHeight queries block for given height.","operationId":"AuthService_GetBlockByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/node_info":{"get":{"tags":["Service"],"summary":"GetNodeInfo queries the current node info.","operationId":"AuthService_GetNodeInfo","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetNodeInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/syncing":{"get":{"tags":["Service"],"summary":"GetSyncing queries node syncing.","operationId":"AuthService_GetSyncing","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetSyncingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/latest":{"get":{"tags":["Service"],"summary":"GetLatestValidatorSet queries latest validator-set.","operationId":"AuthService_GetLatestValidatorSet","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/base/tendermint/v1beta1/validatorsets/{height}":{"get":{"tags":["Service"],"summary":"GetValidatorSetByHeight queries validator-set at a given height.","operationId":"AuthService_GetValidatorSetByHeight","parameters":[{"type":"string","format":"int64","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"AuthQuery_AccountsMixin145","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/accounts/{address}":{"get":{"tags":["Query"],"summary":"Account returns account permissions.","operationId":"AuthQuery_AccountMixin145","parameters":[{"type":"string","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.AccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/circuit/v1/disable_list":{"get":{"tags":["Query"],"summary":"DisabledList returns a list of disabled message urls","operationId":"AuthQuery_DisabledList","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.circuit.v1.DisabledListResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/consensus/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/consensus module.","operationId":"AuthQuery_ParamsMixin148","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.consensus.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/community_pool":{"get":{"description":"WARNING: This query will fail if an external community pool is used.","tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"AuthQuery_CommunityPool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards":{"get":{"tags":["Query"],"summary":"DelegationTotalRewards queries the total rewards accrued by each\nvalidator.","operationId":"AuthQuery_DelegationTotalRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/{validator_address}":{"get":{"tags":["Query"],"summary":"DelegationRewards queries the total rewards accrued by a delegation.","operationId":"AuthQuery_DelegationRewards","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true},{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegationRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/validators":{"get":{"tags":["Query"],"summary":"DelegatorValidators queries the validators of a delegator.","operationId":"AuthQuery_DelegatorValidators","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/delegators/{delegator_address}/withdraw_address":{"get":{"tags":["Query"],"summary":"DelegatorWithdrawAddress queries withdraw address of a delegator.","operationId":"AuthQuery_DelegatorWithdrawAddress","parameters":[{"type":"string","description":"delegator_address defines the delegator address to query for.","name":"delegator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries params of the distribution module.","operationId":"AuthQuery_ParamsMixin163","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}":{"get":{"tags":["Query"],"summary":"ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator","operationId":"AuthQuery_ValidatorDistributionInfo","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/commission":{"get":{"tags":["Query"],"summary":"ValidatorCommission queries accumulated commission for a validator.","operationId":"AuthQuery_ValidatorCommission","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorCommissionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/outstanding_rewards":{"get":{"tags":["Query"],"summary":"ValidatorOutstandingRewards queries rewards of a validator address.","operationId":"AuthQuery_ValidatorOutstandingRewards","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/distribution/v1beta1/validators/{validator_address}/slashes":{"get":{"tags":["Query"],"summary":"ValidatorSlashes queries slash events of a validator.","operationId":"AuthQuery_ValidatorSlashes","parameters":[{"type":"string","description":"validator_address defines the validator address to query for.","name":"validator_address","in":"path","required":true},{"type":"string","format":"uint64","description":"starting_height defines the optional starting height to query the slashes.","name":"starting_height","in":"query"},{"type":"string","format":"uint64","description":"starting_height defines the optional ending height to query the slashes.","name":"ending_height","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.distribution.v1beta1.QueryValidatorSlashesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/epochs/v1beta1/current_epoch":{"get":{"tags":["Query"],"summary":"CurrentEpoch provide current epoch of specified identifier","operationId":"AuthQuery_CurrentEpoch","parameters":[{"type":"string","name":"identifier","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.epochs.v1beta1.QueryCurrentEpochResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/epochs/v1beta1/epochs":{"get":{"tags":["Query"],"summary":"EpochInfos provide running epochInfos","operationId":"AuthQuery_EpochInfos","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.epochs.v1beta1.QueryEpochInfosResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence":{"get":{"tags":["Query"],"summary":"AllEvidence queries all evidence.","operationId":"AuthQuery_AllEvidence","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryAllEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evidence/v1beta1/evidence/{hash}":{"get":{"tags":["Query"],"summary":"Evidence queries evidence based on evidence hash.","operationId":"AuthQuery_Evidence","parameters":[{"type":"string","description":"hash defines the evidence hash of the requested evidence.","name":"hash","in":"path","required":true},{"type":"string","format":"byte","description":"evidence_hash defines the hash of the requested evidence.\nDeprecated: Use hash, a HEX encoded string, instead.","name":"evidence_hash","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evidence.v1beta1.QueryEvidenceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/erc20/v1/params":{"get":{"tags":["Query"],"summary":"Params retrieves the erc20 module params","operationId":"Erc20Query_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/erc20/v1/token_pairs":{"get":{"tags":["Query"],"summary":"TokenPairs retrieves registered token pairs (mappings)x","operationId":"Erc20Query_TokenPairs","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.QueryTokenPairsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/erc20/v1/token_pairs/{token}":{"get":{"tags":["Query"],"summary":"TokenPair retrieves a registered token pair (mapping)","operationId":"Erc20Query_TokenPair","parameters":[{"pattern":".+","type":"string","description":"token identifier can be either the hex contract address of the ERC20 or the\nCosmos base denomination","name":"token","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.QueryTokenPairResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/erc20/v1/tx/convert_coin":{"get":{"tags":["Msg"],"summary":"ConvertCoin mints a ERC20 token representation of the native Cosmos coin\nthat is registered on the token mapping.","operationId":"Erc20Msg_ConvertCoin","parameters":[{"type":"string","name":"coin.denom","in":"query"},{"type":"string","name":"coin.amount","in":"query"},{"type":"string","description":"receiver is the hex address to receive ERC20 token","name":"receiver","in":"query"},{"type":"string","description":"sender is the cosmos bech32 address from the owner of the given Cosmos\ncoins","name":"sender","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.MsgConvertCoinResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/erc20/v1/tx/convert_erc20":{"get":{"tags":["Msg"],"summary":"ConvertERC20 mints a native Cosmos coin representation of the ERC20 token\ncontract that is registered on the token mapping.","operationId":"Erc20Msg_ConvertERC20","parameters":[{"type":"string","description":"contract_address of an ERC20 token contract, that is registered in a token\npair","name":"contract_address","in":"query"},{"type":"string","description":"amount of ERC20 tokens to convert","name":"amount","in":"query"},{"type":"string","description":"receiver is the bech32 address to receive native Cosmos coins","name":"receiver","in":"query"},{"type":"string","description":"sender is the hex address from the owner of the given ERC20 tokens","name":"sender","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.erc20.v1.MsgConvertERC20Response"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/feemarket/v1/base_fee":{"get":{"tags":["Query"],"summary":"BaseFee queries the base fee of the parent block of the current block.","operationId":"Erc20Query_BaseFee","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.feemarket.v1.QueryBaseFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/feemarket/v1/block_gas":{"get":{"tags":["Query"],"summary":"BlockGas queries the gas used at a given block height","operationId":"Erc20Query_BlockGas","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.feemarket.v1.QueryBlockGasResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/feemarket/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/feemarket module.","operationId":"Erc20Query_ParamsMixin299","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.feemarket.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/precisebank/v1/fractional_balance/{address}":{"get":{"tags":["Query"],"summary":"FractionalBalance returns only the fractional balance of an address. This\ndoes not include any integer balance.","operationId":"Erc20Query_FractionalBalance","parameters":[{"type":"string","description":"address is the account address to query fractional balance for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.precisebank.v1.QueryFractionalBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/precisebank/v1/remainder":{"get":{"tags":["Query"],"summary":"Remainder returns the amount backed by the reserve, but not yet owned by\nany account, i.e. not in circulation.","operationId":"Erc20Query_Remainder","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.precisebank.v1.QueryRemainderResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/account/{address}":{"get":{"tags":["Query"],"summary":"Account queries an Ethereum account.","operationId":"Erc20Query_Account","parameters":[{"type":"string","description":"address is the ethereum hex address to query the account for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/balances/{address}":{"get":{"tags":["Query"],"summary":"Balance queries the balance of a the EVM denomination for a single\naccount.","operationId":"Erc20Query_Balance","parameters":[{"type":"string","description":"address is the ethereum hex address to query the balance for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/base_fee":{"get":{"tags":["Query"],"summary":"BaseFee queries the base fee of the parent block of the current block,\nit's similar to feemarket module's method, but also checks london hardfork\nstatus.","operationId":"Erc20Query_BaseFeeMixin307","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryBaseFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/codes/{address}":{"get":{"tags":["Query"],"summary":"Code queries the balance of all coins for a single account.","operationId":"Erc20Query_Code","parameters":[{"type":"string","description":"address is the ethereum hex address to query the code for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/config":{"get":{"tags":["Query"],"summary":"Config queries the EVM configuration","operationId":"Erc20Query_Config","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/cosmos_account/{address}":{"get":{"tags":["Query"],"summary":"CosmosAccount queries an Ethereum account's Cosmos Address.","operationId":"Erc20Query_CosmosAccount","parameters":[{"type":"string","description":"address is the ethereum hex address to query the account for.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryCosmosAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/estimate_gas":{"get":{"tags":["Query"],"summary":"EstimateGas implements the `eth_estimateGas` rpc api","operationId":"Erc20Query_EstimateGas","parameters":[{"type":"string","format":"byte","description":"args uses the same json format as the json rpc api.","name":"args","in":"query"},{"type":"string","format":"uint64","description":"gas_cap defines the default gas cap to be used","name":"gas_cap","in":"query"},{"type":"string","format":"byte","description":"proposer_address of the requested block in hex format","name":"proposer_address","in":"query"},{"type":"string","format":"int64","description":"chain_id is the eip155 chain id parsed from the requested block header","name":"chain_id","in":"query"},{"type":"string","format":"byte","description":"state overrides encoded as json","name":"overrides","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.EstimateGasResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/eth_call":{"get":{"tags":["Query"],"summary":"EthCall implements the `eth_call` rpc api","operationId":"Erc20Query_EthCall","parameters":[{"type":"string","format":"byte","description":"args uses the same json format as the json rpc api.","name":"args","in":"query"},{"type":"string","format":"uint64","description":"gas_cap defines the default gas cap to be used","name":"gas_cap","in":"query"},{"type":"string","format":"byte","description":"proposer_address of the requested block in hex format","name":"proposer_address","in":"query"},{"type":"string","format":"int64","description":"chain_id is the eip155 chain id parsed from the requested block header","name":"chain_id","in":"query"},{"type":"string","format":"byte","description":"state overrides encoded as json","name":"overrides","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgEthereumTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/ethereum_tx":{"post":{"tags":["Msg"],"summary":"EthereumTx defines a method submitting Ethereum transactions.","operationId":"Erc20Msg_EthereumTx","parameters":[{"type":"string","format":"byte","description":"from is the bytes of ethereum signer address. This address value is checked\nagainst the address derived from the signature (V, R, S) using the\nsecp256k1 elliptic curve","name":"from","in":"query"},{"type":"string","format":"byte","description":"raw is the raw ethereum transaction","name":"raw","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.MsgEthereumTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/min_gas_price":{"get":{"tags":["Query"],"summary":"GlobalMinGasPrice queries the MinGasPrice\nit's similar to feemarket module's method,\nbut makes the conversion to 18 decimals\nwhen the evm denom is represented with a different precision.","operationId":"Erc20Query_GlobalMinGasPrice","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryGlobalMinGasPriceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of x/vm module.","operationId":"Erc20Query_ParamsMixin307","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/storage/{address}/{key}":{"get":{"tags":["Query"],"summary":"Storage queries the balance of all coins for a single account.","operationId":"Erc20Query_Storage","parameters":[{"type":"string","description":"address is the ethereum hex address to query the storage state for.","name":"address","in":"path","required":true},{"type":"string","description":"key defines the key of the storage state","name":"key","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryStorageResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/trace_block":{"get":{"tags":["Query"],"summary":"TraceBlock implements the `debug_traceBlockByNumber` and\n`debug_traceBlockByHash` rpc api","operationId":"Erc20Query_TraceBlock","parameters":[{"type":"string","description":"tracer is a custom javascript tracer","name":"trace_config.tracer","in":"query"},{"type":"string","description":"timeout overrides the default timeout of 5 seconds for JavaScript-based\ntracing calls","name":"trace_config.timeout","in":"query"},{"type":"string","format":"uint64","description":"reexec defines the number of blocks the tracer is willing to go back","name":"trace_config.reexec","in":"query"},{"type":"boolean","description":"disable_stack switches stack capture","name":"trace_config.disable_stack","in":"query"},{"type":"boolean","description":"disable_storage switches storage capture","name":"trace_config.disable_storage","in":"query"},{"type":"boolean","description":"debug can be used to print output during capture end","name":"trace_config.debug","in":"query"},{"type":"integer","format":"int32","description":"limit defines the maximum length of output, but zero means unlimited","name":"trace_config.limit","in":"query"},{"type":"string","description":"homestead_block switch (nil no fork, 0 = already homestead)","name":"trace_config.overrides.homestead_block","in":"query"},{"type":"string","description":"dao_fork_block corresponds to TheDAO hard-fork switch block (nil no fork)","name":"trace_config.overrides.dao_fork_block","in":"query"},{"type":"boolean","description":"dao_fork_support defines whether the nodes supports or opposes the DAO\nhard-fork","name":"trace_config.overrides.dao_fork_support","in":"query"},{"type":"string","description":"eip150_block: EIP150 implements the Gas price changes\n(https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork)","name":"trace_config.overrides.eip150_block","in":"query"},{"type":"string","description":"eip155_block: EIP155Block HF block","name":"trace_config.overrides.eip155_block","in":"query"},{"type":"string","description":"eip158_block: EIP158 HF block","name":"trace_config.overrides.eip158_block","in":"query"},{"type":"string","description":"byzantium_block: Byzantium switch block (nil no fork, 0 = already on\nbyzantium)","name":"trace_config.overrides.byzantium_block","in":"query"},{"type":"string","description":"constantinople_block: Constantinople switch block (nil no fork, 0 = already\nactivated)","name":"trace_config.overrides.constantinople_block","in":"query"},{"type":"string","description":"petersburg_block: Petersburg switch block (nil same as Constantinople)","name":"trace_config.overrides.petersburg_block","in":"query"},{"type":"string","description":"istanbul_block: Istanbul switch block (nil no fork, 0 = already on\nistanbul)","name":"trace_config.overrides.istanbul_block","in":"query"},{"type":"string","description":"muir_glacier_block: Eip-2384 (bomb delay) switch block (nil no fork, 0 =\nalready activated)","name":"trace_config.overrides.muir_glacier_block","in":"query"},{"type":"string","description":"berlin_block: Berlin switch block (nil = no fork, 0 = already on berlin)","name":"trace_config.overrides.berlin_block","in":"query"},{"type":"string","description":"london_block: London switch block (nil = no fork, 0 = already on london)","name":"trace_config.overrides.london_block","in":"query"},{"type":"string","description":"arrow_glacier_block: Eip-4345 (bomb delay) switch block (nil = no fork, 0 =\nalready activated)","name":"trace_config.overrides.arrow_glacier_block","in":"query"},{"type":"string","description":"gray_glacier_block: EIP-5133 (bomb delay) switch block (nil = no fork, 0 =\nalready activated)","name":"trace_config.overrides.gray_glacier_block","in":"query"},{"type":"string","description":"merge_netsplit_block: Virtual fork after The Merge to use as a network\nsplitter","name":"trace_config.overrides.merge_netsplit_block","in":"query"},{"type":"string","format":"uint64","description":"chain_id is the id of the chain (EIP-155)","name":"trace_config.overrides.chain_id","in":"query"},{"type":"string","description":"denom is the denomination used on the EVM","name":"trace_config.overrides.denom","in":"query"},{"type":"string","format":"uint64","description":"decimals is the real decimal precision of the denomination used on the EVM","name":"trace_config.overrides.decimals","in":"query"},{"type":"string","description":"shanghai_time: Shanghai switch time (nil = no fork, 0 = already on\nshanghai)","name":"trace_config.overrides.shanghai_time","in":"query"},{"type":"string","description":"cancun_time: Cancun switch time (nil = no fork, 0 = already on cancun)","name":"trace_config.overrides.cancun_time","in":"query"},{"type":"string","description":"prague_time: Prague switch time (nil = no fork, 0 = already on prague)","name":"trace_config.overrides.prague_time","in":"query"},{"type":"string","description":"verkle_time: Verkle switch time (nil = no fork, 0 = already on verkle)","name":"trace_config.overrides.verkle_time","in":"query"},{"type":"string","description":"osaka_time: Osaka switch time (nil = no fork, 0 = already on osaka)","name":"trace_config.overrides.osaka_time","in":"query"},{"type":"boolean","description":"enable_memory switches memory capture","name":"trace_config.enable_memory","in":"query"},{"type":"boolean","description":"enable_return_data switches the capture of return data","name":"trace_config.enable_return_data","in":"query"},{"type":"string","description":"tracer_json_config configures the tracer using a JSON string","name":"trace_config.tracer_json_config","in":"query"},{"type":"string","format":"int64","description":"block_number of the traced block","name":"block_number","in":"query"},{"type":"string","description":"block_hash (hex) of the traced block","name":"block_hash","in":"query"},{"type":"string","format":"date-time","description":"block_time of the traced block","name":"block_time","in":"query"},{"type":"string","format":"byte","description":"proposer_address is the address of the requested block","name":"proposer_address","in":"query"},{"type":"string","format":"int64","description":"chain_id is the eip155 chain id parsed from the requested block header","name":"chain_id","in":"query"},{"type":"string","format":"int64","description":"block_max_gas of the traced block","name":"block_max_gas","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryTraceBlockResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/trace_call":{"get":{"tags":["Query"],"summary":"TraceCall implements the `debug_traceCall` rpc api","operationId":"Erc20Query_TraceCall","parameters":[{"type":"string","format":"byte","description":"args uses the same json format as the json rpc api.","name":"args","in":"query"},{"type":"string","format":"uint64","description":"gas_cap defines the default gas cap to be used","name":"gas_cap","in":"query"},{"type":"string","format":"byte","description":"proposer_address of the requested block in hex format","name":"proposer_address","in":"query"},{"type":"string","description":"tracer is a custom javascript tracer","name":"trace_config.tracer","in":"query"},{"type":"string","description":"timeout overrides the default timeout of 5 seconds for JavaScript-based\ntracing calls","name":"trace_config.timeout","in":"query"},{"type":"string","format":"uint64","description":"reexec defines the number of blocks the tracer is willing to go back","name":"trace_config.reexec","in":"query"},{"type":"boolean","description":"disable_stack switches stack capture","name":"trace_config.disable_stack","in":"query"},{"type":"boolean","description":"disable_storage switches storage capture","name":"trace_config.disable_storage","in":"query"},{"type":"boolean","description":"debug can be used to print output during capture end","name":"trace_config.debug","in":"query"},{"type":"integer","format":"int32","description":"limit defines the maximum length of output, but zero means unlimited","name":"trace_config.limit","in":"query"},{"type":"string","description":"homestead_block switch (nil no fork, 0 = already homestead)","name":"trace_config.overrides.homestead_block","in":"query"},{"type":"string","description":"dao_fork_block corresponds to TheDAO hard-fork switch block (nil no fork)","name":"trace_config.overrides.dao_fork_block","in":"query"},{"type":"boolean","description":"dao_fork_support defines whether the nodes supports or opposes the DAO\nhard-fork","name":"trace_config.overrides.dao_fork_support","in":"query"},{"type":"string","description":"eip150_block: EIP150 implements the Gas price changes\n(https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork)","name":"trace_config.overrides.eip150_block","in":"query"},{"type":"string","description":"eip155_block: EIP155Block HF block","name":"trace_config.overrides.eip155_block","in":"query"},{"type":"string","description":"eip158_block: EIP158 HF block","name":"trace_config.overrides.eip158_block","in":"query"},{"type":"string","description":"byzantium_block: Byzantium switch block (nil no fork, 0 = already on\nbyzantium)","name":"trace_config.overrides.byzantium_block","in":"query"},{"type":"string","description":"constantinople_block: Constantinople switch block (nil no fork, 0 = already\nactivated)","name":"trace_config.overrides.constantinople_block","in":"query"},{"type":"string","description":"petersburg_block: Petersburg switch block (nil same as Constantinople)","name":"trace_config.overrides.petersburg_block","in":"query"},{"type":"string","description":"istanbul_block: Istanbul switch block (nil no fork, 0 = already on\nistanbul)","name":"trace_config.overrides.istanbul_block","in":"query"},{"type":"string","description":"muir_glacier_block: Eip-2384 (bomb delay) switch block (nil no fork, 0 =\nalready activated)","name":"trace_config.overrides.muir_glacier_block","in":"query"},{"type":"string","description":"berlin_block: Berlin switch block (nil = no fork, 0 = already on berlin)","name":"trace_config.overrides.berlin_block","in":"query"},{"type":"string","description":"london_block: London switch block (nil = no fork, 0 = already on london)","name":"trace_config.overrides.london_block","in":"query"},{"type":"string","description":"arrow_glacier_block: Eip-4345 (bomb delay) switch block (nil = no fork, 0 =\nalready activated)","name":"trace_config.overrides.arrow_glacier_block","in":"query"},{"type":"string","description":"gray_glacier_block: EIP-5133 (bomb delay) switch block (nil = no fork, 0 =\nalready activated)","name":"trace_config.overrides.gray_glacier_block","in":"query"},{"type":"string","description":"merge_netsplit_block: Virtual fork after The Merge to use as a network\nsplitter","name":"trace_config.overrides.merge_netsplit_block","in":"query"},{"type":"string","format":"uint64","description":"chain_id is the id of the chain (EIP-155)","name":"trace_config.overrides.chain_id","in":"query"},{"type":"string","description":"denom is the denomination used on the EVM","name":"trace_config.overrides.denom","in":"query"},{"type":"string","format":"uint64","description":"decimals is the real decimal precision of the denomination used on the EVM","name":"trace_config.overrides.decimals","in":"query"},{"type":"string","description":"shanghai_time: Shanghai switch time (nil = no fork, 0 = already on\nshanghai)","name":"trace_config.overrides.shanghai_time","in":"query"},{"type":"string","description":"cancun_time: Cancun switch time (nil = no fork, 0 = already on cancun)","name":"trace_config.overrides.cancun_time","in":"query"},{"type":"string","description":"prague_time: Prague switch time (nil = no fork, 0 = already on prague)","name":"trace_config.overrides.prague_time","in":"query"},{"type":"string","description":"verkle_time: Verkle switch time (nil = no fork, 0 = already on verkle)","name":"trace_config.overrides.verkle_time","in":"query"},{"type":"string","description":"osaka_time: Osaka switch time (nil = no fork, 0 = already on osaka)","name":"trace_config.overrides.osaka_time","in":"query"},{"type":"boolean","description":"enable_memory switches memory capture","name":"trace_config.enable_memory","in":"query"},{"type":"boolean","description":"enable_return_data switches the capture of return data","name":"trace_config.enable_return_data","in":"query"},{"type":"string","description":"tracer_json_config configures the tracer using a JSON string","name":"trace_config.tracer_json_config","in":"query"},{"type":"string","format":"int64","description":"block_number of requested transaction","name":"block_number","in":"query"},{"type":"string","description":"block_hash of requested transaction","name":"block_hash","in":"query"},{"type":"string","format":"date-time","description":"block_time of requested transaction","name":"block_time","in":"query"},{"type":"string","format":"int64","description":"chain_id is the the eip155 chain id parsed from the requested block header","name":"chain_id","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryTraceCallResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/trace_tx":{"get":{"tags":["Query"],"summary":"TraceTx implements the `debug_traceTransaction` rpc api","operationId":"Erc20Query_TraceTx","parameters":[{"type":"string","format":"byte","description":"from is the bytes of ethereum signer address. This address value is checked\nagainst the address derived from the signature (V, R, S) using the\nsecp256k1 elliptic curve","name":"msg.from","in":"query"},{"type":"string","format":"byte","description":"raw is the raw ethereum transaction","name":"msg.raw","in":"query"},{"type":"string","description":"tracer is a custom javascript tracer","name":"trace_config.tracer","in":"query"},{"type":"string","description":"timeout overrides the default timeout of 5 seconds for JavaScript-based\ntracing calls","name":"trace_config.timeout","in":"query"},{"type":"string","format":"uint64","description":"reexec defines the number of blocks the tracer is willing to go back","name":"trace_config.reexec","in":"query"},{"type":"boolean","description":"disable_stack switches stack capture","name":"trace_config.disable_stack","in":"query"},{"type":"boolean","description":"disable_storage switches storage capture","name":"trace_config.disable_storage","in":"query"},{"type":"boolean","description":"debug can be used to print output during capture end","name":"trace_config.debug","in":"query"},{"type":"integer","format":"int32","description":"limit defines the maximum length of output, but zero means unlimited","name":"trace_config.limit","in":"query"},{"type":"string","description":"homestead_block switch (nil no fork, 0 = already homestead)","name":"trace_config.overrides.homestead_block","in":"query"},{"type":"string","description":"dao_fork_block corresponds to TheDAO hard-fork switch block (nil no fork)","name":"trace_config.overrides.dao_fork_block","in":"query"},{"type":"boolean","description":"dao_fork_support defines whether the nodes supports or opposes the DAO\nhard-fork","name":"trace_config.overrides.dao_fork_support","in":"query"},{"type":"string","description":"eip150_block: EIP150 implements the Gas price changes\n(https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork)","name":"trace_config.overrides.eip150_block","in":"query"},{"type":"string","description":"eip155_block: EIP155Block HF block","name":"trace_config.overrides.eip155_block","in":"query"},{"type":"string","description":"eip158_block: EIP158 HF block","name":"trace_config.overrides.eip158_block","in":"query"},{"type":"string","description":"byzantium_block: Byzantium switch block (nil no fork, 0 = already on\nbyzantium)","name":"trace_config.overrides.byzantium_block","in":"query"},{"type":"string","description":"constantinople_block: Constantinople switch block (nil no fork, 0 = already\nactivated)","name":"trace_config.overrides.constantinople_block","in":"query"},{"type":"string","description":"petersburg_block: Petersburg switch block (nil same as Constantinople)","name":"trace_config.overrides.petersburg_block","in":"query"},{"type":"string","description":"istanbul_block: Istanbul switch block (nil no fork, 0 = already on\nistanbul)","name":"trace_config.overrides.istanbul_block","in":"query"},{"type":"string","description":"muir_glacier_block: Eip-2384 (bomb delay) switch block (nil no fork, 0 =\nalready activated)","name":"trace_config.overrides.muir_glacier_block","in":"query"},{"type":"string","description":"berlin_block: Berlin switch block (nil = no fork, 0 = already on berlin)","name":"trace_config.overrides.berlin_block","in":"query"},{"type":"string","description":"london_block: London switch block (nil = no fork, 0 = already on london)","name":"trace_config.overrides.london_block","in":"query"},{"type":"string","description":"arrow_glacier_block: Eip-4345 (bomb delay) switch block (nil = no fork, 0 =\nalready activated)","name":"trace_config.overrides.arrow_glacier_block","in":"query"},{"type":"string","description":"gray_glacier_block: EIP-5133 (bomb delay) switch block (nil = no fork, 0 =\nalready activated)","name":"trace_config.overrides.gray_glacier_block","in":"query"},{"type":"string","description":"merge_netsplit_block: Virtual fork after The Merge to use as a network\nsplitter","name":"trace_config.overrides.merge_netsplit_block","in":"query"},{"type":"string","format":"uint64","description":"chain_id is the id of the chain (EIP-155)","name":"trace_config.overrides.chain_id","in":"query"},{"type":"string","description":"denom is the denomination used on the EVM","name":"trace_config.overrides.denom","in":"query"},{"type":"string","format":"uint64","description":"decimals is the real decimal precision of the denomination used on the EVM","name":"trace_config.overrides.decimals","in":"query"},{"type":"string","description":"shanghai_time: Shanghai switch time (nil = no fork, 0 = already on\nshanghai)","name":"trace_config.overrides.shanghai_time","in":"query"},{"type":"string","description":"cancun_time: Cancun switch time (nil = no fork, 0 = already on cancun)","name":"trace_config.overrides.cancun_time","in":"query"},{"type":"string","description":"prague_time: Prague switch time (nil = no fork, 0 = already on prague)","name":"trace_config.overrides.prague_time","in":"query"},{"type":"string","description":"verkle_time: Verkle switch time (nil = no fork, 0 = already on verkle)","name":"trace_config.overrides.verkle_time","in":"query"},{"type":"string","description":"osaka_time: Osaka switch time (nil = no fork, 0 = already on osaka)","name":"trace_config.overrides.osaka_time","in":"query"},{"type":"boolean","description":"enable_memory switches memory capture","name":"trace_config.enable_memory","in":"query"},{"type":"boolean","description":"enable_return_data switches the capture of return data","name":"trace_config.enable_return_data","in":"query"},{"type":"string","description":"tracer_json_config configures the tracer using a JSON string","name":"trace_config.tracer_json_config","in":"query"},{"type":"string","format":"int64","description":"block_number of requested transaction","name":"block_number","in":"query"},{"type":"string","description":"block_hash of requested transaction","name":"block_hash","in":"query"},{"type":"string","format":"date-time","description":"block_time of requested transaction","name":"block_time","in":"query"},{"type":"string","format":"byte","description":"proposer_address is the proposer of the requested block","name":"proposer_address","in":"query"},{"type":"string","format":"int64","description":"chain_id is the eip155 chain id parsed from the requested block header","name":"chain_id","in":"query"},{"type":"string","format":"int64","description":"block_max_gas of the block of the requested transaction","name":"block_max_gas","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryTraceTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/evm/vm/v1/validator_account/{cons_address}":{"get":{"tags":["Query"],"summary":"ValidatorAccount queries an Ethereum account's from a validator consensus\nAddress.","operationId":"Erc20Query_ValidatorAccount","parameters":[{"type":"string","description":"cons_address is the validator cons address to query the account for.","name":"cons_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.evm.vm.v1.QueryValidatorAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}":{"get":{"tags":["Query"],"summary":"Allowance returns granted allwance to the grantee by the granter.","operationId":"AuthQuery_Allowance","parameters":[{"type":"string","description":"granter is the address of the user granting an allowance of their funds.","name":"granter","in":"path","required":true},{"type":"string","description":"grantee is the address of the user being granted an allowance of another user's funds.","name":"grantee","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/allowances/{grantee}":{"get":{"tags":["Query"],"summary":"Allowances returns all the grants for the given grantee address.","operationId":"AuthQuery_Allowances","parameters":[{"type":"string","name":"grantee","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/feegrant/v1beta1/issued/{granter}":{"get":{"tags":["Query"],"summary":"AllowancesByGranter returns all the grants given by an address","operationId":"AuthQuery_AllowancesByGranter","parameters":[{"type":"string","name":"granter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/constitution":{"get":{"tags":["Query"],"summary":"Constitution queries the chain's constitution.","operationId":"AuthQuery_Constitution","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryConstitutionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"AuthQuery_ParamsMixin179","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"AuthQuery_Proposals","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"AuthQuery_Proposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"AuthQuery_Deposits","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositAddr.","operationId":"AuthQuery_Deposit","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"AuthQuery_TallyResult","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"AuthQuery_Votes","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"AuthQuery_Vote","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/params/{params_type}":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the gov module.","operationId":"AuthQuery_ParamsMixin183","parameters":[{"type":"string","description":"params_type defines which parameters to query for, can be one of \"voting\",\n\"tallying\" or \"deposit\".","name":"params_type","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals":{"get":{"tags":["Query"],"summary":"Proposals queries all proposals based on given status.","operationId":"AuthQuery_ProposalsMixin183","parameters":[{"enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"],"type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","description":"proposal_status defines the status of the proposals.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","name":"proposal_status","in":"query"},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"query"},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries proposal details based on ProposalID.","operationId":"AuthQuery_ProposalMixin183","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits":{"get":{"tags":["Query"],"summary":"Deposits queries all deposits of a single proposal.","operationId":"AuthQuery_DepositsMixin183","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}":{"get":{"tags":["Query"],"summary":"Deposit queries single deposit information based on proposalID, depositor address.","operationId":"AuthQuery_DepositMixin183","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"depositor defines the deposit addresses from the proposals.","name":"depositor","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryDepositResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult queries the tally of a proposal vote.","operationId":"AuthQuery_TallyResultMixin183","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes":{"get":{"tags":["Query"],"summary":"Votes queries votes of a given proposal.","operationId":"AuthQuery_VotesMixin183","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVotesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}":{"get":{"tags":["Query"],"summary":"Vote queries voted information based on proposalID, voterAddr.","operationId":"AuthQuery_VoteMixin183","parameters":[{"type":"string","format":"uint64","description":"proposal_id defines the unique id of the proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter defines the voter address for the proposals.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.gov.v1beta1.QueryVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_info/{group_id}":{"get":{"tags":["Query"],"summary":"GroupInfo queries group info based on group id.","operationId":"AuthQuery_GroupInfo","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_members/{group_id}":{"get":{"tags":["Query"],"summary":"GroupMembers queries members of a group by group id.","operationId":"AuthQuery_GroupMembers","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupMembersResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByAdmin queries group policies by admin address.","operationId":"AuthQuery_GroupPoliciesByAdmin","parameters":[{"type":"string","description":"admin is the admin address of the group policy.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policies_by_group/{group_id}":{"get":{"tags":["Query"],"summary":"GroupPoliciesByGroup queries group policies by group id.","operationId":"AuthQuery_GroupPoliciesByGroup","parameters":[{"type":"string","format":"uint64","description":"group_id is the unique ID of the group policy's group.","name":"group_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPoliciesByGroupResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/group_policy_info/{address}":{"get":{"tags":["Query"],"summary":"GroupPolicyInfo queries group policy info based on account address of group policy.","operationId":"AuthQuery_GroupPolicyInfo","parameters":[{"type":"string","description":"address is the account address of the group policy.","name":"address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupPolicyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups":{"get":{"tags":["Query"],"summary":"Groups queries all groups in state.","operationId":"AuthQuery_Groups","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_admin/{admin}":{"get":{"tags":["Query"],"summary":"GroupsByAdmin queries groups by admin address.","operationId":"AuthQuery_GroupsByAdmin","parameters":[{"type":"string","description":"admin is the account address of a group's admin.","name":"admin","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByAdminResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/groups_by_member/{address}":{"get":{"tags":["Query"],"summary":"GroupsByMember queries groups by member address.","operationId":"AuthQuery_GroupsByMember","parameters":[{"type":"string","description":"address is the group member address.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryGroupsByMemberResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"Proposal queries a proposal based on proposal id.","operationId":"AuthQuery_ProposalMixin187","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals/{proposal_id}/tally":{"get":{"tags":["Query"],"summary":"TallyResult returns the tally result of a proposal. If the proposal is\nstill in voting period, then this query computes the current tally state,\nwhich might not be final. On the other hand, if the proposal is final,\nthen it simply returns the `final_tally_result` state stored in the\nproposal itself.","operationId":"AuthQuery_TallyResultMixin187","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique id of a proposal.","name":"proposal_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryTallyResultResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/proposals_by_group_policy/{address}":{"get":{"tags":["Query"],"summary":"ProposalsByGroupPolicy queries proposals based on account address of group policy.","operationId":"AuthQuery_ProposalsByGroupPolicy","parameters":[{"type":"string","description":"address is the account address of the group policy related to proposals.","name":"address","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryProposalsByGroupPolicyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}":{"get":{"tags":["Query"],"summary":"VoteByProposalVoter queries a vote by proposal id and voter.","operationId":"AuthQuery_VoteByProposalVoter","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVoteByProposalVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_proposal/{proposal_id}":{"get":{"tags":["Query"],"summary":"VotesByProposal queries a vote by proposal id.","operationId":"AuthQuery_VotesByProposal","parameters":[{"type":"string","format":"uint64","description":"proposal_id is the unique ID of a proposal.","name":"proposal_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByProposalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/group/v1/votes_by_voter/{voter}":{"get":{"tags":["Query"],"summary":"VotesByVoter queries a vote by voter.","operationId":"AuthQuery_VotesByVoter","parameters":[{"type":"string","description":"voter is a proposal voter account address.","name":"voter","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.group.v1.QueryVotesByVoterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/annual_provisions":{"get":{"tags":["Query"],"summary":"AnnualProvisions current minting annual provisions value.","operationId":"AuthQuery_AnnualProvisions","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryAnnualProvisionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/inflation":{"get":{"tags":["Query"],"summary":"Inflation returns the current minting inflation value.","operationId":"AuthQuery_Inflation","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryInflationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/mint/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of minting parameters.","operationId":"AuthQuery_ParamsMixin192","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.mint.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/balance/{owner}/{class_id}":{"get":{"tags":["Query"],"summary":"Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721","operationId":"AuthQuery_BalanceMixin198","parameters":[{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"path","required":true},{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryBalanceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes":{"get":{"tags":["Query"],"summary":"Classes queries all NFT classes","operationId":"AuthQuery_Classes","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/classes/{class_id}":{"get":{"tags":["Query"],"summary":"Class queries an NFT class based on its id","operationId":"AuthQuery_Class","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryClassResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts":{"get":{"tags":["Query"],"summary":"NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in\nERC721Enumerable","operationId":"AuthQuery_NFTs","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"query"},{"type":"string","description":"owner is the owner address of the nft","name":"owner","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/nfts/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"NFT queries an NFT based on its class and id.","operationId":"AuthQuery_NFT","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryNFTResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/owner/{class_id}/{id}":{"get":{"tags":["Query"],"summary":"Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721","operationId":"AuthQuery_Owner","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true},{"type":"string","description":"id is a unique identifier of the NFT","name":"id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QueryOwnerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/nft/v1beta1/supply/{class_id}":{"get":{"tags":["Query"],"summary":"Supply queries the number of NFTs from the given class, same as totalSupply of ERC721.","operationId":"AuthQuery_Supply","parameters":[{"type":"string","description":"class_id associated with the nft","name":"class_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.nft.v1beta1.QuerySupplyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries a specific parameter of a module, given its subspace and\nkey.","operationId":"AuthQuery_ParamsMixin201","parameters":[{"type":"string","description":"subspace defines the module to query the parameter for.","name":"subspace","in":"query"},{"type":"string","description":"key defines the key of the parameter in the subspace.","name":"key","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/params/v1beta1/subspaces":{"get":{"tags":["Query"],"summary":"Subspaces queries for all registered subspaces and all keys for a subspace.","operationId":"AuthQuery_Subspaces","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.params.v1beta1.QuerySubspacesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/community_pool":{"get":{"tags":["Query"],"summary":"CommunityPool queries the community pool coins.","operationId":"AuthQuery_CommunityPoolMixin203","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryCommunityPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/continuous_funds":{"get":{"tags":["Query"],"summary":"ContinuousFunds queries all continuous funds in the store.","operationId":"AuthQuery_ContinuousFunds","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryContinuousFundsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/continuous_funds/{recipient}":{"get":{"tags":["Query"],"summary":"ContinuousFund queries a continuous fund by the recipient is is associated with.","operationId":"AuthQuery_ContinuousFund","parameters":[{"type":"string","description":"recipient is the recipient address to query unclaimed budget amount for.","name":"recipient","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryContinuousFundResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/protocolpool/v1/params":{"get":{"tags":["Query"],"summary":"Params returns the total set of x/protocolpool parameters.","operationId":"AuthQuery_ParamsMixin203","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.protocolpool.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params queries the parameters of slashing module","operationId":"AuthQuery_ParamsMixin208","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos":{"get":{"tags":["Query"],"summary":"SigningInfos queries signing info of all validators","operationId":"AuthQuery_SigningInfos","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfosResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/slashing/v1beta1/signing_infos/{cons_address}":{"get":{"tags":["Query"],"summary":"SigningInfo queries the signing info of given cons address","operationId":"AuthQuery_SigningInfo","parameters":[{"type":"string","description":"cons_address is the address to query signing info of","name":"cons_address","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.slashing.v1beta1.QuerySigningInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegations/{delegator_addr}":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorDelegations queries all delegations of a given delegator address.","operationId":"AuthQuery_DelegatorDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Redelegations queries redelegations of given address.","operationId":"AuthQuery_Redelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"src_validator_addr defines the validator address to redelegate from.","name":"src_validator_addr","in":"query"},{"type":"string","description":"dst_validator_addr defines the validator address to redelegate to.","name":"dst_validator_addr","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryRedelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorUnbondingDelegations queries all unbonding delegations of a given\ndelegator address.","operationId":"AuthQuery_DelegatorUnbondingDelegations","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"DelegatorValidators queries all validators info for given delegator\naddress.","operationId":"AuthQuery_DelegatorValidatorsMixin213","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"DelegatorValidator queries validator info for given delegator validator\npair.","operationId":"AuthQuery_DelegatorValidator","parameters":[{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true},{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegatorValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/historical_info/{height}":{"get":{"tags":["Query"],"summary":"HistoricalInfo queries the historical info for given height.","operationId":"AuthQuery_HistoricalInfo","parameters":[{"type":"string","format":"int64","description":"height defines at which height to query the historical info.","name":"height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryHistoricalInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/params":{"get":{"tags":["Query"],"summary":"Parameters queries the staking parameters.","operationId":"AuthQuery_ParamsMixin213","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/pool":{"get":{"tags":["Query"],"summary":"Pool queries the pool info.","operationId":"AuthQuery_Pool","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"Validators queries all validators that match the given status.","operationId":"AuthQuery_Validators","parameters":[{"type":"string","description":"status enables to query for validators matching a given status.","name":"status","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}":{"get":{"tags":["Query"],"summary":"Validator queries validator info for given validator address.","operationId":"AuthQuery_Validator","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorDelegations queries delegate info for given validator.","operationId":"AuthQuery_ValidatorDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}":{"get":{"tags":["Query"],"summary":"Delegation queries delegate info for given validator delegator pair.","operationId":"AuthQuery_Delegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/{delegator_addr}/unbonding_delegation":{"get":{"tags":["Query"],"summary":"UnbondingDelegation queries unbonding info for given validator delegator\npair.","operationId":"AuthQuery_UnbondingDelegation","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","description":"delegator_addr defines the delegator address to query for.","name":"delegator_addr","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryUnbondingDelegationResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/staking/v1beta1/validators/{validator_addr}/unbonding_delegations":{"get":{"description":"When called from another module, this query might consume a high amount of\ngas if the pagination field is incorrectly set.","tags":["Query"],"summary":"ValidatorUnbondingDelegations queries unbonding delegations of a validator.","operationId":"AuthQuery_ValidatorUnbondingDelegations","parameters":[{"type":"string","description":"validator_addr defines the validator address to query for.","name":"validator_addr","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode":{"post":{"tags":["Service"],"summary":"TxDecode decodes the transaction.","operationId":"AuthService_TxDecode","parameters":[{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/decode/amino":{"post":{"tags":["Service"],"summary":"TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON.","operationId":"AuthService_TxDecodeAmino","parameters":[{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxDecodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode":{"post":{"tags":["Service"],"summary":"TxEncode encodes the transaction.","operationId":"AuthService_TxEncode","parameters":[{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/encode/amino":{"post":{"tags":["Service"],"summary":"TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes.","operationId":"AuthService_TxEncodeAmino","parameters":[{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.TxEncodeAminoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/simulate":{"post":{"tags":["Service"],"summary":"Simulate simulates executing a transaction for estimating gas usage.","operationId":"AuthService_Simulate","parameters":[{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.SimulateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs":{"get":{"tags":["Service"],"summary":"GetTxsEvent fetches txs by event.","operationId":"AuthService_GetTxsEvent","parameters":[{"type":"array","items":{"type":"string"},"collectionFormat":"multi","description":"events is the list of transaction event type.\nDeprecated post v0.47.x: use query instead, which should contain a valid\nevents query.","name":"events","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"},{"enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"],"type":"string","default":"ORDER_BY_UNSPECIFIED","description":" - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","name":"order_by","in":"query"},{"type":"string","format":"uint64","description":"page is the page number to query, starts at 1. If not provided, will\ndefault to first page.","name":"page","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"limit","in":"query"},{"type":"string","description":"query defines the transaction event query that is proxied to Tendermint's\nTxSearch RPC method. The query must be valid.","name":"query","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxsEventResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}},"post":{"tags":["Service"],"summary":"BroadcastTx broadcast transaction.","operationId":"AuthService_BroadcastTx","parameters":[{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/block/{height}":{"get":{"tags":["Service"],"summary":"GetBlockWithTxs fetches a block with decoded txs.","operationId":"AuthService_GetBlockWithTxs","parameters":[{"type":"string","format":"int64","description":"height is the height of the block to query.","name":"height","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetBlockWithTxsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/tx/v1beta1/txs/{hash}":{"get":{"tags":["Service"],"summary":"GetTx fetches a tx by hash.","operationId":"AuthService_GetTx","parameters":[{"type":"string","description":"hash is the tx hash to query, encoded as a hex string.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.tx.v1beta1.GetTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/applied_plan/{name}":{"get":{"tags":["Query"],"summary":"AppliedPlan queries a previously applied upgrade plan by its name.","operationId":"AuthQuery_AppliedPlan","parameters":[{"type":"string","description":"name is the name of the applied plan to query for.","name":"name","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAppliedPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/authority":{"get":{"tags":["Query"],"summary":"Returns the account with authority to conduct upgrades","operationId":"AuthQuery_Authority","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryAuthorityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/current_plan":{"get":{"tags":["Query"],"summary":"CurrentPlan queries the current upgrade plan.","operationId":"AuthQuery_CurrentPlan","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryCurrentPlanResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/module_versions":{"get":{"tags":["Query"],"summary":"ModuleVersions queries the list of module versions from state.","operationId":"AuthQuery_ModuleVersions","parameters":[{"type":"string","description":"module_name is a field to query a specific module\nconsensus version from state. Leaving this empty will\nfetch the full list of module versions from state","name":"module_name","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryModuleVersionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries the consensus state that will serve\nas a trusted kernel for the next version of this chain. It will only be\nstored at the last height of this chain.\nUpgradedConsensusState RPC not supported with legacy querier\nThis rpc is deprecated now that IBC has its own replacement\n(https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54)","operationId":"AuthQuery_UpgradedConsensusState","parameters":[{"type":"string","format":"int64","description":"last height of the current chain must be sent in request\nas this is the height under which next consensus state is stored","name":"last_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.poolmodels.balancer.Msg/CreateBalancerPool":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateBalancerPool","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.poolmodels.balancer.MsgCreateBalancerPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.poolmodels.balancer.MsgCreateBalancerPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.poolmodels.stableswap.Msg/CreateStableswapPool":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateStableswapPool","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.poolmodels.stableswap.MsgCreateStableswapPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.poolmodels.stableswap.MsgCreateStableswapPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.poolmodels.stableswap.Msg/StableSwapAdjustScalingFactors":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_StableSwapAdjustScalingFactors","parameters":[{"description":"Sender must be the pool's scaling_factor_governor in order for the tx to\nsucceed. Adjusts stableswap scaling factors.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.poolmodels.stableswap.MsgStableSwapAdjustScalingFactors"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.poolmodels.stableswap.MsgStableSwapAdjustScalingFactorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/ExitPool":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_ExitPool","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/ExitSwapExternAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_ExitSwapExternAmountOut","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitSwapExternAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitSwapExternAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/ExitSwapShareAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_ExitSwapShareAmountIn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitSwapShareAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgExitSwapShareAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/JoinPool":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_JoinPool","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinPool"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/JoinSwapExternAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_JoinSwapExternAmountIn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinSwapExternAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinSwapExternAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/JoinSwapShareAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_JoinSwapShareAmountOut","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinSwapShareAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgJoinSwapShareAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/SwapExactAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountIn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/SwapExactAmountInWithIBCTransfer":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountInWithIBCTransfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountInWithIBCTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountInWithIBCTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Msg/SwapExactAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountOut","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.MsgSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/gamm.v1beta1.Query/CalcJoinPoolNoSwapShares":{"post":{"tags":["Query"],"summary":"Simulates joining pool without a swap. Returns the amount of shares you'd\nget and tokens needed to provide","operationId":"GithubCombitbadgesbitbadgeschainQuery_CalcJoinPoolNoSwapShares","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/RegisterInterchainAccount":{"post":{"tags":["Msg"],"summary":"RegisterInterchainAccount defines a rpc handler for MsgRegisterInterchainAccount.","operationId":"ControllerMsg_RegisterInterchainAccount","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/SendTx":{"post":{"tags":["Msg"],"summary":"SendTx defines a rpc handler for MsgSendTx.","operationId":"ControllerMsg_SendTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.controller.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParams","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/ModuleQuerySafe":{"post":{"tags":["Msg"],"summary":"ModuleQuerySafe defines a rpc handler for MsgModuleQuerySafe.","operationId":"ControllerMsg_ModuleQuerySafe","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.interchain_accounts.host.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin245","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/Transfer":{"post":{"tags":["Msg"],"summary":"Transfer defines a rpc handler method for MsgTransfer.","operationId":"ControllerMsg_Transfer","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransfer"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgTransferResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.applications.transfer.v1.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a rpc handler for MsgUpdateParams.","operationId":"ControllerMsg_UpdateParamsMixin256","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_Acknowledgement","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseConfirm":{"post":{"tags":["Msg"],"summary":"ChannelCloseConfirm defines a rpc handler method for\nMsgChannelCloseConfirm.","operationId":"ControllerMsg_ChannelCloseConfirm","parameters":[{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelCloseInit":{"post":{"tags":["Msg"],"summary":"ChannelCloseInit defines a rpc handler method for MsgChannelCloseInit.","operationId":"ControllerMsg_ChannelCloseInit","parameters":[{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelCloseInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenAck":{"post":{"tags":["Msg"],"summary":"ChannelOpenAck defines a rpc handler method for MsgChannelOpenAck.","operationId":"ControllerMsg_ChannelOpenAck","parameters":[{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenConfirm":{"post":{"tags":["Msg"],"summary":"ChannelOpenConfirm defines a rpc handler method for MsgChannelOpenConfirm.","operationId":"ControllerMsg_ChannelOpenConfirm","parameters":[{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenInit":{"post":{"tags":["Msg"],"summary":"ChannelOpenInit defines a rpc handler method for MsgChannelOpenInit.","operationId":"ControllerMsg_ChannelOpenInit","parameters":[{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/ChannelOpenTry":{"post":{"tags":["Msg"],"summary":"ChannelOpenTry defines a rpc handler method for MsgChannelOpenTry.","operationId":"ControllerMsg_ChannelOpenTry","parameters":[{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgChannelOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacket","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_Timeout","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v1.Msg/TimeoutOnClose":{"post":{"tags":["Msg"],"summary":"TimeoutOnClose defines a rpc handler method for MsgTimeoutOnClose.","operationId":"ControllerMsg_TimeoutOnClose","parameters":[{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnClose"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.MsgTimeoutOnCloseResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Acknowledgement":{"post":{"tags":["Msg"],"summary":"Acknowledgement defines a rpc handler method for MsgAcknowledgement.","operationId":"ControllerMsg_AcknowledgementMixin264","parameters":[{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgement"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/RecvPacket":{"post":{"tags":["Msg"],"summary":"RecvPacket defines a rpc handler method for MsgRecvPacket.","operationId":"ControllerMsg_RecvPacketMixin264","parameters":[{"description":"MsgRecvPacket receives an incoming IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgRecvPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/SendPacket":{"post":{"tags":["Msg"],"summary":"SendPacket defines a rpc handler method for MsgSendPacket.","operationId":"ControllerMsg_SendPacket","parameters":[{"description":"MsgSendPacket sends an outgoing IBC packet.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacket"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgSendPacketResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.channel.v2.Msg/Timeout":{"post":{"tags":["Msg"],"summary":"Timeout defines a rpc handler method for MsgTimeout.","operationId":"ControllerMsg_TimeoutMixin264","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeout"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.MsgTimeoutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/CreateClient":{"post":{"tags":["Msg"],"summary":"CreateClient defines a rpc handler method for MsgCreateClient.","operationId":"ControllerMsg_CreateClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgCreateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/DeleteClientCreator":{"post":{"tags":["Msg"],"summary":"DeleteClientCreator defines a rpc handler method for MsgDeleteClientCreator.","operationId":"ControllerMsg_DeleteClientCreator","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreator"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgDeleteClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/IBCSoftwareUpgrade":{"post":{"tags":["Msg"],"summary":"IBCSoftwareUpgrade defines a rpc handler method for MsgIBCSoftwareUpgrade.","operationId":"ControllerMsg_IBCSoftwareUpgrade","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgrade"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/RecoverClient":{"post":{"tags":["Msg"],"summary":"RecoverClient defines a rpc handler method for MsgRecoverClient.","operationId":"ControllerMsg_RecoverClient","parameters":[{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgRecoverClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/SubmitMisbehaviour":{"post":{"tags":["Msg"],"summary":"SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.","operationId":"ControllerMsg_SubmitMisbehaviour","parameters":[{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviour"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgSubmitMisbehaviourResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClient":{"post":{"tags":["Msg"],"summary":"UpdateClient defines a rpc handler method for MsgUpdateClient.","operationId":"ControllerMsg_UpdateClient","parameters":[{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpdateClientParams":{"post":{"tags":["Msg"],"summary":"UpdateClientParams defines a rpc handler method for MsgUpdateParams.","operationId":"ControllerMsg_UpdateClientParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v1.Msg/UpgradeClient":{"post":{"tags":["Msg"],"summary":"UpgradeClient defines a rpc handler method for MsgUpgradeClient.","operationId":"ControllerMsg_UpgradeClient","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClient"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.MsgUpgradeClientResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/RegisterCounterparty":{"post":{"tags":["Msg"],"summary":"RegisterCounterparty defines a rpc handler method for MsgRegisterCounterparty.","operationId":"ControllerMsg_RegisterCounterparty","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterparty"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgRegisterCounterpartyResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.client.v2.Msg/UpdateClientConfig":{"post":{"tags":["Msg"],"summary":"UpdateClientConfig defines a rpc handler method for MsgUpdateClientConfig.","operationId":"ControllerMsg_UpdateClientConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfig"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.MsgUpdateClientConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenAck":{"post":{"tags":["Msg"],"summary":"ConnectionOpenAck defines a rpc handler method for MsgConnectionOpenAck.","operationId":"ControllerMsg_ConnectionOpenAck","parameters":[{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAck"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenAckResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenConfirm":{"post":{"tags":["Msg"],"summary":"ConnectionOpenConfirm defines a rpc handler method for\nMsgConnectionOpenConfirm.","operationId":"ControllerMsg_ConnectionOpenConfirm","parameters":[{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirm"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenConfirmResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenInit":{"post":{"tags":["Msg"],"summary":"ConnectionOpenInit defines a rpc handler method for MsgConnectionOpenInit.","operationId":"ControllerMsg_ConnectionOpenInit","parameters":[{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenInitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/ConnectionOpenTry":{"post":{"tags":["Msg"],"summary":"ConnectionOpenTry defines a rpc handler method for MsgConnectionOpenTry.","operationId":"ControllerMsg_ConnectionOpenTry","parameters":[{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTry"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgConnectionOpenTryResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.core.connection.v1.Msg/UpdateConnectionParams":{"post":{"tags":["Msg"],"summary":"UpdateConnectionParams defines a rpc handler method for\nMsgUpdateParams.","operationId":"ControllerMsg_UpdateConnectionParams","parameters":[{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/MigrateContract":{"post":{"tags":["Msg"],"summary":"MigrateContract defines a rpc handler method for MsgMigrateContract.","operationId":"ControllerMsg_MigrateContract","parameters":[{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContract"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgMigrateContractResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/RemoveChecksum":{"post":{"tags":["Msg"],"summary":"RemoveChecksum defines a rpc handler method for MsgRemoveChecksum.","operationId":"ControllerMsg_RemoveChecksum","parameters":[{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksum"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc.lightclients.wasm.v1.Msg/StoreCode":{"post":{"tags":["Msg"],"summary":"StoreCode defines a rpc handler method for MsgStoreCode.","operationId":"ControllerMsg_StoreCode","parameters":[{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCode"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.MsgStoreCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"InterchainAccount returns the interchain account address for a given owner address on a given connection","operationId":"ControllerQuery_InterchainAccount","parameters":[{"type":"string","name":"owner","in":"path","required":true},{"type":"string","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/controller/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA controller submodule.","operationId":"ControllerQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/interchain_accounts/host/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ICA host submodule.","operationId":"ControllerQuery_ParamsMixin244","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/channels/{channel_id}/ports/{port_id}/escrow_address":{"get":{"tags":["Query"],"summary":"EscrowAddress returns the escrow address for a particular port and channel id.","operationId":"ControllerQuery_EscrowAddress","parameters":[{"type":"string","description":"unique channel identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"unique port identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryEscrowAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denom_hashes/{trace}":{"get":{"tags":["Query"],"summary":"DenomHash queries a denomination hash information.","operationId":"ControllerQuery_DenomHash","parameters":[{"pattern":".+","type":"string","description":"The denomination trace ([port_id]/[channel_id])+/[denom]","name":"trace","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomHashResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms":{"get":{"tags":["Query"],"summary":"Denoms queries all denominations","operationId":"ControllerQuery_Denoms","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/denoms/{hash}":{"get":{"tags":["Query"],"summary":"Denom queries a denomination","operationId":"ControllerQuery_Denom","parameters":[{"pattern":".+","type":"string","description":"hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination.","name":"hash","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/params":{"get":{"tags":["Query"],"summary":"Params queries all parameters of the ibc-transfer module.","operationId":"ControllerQuery_ParamsMixin253","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/apps/transfer/v1/total_escrow/{denom}":{"get":{"tags":["Query"],"summary":"TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom.","operationId":"ControllerQuery_TotalEscrowForDenom","parameters":[{"pattern":".+","type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels":{"get":{"tags":["Query"],"summary":"Channels queries all the IBC channels of a chain.","operationId":"ControllerQuery_Channels","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}":{"get":{"tags":["Query"],"summary":"Channel queries an IBC Channel.","operationId":"ControllerQuery_Channel","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/client_state":{"get":{"tags":["Query"],"summary":"ChannelClientState queries for the client state for the channel associated\nwith the provided channel identifiers.","operationId":"ControllerQuery_ChannelClientState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ChannelConsensusState queries for the consensus state for the channel\nassociated with the provided channel identifiers.","operationId":"ControllerQuery_ChannelConsensusState","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"revision number of the consensus state","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"revision height of the consensus state","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryChannelConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence":{"get":{"tags":["Query"],"summary":"NextSequenceReceive returns the next receive sequence for a given channel.","operationId":"ControllerQuery_NextSequenceReceive","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceReceiveResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSend","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all the packet acknowledgements associated\nwith a channel.","operationId":"ControllerQuery_PacketAcknowledgements","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored packet acknowledgement hash.","operationId":"ControllerQuery_PacketAcknowledgement","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments returns all the packet commitments hashes associated\nwith a channel.","operationId":"ControllerQuery_PacketCommitments","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated\nwith a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcks","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a\nchannel and sequences.","operationId":"ControllerQuery_UnreceivedPackets","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"packet_commitment_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitment","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries if a given packet sequence has been received on the\nqueried chain","operationId":"ControllerQuery_PacketReceipt","parameters":[{"type":"string","description":"channel unique identifier","name":"channel_id","in":"path","required":true},{"type":"string","description":"port unique identifier","name":"port_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v1/connections/{connection}/channels":{"get":{"tags":["Query"],"summary":"ConnectionChannels queries all the channels associated with a connection\nend.","operationId":"ControllerQuery_ConnectionChannels","parameters":[{"type":"string","description":"connection unique identifier","name":"connection","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v1.QueryConnectionChannelsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/next_sequence_send":{"get":{"tags":["Query"],"summary":"NextSequenceSend returns the next send sequence for a given channel.","operationId":"ControllerQuery_NextSequenceSendMixin263","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryNextSequenceSendResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acknowledgements":{"get":{"tags":["Query"],"summary":"PacketAcknowledgements returns all packet acknowledgements associated with a channel.","operationId":"ControllerQuery_PacketAcknowledgementsMixin263","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","description":"list of packet sequences","name":"packet_commitment_sequences","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_acks/{sequence}":{"get":{"tags":["Query"],"summary":"PacketAcknowledgement queries a stored acknowledgement commitment hash.","operationId":"ControllerQuery_PacketAcknowledgementMixin263","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketAcknowledgementResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments":{"get":{"tags":["Query"],"summary":"PacketCommitments queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentsMixin263","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks":{"get":{"tags":["Query"],"summary":"UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedAcksMixin263","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of acknowledgement sequences","name":"packet_ack_sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedAcksResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequences}/unreceived_packets":{"get":{"tags":["Query"],"summary":"UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences.","operationId":"ControllerQuery_UnreceivedPacketsMixin263","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"minItems":1,"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"csv","description":"list of packet sequences","name":"sequences","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryUnreceivedPacketsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequence}":{"get":{"tags":["Query"],"summary":"PacketCommitment queries a stored packet commitment hash.","operationId":"ControllerQuery_PacketCommitmentMixin263","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketCommitmentResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/channel/v2/clients/{client_id}/packet_receipts/{sequence}":{"get":{"tags":["Query"],"summary":"PacketReceipt queries a stored packet receipt.","operationId":"ControllerQuery_PacketReceiptMixin263","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"packet sequence","name":"sequence","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.channel.v2.QueryPacketReceiptResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_creator/{client_id}":{"get":{"tags":["Query"],"summary":"ClientCreator queries the creator of a given client.","operationId":"ControllerQuery_ClientCreator","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientCreatorResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states":{"get":{"tags":["Query"],"summary":"ClientStates queries all the IBC light clients of a chain.","operationId":"ControllerQuery_ClientStates","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_states/{client_id}":{"get":{"tags":["Query"],"summary":"ClientState queries an IBC light client.","operationId":"ControllerQuery_ClientState","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/client_status/{client_id}":{"get":{"tags":["Query"],"summary":"Status queries the status of an IBC client.","operationId":"ControllerQuery_ClientStatus","parameters":[{"type":"string","description":"client unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientStatusResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}":{"get":{"tags":["Query"],"summary":"ConsensusStates queries all the consensus state associated with a given\nclient.","operationId":"ControllerQuery_ConsensusStates","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStatesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/heights":{"get":{"tags":["Query"],"summary":"ConsensusStateHeights queries the height of every consensus states associated with a given client.","operationId":"ControllerQuery_ConsensusStateHeights","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateHeightsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/consensus_states/{client_id}/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConsensusState queries a consensus state associated with a client state at\na given height.","operationId":"ControllerQuery_ConsensusState","parameters":[{"type":"string","description":"client identifier","name":"client_id","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision number","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","description":"consensus state revision height","name":"revision_height","in":"path","required":true},{"type":"boolean","description":"latest_height overrides the height field and queries the latest stored\nConsensusState","name":"latest_height","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/params":{"get":{"tags":["Query"],"summary":"ClientParams queries all parameters of the ibc client submodule.","operationId":"ControllerQuery_ClientParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryClientParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_client_states":{"get":{"tags":["Query"],"summary":"UpgradedClientState queries an Upgraded IBC light client.","operationId":"ControllerQuery_UpgradedClientState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/upgraded_consensus_states":{"get":{"tags":["Query"],"summary":"UpgradedConsensusState queries an Upgraded IBC consensus state.","operationId":"ControllerQuery_UpgradedConsensusState","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryUpgradedConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v1/verify_membership":{"post":{"tags":["Query"],"summary":"VerifyMembership queries an IBC light client for proof verification of a value at a given key path.","operationId":"ControllerQuery_VerifyMembership","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipRequest"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v1.QueryVerifyMembershipResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/config/{client_id}":{"get":{"tags":["Query"],"summary":"Config queries the IBC client v2 configuration for a given client.","operationId":"ControllerQuery_Config","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryConfigResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/client/v2/counterparty_info/{client_id}":{"get":{"tags":["Query"],"summary":"CounterpartyInfo queries an IBC light counter party info.","operationId":"ControllerQuery_CounterpartyInfo","parameters":[{"type":"string","description":"client state unique identifier","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.client.v2.QueryCounterpartyInfoResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/client_connections/{client_id}":{"get":{"tags":["Query"],"summary":"ClientConnections queries the connection paths associated with a client\nstate.","operationId":"ControllerQuery_ClientConnections","parameters":[{"type":"string","description":"client identifier associated with a connection","name":"client_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryClientConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections":{"get":{"tags":["Query"],"summary":"Connections queries all the IBC connections of a chain.","operationId":"ControllerQuery_Connections","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}":{"get":{"tags":["Query"],"summary":"Connection queries an IBC connection end.","operationId":"ControllerQuery_Connection","parameters":[{"type":"string","description":"connection unique identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/client_state":{"get":{"tags":["Query"],"summary":"ConnectionClientState queries the client state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionClientState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionClientStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/connections/{connection_id}/consensus_state/revision/{revision_number}/height/{revision_height}":{"get":{"tags":["Query"],"summary":"ConnectionConsensusState queries the consensus state associated with the\nconnection.","operationId":"ControllerQuery_ConnectionConsensusState","parameters":[{"type":"string","description":"connection identifier","name":"connection_id","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_number","in":"path","required":true},{"type":"string","format":"uint64","name":"revision_height","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionConsensusStateResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/core/connection/v1/params":{"get":{"tags":["Query"],"summary":"ConnectionParams queries all parameters of the ibc connection submodule.","operationId":"ControllerQuery_ConnectionParams","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.core.connection.v1.QueryConnectionParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums":{"get":{"tags":["Query"],"summary":"Get all Wasm checksums","operationId":"ControllerQuery_Checksums","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.\n\nSince: cosmos-sdk 0.43","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryChecksumsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibc/lightclients/wasm/v1/checksums/{checksum}/code":{"get":{"tags":["Query"],"summary":"Get Wasm code for given checksum","operationId":"ControllerQuery_Code","parameters":[{"type":"string","description":"checksum is a hex encoded string of the code stored.","name":"checksum","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibc.lightclients.wasm.v1.QueryCodeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibcratelimit.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParams","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibcratelimit.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibcratelimit.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/ibcratelimit.Msg/UpdateRateLimit":{"post":{"tags":["Msg"],"summary":"UpdateRateLimit defines a (governance) operation for updating or adding a single rate limit.\nIf a rate limit with the same channel_id and denom exists, it will be updated.\nOtherwise, it will be appended to the list. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateRateLimit","parameters":[{"description":"MsgUpdateRateLimit is the Msg/UpdateRateLimit request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/ibcratelimit.MsgUpdateRateLimit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/ibcratelimit.MsgUpdateRateLimitResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/CreateManagerSplitter":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateManagerSplitter","parameters":[{"description":"MsgCreateManagerSplitter creates a new manager splitter entity.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgCreateManagerSplitter"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgCreateManagerSplitterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/DeleteManagerSplitter":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteManagerSplitter","parameters":[{"description":"MsgDeleteManagerSplitter deletes a manager splitter entity.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgDeleteManagerSplitter"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgDeleteManagerSplitterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/ExecuteUniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_ExecuteUniversalUpdateCollection","parameters":[{"description":"MsgExecuteUniversalUpdateCollection executes a UniversalUpdateCollection message\nthrough the manager splitter, checking permissions before execution.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgExecuteUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgExecuteUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/UpdateManagerSplitter":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateManagerSplitter","parameters":[{"description":"MsgUpdateManagerSplitter updates an existing manager splitter entity.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgUpdateManagerSplitter"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgUpdateManagerSplitterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/managersplitter.Msg/UpdateParams":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin23","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/managersplitter.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/managersplitter.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/filtered_pools":{"get":{"tags":["Query"],"summary":"PoolsWithFilter allows you to query specific pools with requested\nparameters","operationId":"GithubCombitbadgesbitbadgeschainQuery_PoolsWithFilter","parameters":[{"type":"string","description":"String of the coins in single string separated by comma. Ex)\n10uatom,100uosmo","name":"min_liquidity","in":"query"},{"type":"string","name":"pool_type","in":"query"},{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolsWithFilterResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/num_pools":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_NumPools","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryNumPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/params":{"get":{"tags":["Query"],"summary":"Params returns gamm module params.","operationId":"GithubCombitbadgesbitbadgeschainQuery_Params","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.ParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pool_type/{pool_id}":{"get":{"tags":["Query"],"summary":"PoolType returns the type of the pool.\nReturns \"Balancer\" as a string literal when the pool is a balancer pool.\nErrors if the pool is failed to be type caseted.","operationId":"GithubCombitbadgesbitbadgeschainQuery_PoolType","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolTypeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_Pools","parameters":[{"type":"string","format":"byte","description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","name":"pagination.key","in":"query"},{"type":"string","format":"uint64","description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","name":"pagination.offset","in":"query"},{"type":"string","format":"uint64","description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","name":"pagination.limit","in":"query"},{"type":"boolean","description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","name":"pagination.count_total","in":"query"},{"type":"boolean","description":"reverse is set to true if results are to be returned in the descending order.","name":"pagination.reverse","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_Pool","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/exit_swap_share_amount_in":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_CalcExitPoolCoinsFromShares","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"share_in_amount","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/join_swap_exact_in":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_CalcJoinPoolShares","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryCalcJoinPoolSharesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/params":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_PoolParams","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryPoolParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/prices":{"get":{"tags":["Query"],"summary":"SpotPrice defines a gRPC query handler that returns the spot price given\na base denomination and a quote denomination.","operationId":"GithubCombitbadgesbitbadgeschainQuery_SpotPrice","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"base_asset_denom","in":"query"},{"type":"string","name":"quote_asset_denom","in":"query"},{"type":"boolean","description":"DEPRECATED","name":"withSwapFee","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QuerySpotPriceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/total_pool_liquidity":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalPoolLiquidity","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryTotalPoolLiquidityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/pools/{pool_id}/total_shares":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalShares","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryTotalSharesResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/total_liquidity":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalLiquidity","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QueryTotalLiquidityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/{pool_id}/estimate/swap_exact_amount_in":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountIn","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"sender","in":"query"},{"type":"string","name":"token_in","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QuerySwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v1beta1/{pool_id}/estimate/swap_exact_amount_out":{"get":{"tags":["Query"],"summary":"Deprecated: please use the alternative in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountOut","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"sender","in":"query"},{"type":"string","name":"token_out","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v1beta1.QuerySwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/gamm/v2/pools/{pool_id}/prices":{"get":{"tags":["Query"],"summary":"Deprecated: please use alternate in x/poolmanager","operationId":"GithubCombitbadgesbitbadgeschainQuery_SpotPriceMixin13","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"base_asset_denom","in":"query"},{"type":"string","name":"quote_asset_denom","in":"query"},{"type":"boolean","description":"DEPRECATED","name":"withSwapFee","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/gamm.v2.QuerySpotPriceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/pools/{pool_id}/prices":{"get":{"tags":["Query"],"summary":"SpotPrice defines a gRPC query handler that returns the spot price given\na base denomination and a quote denomination.","operationId":"GithubCombitbadgesbitbadgeschainQuery_SpotPriceMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"base_asset_denom","in":"query"},{"type":"string","name":"quote_asset_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.SpotPriceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/Params":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_ParamsMixin26","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.ParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/all-pools":{"get":{"tags":["Query"],"summary":"AllPools returns all pools on the Osmosis chain sorted by IDs.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllPools","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.AllPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/all_registered_alloyed_pools":{"get":{"tags":["Query"],"summary":"AllRegisteredAlloyedPools returns all registered alloyed pools. The\nregistered alloyed pool contains the pool's contract address, along with\nthe current distribution composition of taker fee share denoms within the\nalloyed pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllRegisteredAlloyedPools","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.AllRegisteredAlloyedPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/all_taker_fee_share_accumulators":{"get":{"tags":["Query"],"summary":"AllTakerFeeShareAccumulators returns all taker fee share accumulators. A\ntaker fee share accumulator includes the denom of the denom getting the\ntaker fees, and an accumulated value of coins that the denom has accrued\nsince the last time it was distributed in the epoch prior.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllTakerFeeShareAccumulators","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.AllTakerFeeShareAccumulatorsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/all_taker_fee_share_agreements":{"get":{"tags":["Query"],"summary":"AllTakerFeeShareAgreements returns all taker fee share agreements.\nA taker fee share agreement includes the denom of the denom getting the\ntaker fees, the percent of the taker fees that the denom gets when it is\nin the route being traded against, and the address that the taker fees are\nsent to at epoch.","operationId":"GithubCombitbadgesbitbadgeschainQuery_AllTakerFeeShareAgreements","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.AllTakerFeeShareAgreementsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/list-pools-by-denom":{"get":{"tags":["Query"],"summary":"ListPoolsByDenom return all pools by denom","operationId":"GithubCombitbadgesbitbadgeschainQuery_ListPoolsByDenom","parameters":[{"type":"string","name":"denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.ListPoolsByDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/num_pools":{"get":{"tags":["Query"],"summary":"Returns the total number of pools existing in Osmosis.","operationId":"GithubCombitbadgesbitbadgeschainQuery_NumPoolsMixin26","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.NumPoolsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/pools/{pool_id}":{"get":{"tags":["Query"],"summary":"Pool returns the Pool specified by the pool id","operationId":"GithubCombitbadgesbitbadgeschainQuery_PoolMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.PoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/pools/{pool_id}/total_pool_liquidity":{"get":{"tags":["Query"],"summary":"TotalPoolLiquidity returns the total liquidity of the specified pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalPoolLiquidityMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TotalPoolLiquidityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/pools/{pool_id}/total_volume":{"get":{"tags":["Query"],"summary":"TotalVolumeForPool returns the total volume of the specified pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalVolumeForPool","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TotalVolumeForPoolResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/total_liquidity":{"get":{"tags":["Query"],"summary":"TotalLiquidity returns the total liquidity across all pools.","operationId":"GithubCombitbadgesbitbadgeschainQuery_TotalLiquidityMixin26","responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TotalLiquidityResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/trading_pair_takerfee":{"get":{"tags":["Query"],"summary":"TradingPairTakerFee returns the taker fee for a given set of denoms","operationId":"GithubCombitbadgesbitbadgeschainQuery_TradingPairTakerFee","parameters":[{"type":"string","name":"denom_0","in":"query"},{"type":"string","name":"denom_1","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TradingPairTakerFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{denom}/registered_alloyed_pool_from_denom":{"get":{"tags":["Query"],"summary":"RegisteredAlloyedPoolFromDenom returns the registered alloyed pool state\nfrom the given denom. The registered alloyed pool contains the pool's\ncontract address, along with the current distribution composition of taker\nfee share denoms within the alloyed pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_RegisteredAlloyedPoolFromDenom","parameters":[{"type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.RegisteredAlloyedPoolFromDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{denom}/taker_fee_share_agreement_from_denom":{"get":{"tags":["Query"],"summary":"TakerFeeShareAgreementFromDenom returns the taker fee share agreement for a\ngiven denom. A taker fee share agreement includes the denom of the denom\ngetting the taker fees, the percent of the taker fees that the denom gets\nwhen it is in the route being traded against, and the address that the\ntaker fees are sent to at epoch.","operationId":"GithubCombitbadgesbitbadgeschainQuery_TakerFeeShareAgreementFromDenom","parameters":[{"type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareAgreementFromDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/single_pool_swap_exact_amount_in":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSinglePoolSwapExactAmountIn","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"token_in","in":"query"},{"type":"string","name":"token_out_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_in":{"get":{"tags":["Query"],"summary":"Estimates swap amount out given in.","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountInMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","description":"DEPRECATED","name":"sender","in":"query"},{"type":"string","name":"token_in","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_in_with_primitive_types":{"get":{"tags":["Query"],"summary":"EstimateSwapExactAmountInWithPrimitiveTypes is an alternative query for\nEstimateSwapExactAmountIn. Supports query via GRPC-Gateway by using\nprimitive types instead of repeated structs. Each index in the\nroutes_pool_id field corresponds to the respective routes_token_out_denom\nvalue, thus they are required to have the same length and are grouped\ntogether as pairs.\nexample usage:\nhttp://0.0.0.0:1317/osmosis/poolmanager/v1beta1/1/estimate/\nswap_exact_amount_in_with_primitive_types?token_in=100000stake\u0026routes_token_out_denom=uatom\n\u0026routes_token_out_denom=uion\u0026routes_pool_id=1\u0026routes_pool_id=2","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountInWithPrimitiveTypes","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"token_in","in":"query"},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","name":"routes_pool_id","in":"query"},{"type":"array","items":{"type":"string"},"collectionFormat":"multi","name":"routes_token_out_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_out":{"get":{"tags":["Query"],"summary":"Estimates swap amount in given out.","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountOutMixin26","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","description":"DEPRECATED","name":"sender","in":"query"},{"type":"string","name":"token_out","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_out_with_primitive_types":{"get":{"tags":["Query"],"summary":"Estimates swap amount in given out.","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSwapExactAmountOutWithPrimitiveTypes","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"array","items":{"type":"string","format":"uint64"},"collectionFormat":"multi","name":"routes_pool_id","in":"query"},{"type":"array","items":{"type":"string"},"collectionFormat":"multi","name":"routes_token_in_denom","in":"query"},{"type":"string","name":"token_out","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate_out/single_pool_swap_exact_amount_out":{"get":{"tags":["Query"],"operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateSinglePoolSwapExactAmountOut","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"token_in_denom","in":"query"},{"type":"string","name":"token_out","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/estimate_trade":{"get":{"tags":["Query"],"summary":"EstimateTradeBasedOnPriceImpact returns an estimated trade based on price\nimpact, if a trade cannot be estimated a 0 input and 0 output would be\nreturned.","operationId":"GithubCombitbadgesbitbadgeschainQuery_EstimateTradeBasedOnPriceImpact","parameters":[{"type":"string","format":"uint64","description":"pool_id is the identifier of the liquidity pool that the trade will occur\non.","name":"pool_id","in":"path","required":true},{"type":"string","name":"from_coin.denom","in":"query"},{"type":"string","name":"from_coin.amount","in":"query"},{"type":"string","description":"to_coin_denom is the denom identifier of the token that the user wants to\nbuy.","name":"to_coin_denom","in":"query"},{"type":"string","description":"max_price_impact is the maximum percentage that the user is willing\nto affect the price of the liquidity pool.","name":"max_price_impact","in":"query"},{"type":"string","description":"external_price is an optional external price that the user can enter.\nIt adjusts the MaxPriceImpact as the SpotPrice of a pool can be changed at\nany time.","name":"external_price","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.EstimateTradeBasedOnPriceImpactResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{pool_id}/registered_alloyed_pool_from_pool_id":{"get":{"tags":["Query"],"summary":"RegisteredAlloyedPoolFromPoolId returns the registered alloyed pool state\nfrom the given pool id. The registered alloyed pool contains the pool's\ncontract address, along with the current distribution composition of taker\nfee share denoms within the alloyed pool.","operationId":"GithubCombitbadgesbitbadgeschainQuery_RegisteredAlloyedPoolFromPoolId","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.RegisteredAlloyedPoolFromPoolIdResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v1beta1/{takerFeeDenom}/{denom}/taker_fee_share_denoms_to_accrued_value":{"get":{"tags":["Query"],"summary":"TakerFeeShareDenomsToAccruedValue returns the accrued value (as an Int) of\nthe given taker fee denom (the collected fees) for the given fee share\ndenom (the denom with the taker fee share agreement)","operationId":"GithubCombitbadgesbitbadgeschainQuery_TakerFeeShareDenomsToAccruedValue","parameters":[{"type":"string","name":"takerFeeDenom","in":"path","required":true},{"type":"string","name":"denom","in":"path","required":true}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareDenomsToAccruedValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/osmosis/poolmanager/v2/pools/{pool_id}/prices":{"get":{"tags":["Query"],"summary":"SpotPriceV2 defines a gRPC query handler that returns the spot price given\na base denomination and a quote denomination.\nThe returned spot price has 36 decimal places. However, some of\nmodules perform sig fig rounding so most of the rightmost decimals can be\nzeroes.","operationId":"GithubCombitbadgesbitbadgeschainQuery_SpotPriceV2","parameters":[{"type":"string","format":"uint64","name":"pool_id","in":"path","required":true},{"type":"string","name":"base_asset_denom","in":"query"},{"type":"string","name":"quote_asset_denom","in":"query"}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v2.SpotPriceResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SetDenomPairTakerFee":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDenomPairTakerFee","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSetDenomPairTakerFee"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSetDenomPairTakerFeeResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SetTakerFeeShareAgreementForDenom":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTakerFeeShareAgreementForDenom","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSetTakerFeeShareAgreementForDenom"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSetTakerFeeShareAgreementForDenomResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SplitRouteSwapExactAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SplitRouteSwapExactAmountIn","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSplitRouteSwapExactAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSplitRouteSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SplitRouteSwapExactAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SplitRouteSwapExactAmountOut","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSplitRouteSwapExactAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSplitRouteSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SwapExactAmountIn":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountInMixin30","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSwapExactAmountIn"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSwapExactAmountInResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/poolmanager.v1beta1.Msg/SwapExactAmountOut":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SwapExactAmountOutMixin30","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSwapExactAmountOut"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/poolmanager.v1beta1.MsgSwapExactAmountOutResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/sendmanager.Msg/SendWithAliasRouting":{"post":{"tags":["Msg"],"summary":"SendWithAliasRouting defines a message for sending coins with alias denom routing.\nThis allows sending both standard coins and alias denoms (e.g., badgeslp:) through the sendmanager.","operationId":"GithubCombitbadgesbitbadgeschainMsg_SendWithAliasRouting","parameters":[{"description":"MsgSendWithAliasRouting defines a message for sending coins with alias denom routing.\nThis message mirrors cosmos bank MsgSend but routes through sendmanager to handle\nboth standard coins and alias denoms (e.g., badgeslp:).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/sendmanager.MsgSendWithAliasRouting"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/sendmanager.MsgSendWithAliasRoutingResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/sendmanager.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin35","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/sendmanager.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/sendmanager.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ApplySnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_ApplySnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestApplySnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/CheckTx":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_CheckTx","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCheckTx"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCheckTx"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Commit":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_Commit","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestCommit"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Echo":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_Echo","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestEcho"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseEcho"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ExtendVote":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_ExtendVote","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestExtendVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseExtendVote"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/FinalizeBlock":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_FinalizeBlock","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Flush":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_Flush","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestFlush"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseFlush"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Info":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_Info","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInfo"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInfo"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/InitChain":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_InitChain","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestInitChain"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseInitChain"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ListSnapshots":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_ListSnapshots","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestListSnapshots"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseListSnapshots"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/LoadSnapshotChunk":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_LoadSnapshotChunk","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestLoadSnapshotChunk"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseLoadSnapshotChunk"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/OfferSnapshot":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_OfferSnapshot","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestOfferSnapshot"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/PrepareProposal":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_PrepareProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestPrepareProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponsePrepareProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/ProcessProposal":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_ProcessProposal","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestProcessProposal"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/Query":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_Query","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestQuery"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseQuery"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tendermint.abci.ABCI/VerifyVoteExtension":{"post":{"tags":["ABCI"],"operationId":"AuthABCI_VerifyVoteExtension","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tendermint.abci.RequestVerifyVoteExtension"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/CastVote":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CastVote","parameters":[{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgCastVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgCastVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/CreateAddressLists":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateAddressLists","parameters":[{"description":"MsgCreateAddressLists is used to create address lists.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgCreateAddressLists"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgCreateAddressListsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/CreateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateCollection","parameters":[{"description":"MsgCreateCollection is used to create a new collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgCreateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgCreateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/CreateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateDynamicStore","parameters":[{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgCreateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgCreateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/DeleteCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteCollection","parameters":[{"description":"MsgDeleteCollection is used to delete a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgDeleteCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgDeleteCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/DeleteDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteDynamicStore","parameters":[{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgDeleteDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgDeleteDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/DeleteIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteIncomingApproval","parameters":[{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgDeleteIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgDeleteIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/DeleteOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteOutgoingApproval","parameters":[{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgDeleteOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgDeleteOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/PurgeApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_PurgeApprovals","parameters":[{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgPurgeApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgPurgeApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetCollectionApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionApprovals","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetCollectionApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetCollectionApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetCollectionMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionMetadata","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetCollectionMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetCollectionMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetCustomData":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCustomData","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetCustomData"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetCustomDataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetDynamicStoreValue":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDynamicStoreValue","parameters":[{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetDynamicStoreValue"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIncomingApproval","parameters":[{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetIsArchived":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIsArchived","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetIsArchived"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetIsArchivedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetManager":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetManager","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetManager"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetManagerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetOutgoingApproval","parameters":[{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetReservedProtocolAddress":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetReservedProtocolAddress","parameters":[{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetReservedProtocolAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetReservedProtocolAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetStandards":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetStandards","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetStandards"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetStandardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetTokenMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTokenMetadata","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetTokenMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetTokenMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/SetValidTokenIds":{"post":{"tags":["Msg"],"summary":"Helper message types for UniversalUpdateCollection subsets","operationId":"GithubCombitbadgesbitbadgeschainMsg_SetValidTokenIds","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgSetValidTokenIds"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgSetValidTokenIdsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/TransferTokens":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_TransferTokens","parameters":[{"description":"MsgTransferTokens is used to transfer tokens.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgTransferTokens"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgTransferTokensResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UniversalUpdateCollection","parameters":[{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateCollection","parameters":[{"description":"MsgUpdateCollection is used to update a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UpdateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateDynamicStore","parameters":[{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUpdateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUpdateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin56","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.Msg/UpdateUserApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateUserApprovals","parameters":[{"description":"MsgUpdateUserApprovals is used to update user approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.MsgUpdateUserApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.MsgUpdateUserApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/CastVote":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CastVoteMixin76","parameters":[{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgCastVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgCastVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/CreateAddressLists":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateAddressListsMixin76","parameters":[{"description":"MsgCreateAddressLists is used to create address lists.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateAddressLists"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateAddressListsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/CreateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateCollectionMixin76","parameters":[{"description":"MsgCreateCollection is used to create a new collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/CreateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateDynamicStoreMixin76","parameters":[{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgCreateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/DeleteCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteCollectionMixin76","parameters":[{"description":"MsgDeleteCollection is used to delete a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/DeleteDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteDynamicStoreMixin76","parameters":[{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/DeleteIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteIncomingApprovalMixin76","parameters":[{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/DeleteOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteOutgoingApprovalMixin76","parameters":[{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgDeleteOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/PurgeApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_PurgeApprovalsMixin76","parameters":[{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgPurgeApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgPurgeApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetCollectionApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionApprovalsMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCollectionApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCollectionApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetCollectionMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionMetadataMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCollectionMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCollectionMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetCustomData":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCustomDataMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCustomData"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetCustomDataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetDynamicStoreValue":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDynamicStoreValueMixin76","parameters":[{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetDynamicStoreValue"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIncomingApprovalMixin76","parameters":[{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetIsArchived":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIsArchivedMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetIsArchived"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetIsArchivedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetManager":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetManagerMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetManager"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetManagerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetOutgoingApprovalMixin76","parameters":[{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetReservedProtocolAddress":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetReservedProtocolAddressMixin76","parameters":[{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetReservedProtocolAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetReservedProtocolAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetStandards":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetStandardsMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetStandards"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetStandardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetTokenMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTokenMetadataMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetTokenMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetTokenMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/SetValidTokenIds":{"post":{"tags":["Msg"],"summary":"Helper message types for UniversalUpdateCollection subsets","operationId":"GithubCombitbadgesbitbadgeschainMsg_SetValidTokenIdsMixin76","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgSetValidTokenIds"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgSetValidTokenIdsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/TransferTokens":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_TransferTokensMixin76","parameters":[{"description":"MsgTransferTokens is used to transfer tokens.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgTransferTokens"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgTransferTokensResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UniversalUpdateCollectionMixin76","parameters":[{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateCollectionMixin76","parameters":[{"description":"MsgUpdateCollection is used to update a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UpdateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateDynamicStoreMixin76","parameters":[{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin76","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v27.Msg/UpdateUserApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateUserApprovalsMixin76","parameters":[{"description":"MsgUpdateUserApprovals is used to update user approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateUserApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v27.MsgUpdateUserApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/CastVote":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CastVoteMixin96","parameters":[{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgCastVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgCastVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/CreateAddressLists":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateAddressListsMixin96","parameters":[{"description":"MsgCreateAddressLists is used to create address lists.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateAddressLists"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateAddressListsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/CreateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateCollectionMixin96","parameters":[{"description":"MsgCreateCollection is used to create a new collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/CreateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateDynamicStoreMixin96","parameters":[{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgCreateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/DeleteCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteCollectionMixin96","parameters":[{"description":"MsgDeleteCollection is used to delete a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/DeleteDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteDynamicStoreMixin96","parameters":[{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/DeleteIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteIncomingApprovalMixin96","parameters":[{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/DeleteOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteOutgoingApprovalMixin96","parameters":[{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgDeleteOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/PurgeApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_PurgeApprovalsMixin96","parameters":[{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgPurgeApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgPurgeApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetCollectionApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionApprovalsMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCollectionApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCollectionApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetCollectionMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionMetadataMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCollectionMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCollectionMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetCustomData":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCustomDataMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCustomData"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetCustomDataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetDynamicStoreValue":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDynamicStoreValueMixin96","parameters":[{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetDynamicStoreValue"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIncomingApprovalMixin96","parameters":[{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetIsArchived":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIsArchivedMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetIsArchived"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetIsArchivedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetManager":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetManagerMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetManager"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetManagerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetOutgoingApprovalMixin96","parameters":[{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetReservedProtocolAddress":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetReservedProtocolAddressMixin96","parameters":[{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetReservedProtocolAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetReservedProtocolAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetStandards":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetStandardsMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetStandards"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetStandardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetTokenMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTokenMetadataMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetTokenMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetTokenMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/SetValidTokenIds":{"post":{"tags":["Msg"],"summary":"Helper message types for UniversalUpdateCollection subsets","operationId":"GithubCombitbadgesbitbadgeschainMsg_SetValidTokenIdsMixin96","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgSetValidTokenIds"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgSetValidTokenIdsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/TransferTokens":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_TransferTokensMixin96","parameters":[{"description":"MsgTransferTokens is used to transfer tokens.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgTransferTokens"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgTransferTokensResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UniversalUpdateCollectionMixin96","parameters":[{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateCollectionMixin96","parameters":[{"description":"MsgUpdateCollection is used to update a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UpdateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateDynamicStoreMixin96","parameters":[{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin96","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v28.Msg/UpdateUserApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateUserApprovalsMixin96","parameters":[{"description":"MsgUpdateUserApprovals is used to update user approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateUserApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v28.MsgUpdateUserApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/CastVote":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CastVoteMixin116","parameters":[{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgCastVote"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgCastVoteResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/CreateAddressLists":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateAddressListsMixin116","parameters":[{"description":"MsgCreateAddressLists is used to create address lists.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateAddressLists"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateAddressListsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/CreateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateCollectionMixin116","parameters":[{"description":"MsgCreateCollection is used to create a new collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/CreateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_CreateDynamicStoreMixin116","parameters":[{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgCreateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/DeleteCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteCollectionMixin116","parameters":[{"description":"MsgDeleteCollection is used to delete a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/DeleteDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteDynamicStoreMixin116","parameters":[{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/DeleteIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteIncomingApprovalMixin116","parameters":[{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/DeleteOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_DeleteOutgoingApprovalMixin116","parameters":[{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgDeleteOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/PurgeApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_PurgeApprovalsMixin116","parameters":[{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgPurgeApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgPurgeApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetCollectionApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionApprovalsMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCollectionApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCollectionApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetCollectionMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCollectionMetadataMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCollectionMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCollectionMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetCustomData":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetCustomDataMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCustomData"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetCustomDataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetDynamicStoreValue":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetDynamicStoreValueMixin116","parameters":[{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetDynamicStoreValue"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetDynamicStoreValueResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetIncomingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIncomingApprovalMixin116","parameters":[{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetIncomingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetIncomingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetIsArchived":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetIsArchivedMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetIsArchived"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetIsArchivedResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetManager":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetManagerMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetManager"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetManagerResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetOutgoingApproval":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetOutgoingApprovalMixin116","parameters":[{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetOutgoingApproval"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetOutgoingApprovalResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetReservedProtocolAddress":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetReservedProtocolAddressMixin116","parameters":[{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetReservedProtocolAddress"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetReservedProtocolAddressResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetStandards":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetStandardsMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetStandards"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetStandardsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetTokenMetadata":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_SetTokenMetadataMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetTokenMetadata"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetTokenMetadataResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/SetValidTokenIds":{"post":{"tags":["Msg"],"summary":"Helper message types for UniversalUpdateCollection subsets","operationId":"GithubCombitbadgesbitbadgeschainMsg_SetValidTokenIdsMixin116","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgSetValidTokenIds"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgSetValidTokenIdsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/TransferTokens":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_TransferTokensMixin116","parameters":[{"description":"MsgTransferTokens is used to transfer tokens.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgTransferTokens"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgTransferTokensResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UniversalUpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UniversalUpdateCollectionMixin116","parameters":[{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUniversalUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUniversalUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UpdateCollection":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateCollectionMixin116","parameters":[{"description":"MsgUpdateCollection is used to update a collection.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateCollection"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateCollectionResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UpdateDynamicStore":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateDynamicStoreMixin116","parameters":[{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateDynamicStore"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateDynamicStoreResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UpdateParams":{"post":{"tags":["Msg"],"summary":"UpdateParams defines a (governance) operation for updating the module\nparameters. The authority defaults to the x/gov module account.","operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateParamsMixin116","parameters":[{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateParams"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateParamsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}},"/tokenization.v29.Msg/UpdateUserApprovals":{"post":{"tags":["Msg"],"operationId":"GithubCombitbadgesbitbadgeschainMsg_UpdateUserApprovalsMixin116","parameters":[{"description":"MsgUpdateUserApprovals is used to update user approvals.","name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateUserApprovals"}}],"responses":{"200":{"description":"A successful response.","schema":{"$ref":"#/definitions/tokenization.v29.MsgUpdateUserApprovalsResponse"}},"default":{"description":"An unexpected error response.","schema":{"$ref":"#/definitions/google.rpc.Status"}}}}}},"definitions":{"cosmos.auth.v1beta1.AddressBytesToStringResponse":{"description":"AddressBytesToStringResponse is the response type for AddressString rpc method.","type":"object","properties":{"address_string":{"type":"string"}}},"cosmos.auth.v1beta1.AddressStringToBytesResponse":{"description":"AddressStringToBytesResponse is the response type for AddressBytes rpc method.","type":"object","properties":{"address_bytes":{"type":"string","format":"byte"}}},"cosmos.auth.v1beta1.BaseAccount":{"description":"BaseAccount defines a base account type. It contains all the necessary fields\nfor basic account functionality. Any custom account type should extend this\ntype for additional functionality (e.g. vesting).","type":"object","properties":{"account_number":{"type":"string","format":"uint64"},"address":{"type":"string"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"sequence":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.Bech32PrefixResponse":{"description":"Bech32PrefixResponse is the response type for Bech32Prefix rpc method.","type":"object","properties":{"bech32_prefix":{"type":"string"}}},"cosmos.auth.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/auth parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.auth.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.auth.v1beta1.Params":{"description":"Params defines the parameters for the auth module.","type":"object","properties":{"max_memo_characters":{"type":"string","format":"uint64"},"sig_verify_cost_ed25519":{"type":"string","format":"uint64"},"sig_verify_cost_secp256k1":{"type":"string","format":"uint64"},"tx_sig_limit":{"type":"string","format":"uint64"},"tx_size_cost_per_byte":{"type":"string","format":"uint64"}}},"cosmos.auth.v1beta1.QueryAccountAddressByIDResponse":{"type":"object","title":"QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method","properties":{"account_address":{"type":"string"}}},"cosmos.auth.v1beta1.QueryAccountInfoResponse":{"description":"QueryAccountInfoResponse is the Query/AccountInfo response type.","type":"object","properties":{"info":{"description":"info is the account info which is represented by BaseAccount.","$ref":"#/definitions/cosmos.auth.v1beta1.BaseAccount"}}},"cosmos.auth.v1beta1.QueryAccountResponse":{"description":"QueryAccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"account":{"description":"account defines the account of the corresponding address.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryAccountsResponse":{"description":"QueryAccountsResponse is the response type for the Query/Accounts RPC method.","type":"object","properties":{"accounts":{"type":"array","title":"accounts are the existing accounts","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.auth.v1beta1.QueryModuleAccountByNameResponse":{"description":"QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method.","type":"object","properties":{"account":{"$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.auth.v1beta1.QueryModuleAccountsResponse":{"description":"QueryModuleAccountsResponse is the response type for the Query/ModuleAccounts RPC method.","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.auth.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.auth.v1beta1.Params"}}},"cosmos.authz.v1beta1.Grant":{"description":"Grant gives permissions to execute\nthe provide method with expiration time.","type":"object","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time","title":"time when the grant will expire and will be pruned. If null, then the grant\ndoesn't have a time expiration (other conditions in `authorization`\nmay apply to invalidate the grant)"}}},"cosmos.authz.v1beta1.GrantAuthorization":{"type":"object","title":"GrantAuthorization extends a grant with both the addresses of the grantee and granter.\nIt is used in genesis.proto and query.proto","properties":{"authorization":{"$ref":"#/definitions/google.protobuf.Any"},"expiration":{"type":"string","format":"date-time"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgExec":{"description":"MsgExec attempts to execute the provided messages using\nauthorizations granted to the grantee. Each message should have only\none signer corresponding to the granter of the authorization.","type":"object","properties":{"grantee":{"type":"string"},"msgs":{"description":"Execute Msg.\nThe x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg))\ntriple and validate it.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.authz.v1beta1.MsgExecResponse":{"description":"MsgExecResponse defines the Msg/MsgExecResponse response type.","type":"object","properties":{"results":{"type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.authz.v1beta1.MsgGrant":{"description":"MsgGrant is a request type for Grant method. It declares authorization to the grantee\non behalf of the granter with the provided expiration time.","type":"object","properties":{"grant":{"$ref":"#/definitions/cosmos.authz.v1beta1.Grant"},"grantee":{"type":"string"},"granter":{"type":"string"}}},"cosmos.authz.v1beta1.MsgGrantResponse":{"description":"MsgGrantResponse defines the Msg/MsgGrant response type.","type":"object"},"cosmos.authz.v1beta1.MsgRevoke":{"description":"MsgRevoke revokes any authorization with the provided sdk.Msg type on the\ngranter's account with that has been granted to the grantee.","type":"object","properties":{"grantee":{"type":"string"},"granter":{"type":"string"},"msg_type_url":{"type":"string"}}},"cosmos.authz.v1beta1.MsgRevokeResponse":{"description":"MsgRevokeResponse defines the Msg/MsgRevokeResponse response type.","type":"object"},"cosmos.authz.v1beta1.QueryGranteeGrantsResponse":{"description":"QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted to the grantee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGranterGrantsResponse":{"description":"QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method.","type":"object","properties":{"grants":{"description":"grants is a list of grants granted by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.GrantAuthorization"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.authz.v1beta1.QueryGrantsResponse":{"description":"QueryGrantsResponse is the response type for the Query/Authorizations RPC method.","type":"object","properties":{"grants":{"description":"authorizations is a list of grants granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.authz.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.autocli.v1.AppOptionsRequest":{"description":"AppOptionsRequest is the RemoteInfoService/AppOptions request type.","type":"object"},"cosmos.autocli.v1.AppOptionsResponse":{"description":"AppOptionsResponse is the RemoteInfoService/AppOptions response type.","type":"object","properties":{"module_options":{"description":"module_options is a map of module name to autocli module options.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ModuleOptions"}}}},"cosmos.autocli.v1.FlagOptions":{"description":"FlagOptions are options for flags generated from rpc request fields.\nBy default, all request fields are configured as flags based on the\nkebab-case name of the field. Fields can be turned into positional arguments\ninstead by using RpcCommandOptions.positional_args.","type":"object","properties":{"default_value":{"description":"default_value is the default value as text.","type":"string"},"deprecated":{"description":"deprecated is the usage text to show if this flag is deprecated.","type":"string"},"hidden":{"type":"boolean","title":"hidden hides the flag from help/usage text"},"name":{"description":"name is an alternate name to use for the field flag.","type":"string"},"shorthand":{"description":"shorthand is a one-letter abbreviated flag.","type":"string"},"shorthand_deprecated":{"description":"shorthand_deprecated is the usage text to show if the shorthand of this flag is deprecated.","type":"string"},"usage":{"description":"usage is the help message.","type":"string"}}},"cosmos.autocli.v1.ModuleOptions":{"description":"ModuleOptions describes the CLI options for a Cosmos SDK module.","type":"object","properties":{"query":{"description":"query describes the queries commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"},"tx":{"description":"tx describes the tx commands for the module.","$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}},"cosmos.autocli.v1.PositionalArgDescriptor":{"description":"PositionalArgDescriptor describes a positional argument.","type":"object","properties":{"optional":{"description":"optional makes the last positional parameter optional.\nNote: It is mutually exclusive with varargs.","type":"boolean"},"proto_field":{"description":"proto_field specifies the proto field to use as the positional arg. Any\nfields used as positional args will not have a flag generated.","type":"string"},"varargs":{"description":"varargs makes a positional parameter a varargs parameter. This can only be\napplied to last positional parameter and the proto_field must a repeated\nfield. Note: It is mutually exclusive with optional.","type":"boolean"}}},"cosmos.autocli.v1.RpcCommandOptions":{"description":"RpcCommandOptions specifies options for commands generated from protobuf\nrpc methods.","type":"object","properties":{"alias":{"description":"alias is an array of aliases that can be used instead of the first word in Use.","type":"array","items":{"type":"string"}},"deprecated":{"description":"deprecated defines, if this command is deprecated and should print this string when used.","type":"string"},"example":{"description":"example is examples of how to use the command.","type":"string"},"flag_options":{"description":"flag_options are options for flags generated from rpc request fields.\nBy default all request fields are configured as flags. They can\nalso be configured as positional args instead using positional_args.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.FlagOptions"}},"gov_proposal":{"description":"gov_proposal specifies whether autocli should generate a gov proposal transaction for this rpc method.\nNormally autocli generates a transaction containing the message and broadcast it.\nHowever, when true, autocli generates a proposal transaction containing the message and broadcast it.\nThis option is ineffective for query commands.","type":"boolean"},"long":{"description":"long is the long message shown in the 'help \u003cthis-command\u003e' output.","type":"string"},"positional_args":{"description":"positional_args specifies positional arguments for the command.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.PositionalArgDescriptor"}},"rpc_method":{"description":"rpc_method is short name of the protobuf rpc method that this command is\ngenerated from.","type":"string"},"short":{"description":"short is the short description shown in the 'help' output.","type":"string"},"skip":{"description":"skip specifies whether to skip this rpc method when generating commands.","type":"boolean"},"suggest_for":{"description":"suggest_for is an array of command names for which this command will be suggested -\nsimilar to aliases but only suggests.","type":"array","items":{"type":"string"}},"use":{"description":"use is the one-line usage method. It also allows specifying an alternate\nname for the command as the first word of the usage text.\n\nBy default the name of an rpc command is the kebab-case short name of the\nrpc method.","type":"string"},"version":{"description":"version defines the version for this command. If this value is non-empty and the command does not\ndefine a \"version\" flag, a \"version\" boolean flag will be added to the command and, if specified,\nwill print content of the \"Version\" variable. A shorthand \"v\" flag will also be added if the\ncommand does not define one.","type":"string"}}},"cosmos.autocli.v1.ServiceCommandDescriptor":{"description":"ServiceCommandDescriptor describes a CLI command based on a protobuf service.","type":"object","properties":{"enhance_custom_command":{"description":"enhance_custom_commands specifies whether to skip the service when generating commands, if a custom command already\nexists, or enhance the existing command. If set to true, the custom command will be enhanced with the services from\ngRPC. otherwise when a custom command exists, no commands will be generated for the service.","type":"boolean"},"rpc_command_options":{"description":"rpc_command_options are options for commands generated from rpc methods.\nIf no options are specified for a given rpc method on the service, a\ncommand will be generated for that method with the default options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.autocli.v1.RpcCommandOptions"}},"service":{"description":"service is the fully qualified name of the protobuf service to build\nthe command from. It can be left empty if sub_commands are used instead\nwhich may be the case if a module provides multiple tx and/or query services.","type":"string"},"short":{"description":"short is an optional parameter used to override the short description of the auto generated command.","type":"string"},"sub_commands":{"description":"sub_commands is a map of optional sub-commands for this command based on\ndifferent protobuf services. The map key is used as the name of the\nsub-command.","type":"object","additionalProperties":{"$ref":"#/definitions/cosmos.autocli.v1.ServiceCommandDescriptor"}}}},"cosmos.bank.v1beta1.DenomOwner":{"description":"DenomOwner defines structure representing an account that owns or holds a\nparticular denominated token. It contains the account address and account\nbalance of the denominated token.","type":"object","properties":{"address":{"description":"address defines the address that owns a particular denomination.","type":"string"},"balance":{"description":"balance is the balance of the denominated coin for an account.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.DenomUnit":{"description":"DenomUnit represents a struct that describes a given\ndenomination unit of the basic token.","type":"object","properties":{"aliases":{"type":"array","title":"aliases is a list of string aliases for the given denom","items":{"type":"string"}},"denom":{"description":"denom represents the string name of the given denom unit (e.g uatom).","type":"string"},"exponent":{"description":"exponent represents power of 10 exponent that one must\nraise the base_denom to in order to equal the given DenomUnit's denom\n1 denom = 10^exponent base_denom\n(e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with\nexponent = 6, thus: 1 atom = 10^6 uatom).","type":"integer","format":"int64"}}},"cosmos.bank.v1beta1.Input":{"description":"Input models transaction input.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Metadata":{"description":"Metadata represents a struct that describes\na basic token.","type":"object","properties":{"base":{"description":"base represents the base denom (should be the DenomUnit with exponent = 0).","type":"string"},"denom_units":{"type":"array","title":"denom_units represents the list of DenomUnit's for a given coin","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomUnit"}},"description":{"type":"string"},"display":{"description":"display indicates the suggested denom that should be\ndisplayed in clients.","type":"string"},"name":{"type":"string","title":"name defines the name of the token (eg: Cosmos Atom)"},"symbol":{"description":"symbol is the token symbol usually shown on exchanges (eg: ATOM). This can\nbe the same as the display.","type":"string"},"uri":{"description":"URI to a document (on or off-chain) that contains additional information. Optional.","type":"string"},"uri_hash":{"description":"URIHash is a sha256 hash of a document pointed by URI. It's used to verify that\nthe document didn't change. Optional.","type":"string"}}},"cosmos.bank.v1beta1.MsgMultiSend":{"description":"MsgMultiSend represents an arbitrary multi-in, multi-out send message.","type":"object","properties":{"inputs":{"description":"Inputs, despite being `repeated`, only allows one sender input. This is\nchecked in MsgMultiSend's ValidateBasic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Input"}},"outputs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Output"}}}},"cosmos.bank.v1beta1.MsgMultiSendResponse":{"description":"MsgMultiSendResponse defines the Msg/MultiSend response type.","type":"object"},"cosmos.bank.v1beta1.MsgSend":{"description":"MsgSend represents a message to send coins from one account to another.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.bank.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.bank.v1beta1.MsgSetSendEnabled":{"description":"MsgSetSendEnabled is the Msg/SetSendEnabled request type.\n\nOnly entries to add/update/delete need to be included.\nExisting SendEnabled entries that are not included in this\nmessage are left unchanged.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module.","type":"string"},"send_enabled":{"description":"send_enabled is the list of entries to add or update.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}},"use_default_for":{"description":"use_default_for is a list of denoms that should use the params.default_send_enabled value.\nDenoms listed here will have their SendEnabled entries deleted.\nIf a denom is included that doesn't have a SendEnabled entry,\nit will be ignored.","type":"array","items":{"type":"string"}}}},"cosmos.bank.v1beta1.MsgSetSendEnabledResponse":{"description":"MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type.","type":"object"},"cosmos.bank.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/bank parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.bank.v1beta1.Output":{"description":"Output models transaction outputs.","type":"object","properties":{"address":{"type":"string"},"coins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.Params":{"description":"Params defines the parameters for the bank module.","type":"object","properties":{"default_send_enabled":{"type":"boolean"},"send_enabled":{"description":"Deprecated: Use of SendEnabled in params is deprecated.\nFor genesis, use the newly added send_enabled field in the genesis object.\nStorage, lookup, and manipulation of this information is now in the keeper.\n\nAs of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QueryAllBalancesResponse":{"description":"QueryAllBalancesResponse is the response type for the Query/AllBalances RPC\nmethod.","type":"object","properties":{"balances":{"description":"balances is the balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryBalanceResponse":{"description":"QueryBalanceResponse is the response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryDenomMetadataByQueryStringResponse":{"description":"QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC\nmethod. Identical with QueryDenomMetadataResponse but receives denom as query string in request.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomMetadataResponse":{"description":"QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC\nmethod.","type":"object","properties":{"metadata":{"description":"metadata describes and provides all the client information for the requested token.","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}}},"cosmos.bank.v1beta1.QueryDenomOwnersByQueryResponse":{"description":"QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query.","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomOwnersResponse":{"description":"QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query.","type":"object","properties":{"denom_owners":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.DenomOwner"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryDenomsMetadataResponse":{"description":"QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC\nmethod.","type":"object","properties":{"metadatas":{"description":"metadata provides the client information for all the registered tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.Metadata"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/bank parameters.","type":"object","properties":{"params":{"description":"params provides the parameters of the bank module.","$ref":"#/definitions/cosmos.bank.v1beta1.Params"}}},"cosmos.bank.v1beta1.QuerySendEnabledResponse":{"description":"QuerySendEnabledResponse defines the RPC response of a SendEnable query.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response. This field is only\npopulated if the denoms field in the request is empty.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"send_enabled":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.bank.v1beta1.SendEnabled"}}}},"cosmos.bank.v1beta1.QuerySpendableBalanceByDenomResponse":{"description":"QuerySpendableBalanceByDenomResponse defines the gRPC response structure for\nquerying an account's spendable balance for a specific denom.","type":"object","properties":{"balance":{"description":"balance is the balance of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QuerySpendableBalancesResponse":{"description":"QuerySpendableBalancesResponse defines the gRPC response structure for querying\nan account's spendable balances.","type":"object","properties":{"balances":{"description":"balances is the spendable balances of all the coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.bank.v1beta1.QuerySupplyOfResponse":{"description":"QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method.","type":"object","properties":{"amount":{"description":"amount is the supply of the coin.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.bank.v1beta1.QueryTotalSupplyResponse":{"type":"object","title":"QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC\nmethod","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"supply":{"type":"array","title":"supply is the supply of the coins","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.bank.v1beta1.SendEnabled":{"description":"SendEnabled maps coin denom to a send_enabled status (whether a denom is\nsendable).","type":"object","properties":{"denom":{"type":"string"},"enabled":{"type":"boolean"}}},"cosmos.base.abci.v1beta1.ABCIMessageLog":{"description":"ABCIMessageLog defines a structure containing an indexed tx ABCI message log.","type":"object","properties":{"events":{"description":"Events contains a slice of Event objects that were emitted during some\nexecution.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.StringEvent"}},"log":{"type":"string"},"msg_index":{"type":"integer","format":"int64"}}},"cosmos.base.abci.v1beta1.Attribute":{"description":"Attribute defines an attribute wrapper where the key and value are\nstrings instead of raw bytes.","type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"cosmos.base.abci.v1beta1.GasInfo":{"description":"GasInfo defines tx execution gas context.","type":"object","properties":{"gas_used":{"description":"GasUsed is the amount of gas actually consumed.","type":"string","format":"uint64"},"gas_wanted":{"description":"GasWanted is the maximum units of work we allow this tx to perform.","type":"string","format":"uint64"}}},"cosmos.base.abci.v1beta1.Result":{"description":"Result is the union of ResponseFormat and ResponseCheckTx.","type":"object","properties":{"data":{"description":"Data is any data returned from message or handler execution. It MUST be\nlength prefixed in order to separate data from multiple message executions.\nDeprecated. This field is still populated, but prefer msg_response instead\nbecause it also contains the Msg response typeURL.","type":"string","format":"byte"},"events":{"description":"Events contains a slice of Event objects that were emitted during message\nor handler execution.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"log":{"description":"Log contains the log information from message or handler execution.","type":"string"},"msg_responses":{"description":"msg_responses contains the Msg handler responses type packed in Anys.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"cosmos.base.abci.v1beta1.StringEvent":{"description":"StringEvent defines en Event object wrapper where all the attributes\ncontain key/value pairs that are strings instead of raw bytes.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.Attribute"}},"type":{"type":"string"}}},"cosmos.base.abci.v1beta1.TxResponse":{"description":"TxResponse defines a structure containing relevant tx data and metadata. The\ntags are stringified and the log is JSON decoded.","type":"object","properties":{"code":{"description":"Response code.","type":"integer","format":"int64"},"codespace":{"type":"string","title":"Namespace for the Code"},"data":{"description":"Result bytes, if any.","type":"string"},"events":{"description":"Events defines all the events emitted by processing a transaction. Note,\nthese events include those emitted by processing all the messages and those\nemitted from the ante. Whereas Logs contains the events, with\nadditional metadata, emitted only by processing the messages.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"description":"Amount of gas consumed by transaction.","type":"string","format":"int64"},"gas_wanted":{"description":"Amount of gas requested for transaction.","type":"string","format":"int64"},"height":{"type":"string","format":"int64","title":"The block height"},"info":{"description":"Additional information. May be non-deterministic.","type":"string"},"logs":{"description":"The output of the application's logger (typed). May be non-deterministic.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.ABCIMessageLog"}},"raw_log":{"description":"The output of the application's logger (raw string). May be\nnon-deterministic.","type":"string"},"timestamp":{"description":"Time of the previous block. For heights \u003e 1, it's the weighted median of\nthe timestamps of the valid votes in the block.LastCommit. For height == 1,\nit's genesis time.","type":"string"},"tx":{"description":"The request transaction bytes.","$ref":"#/definitions/google.protobuf.Any"},"txhash":{"description":"The transaction hash.","type":"string"}}},"cosmos.base.node.v1beta1.ConfigResponse":{"description":"ConfigResponse defines the response structure for the Config gRPC query.","type":"object","properties":{"halt_height":{"type":"string","format":"uint64"},"minimum_gas_price":{"type":"string"},"pruning_interval":{"type":"string"},"pruning_keep_recent":{"type":"string"}}},"cosmos.base.node.v1beta1.StatusResponse":{"description":"StateResponse defines the response structure for the status of a node.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"app hash of the current block"},"earliest_store_height":{"type":"string","format":"uint64","title":"earliest block height available in the store"},"height":{"type":"string","format":"uint64","title":"current block height"},"timestamp":{"type":"string","format":"date-time","title":"block height timestamp"},"validator_hash":{"type":"string","format":"byte","title":"validator hash provided by the consensus header"}}},"cosmos.base.query.v1beta1.PageRequest":{"description":"message SomeRequest {\n Foo some_parameter = 1;\n PageRequest pagination = 2;\n }","type":"object","title":"PageRequest is to be embedded in gRPC request messages for efficient\npagination. Ex:","properties":{"count_total":{"description":"count_total is set to true to indicate that the result set should include\na count of the total number of items available for pagination in UIs.\ncount_total is only respected when offset is used. It is ignored when key\nis set.","type":"boolean"},"key":{"description":"key is a value returned in PageResponse.next_key to begin\nquerying the next page most efficiently. Only one of offset or key\nshould be set.","type":"string","format":"byte"},"limit":{"description":"limit is the total number of results to be returned in the result page.\nIf left empty it will default to a value to be set by each app.","type":"string","format":"uint64"},"offset":{"description":"offset is a numeric offset that can be used when key is unavailable.\nIt is less efficient than using key. Only one of offset or key should\nbe set.","type":"string","format":"uint64"},"reverse":{"description":"reverse is set to true if results are to be returned in the descending order.","type":"boolean"}}},"cosmos.base.query.v1beta1.PageResponse":{"description":"PageResponse is to be embedded in gRPC response messages where the\ncorresponding request message has used PageRequest.\n\n message SomeResponse {\n repeated Bar results = 1;\n PageResponse page = 2;\n }","type":"object","properties":{"next_key":{"description":"next_key is the key to be passed to PageRequest.key to\nquery the next page most efficiently. It will be empty if\nthere are no more results.","type":"string","format":"byte"},"total":{"type":"string","format":"uint64","title":"total is total number of results available if PageRequest.count_total\nwas set, its value is undefined otherwise"}}},"cosmos.base.reflection.v1beta1.ListAllInterfacesResponse":{"description":"ListAllInterfacesResponse is the response type of the ListAllInterfaces RPC.","type":"object","properties":{"interface_names":{"description":"interface_names is an array of all the registered interfaces.","type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v1beta1.ListImplementationsResponse":{"description":"ListImplementationsResponse is the response type of the ListImplementations\nRPC.","type":"object","properties":{"implementation_message_names":{"type":"array","items":{"type":"string"}}}},"cosmos.base.reflection.v2alpha1.AuthnDescriptor":{"type":"object","title":"AuthnDescriptor provides information on how to sign transactions without relying\non the online RPCs GetTxMetadata and CombineUnsignedTxAndSignatures","properties":{"sign_modes":{"type":"array","title":"sign_modes defines the supported signature algorithm","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.SigningModeDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ChainDescriptor":{"type":"object","title":"ChainDescriptor describes chain information of the application","properties":{"id":{"type":"string","title":"id is the chain id"}}},"cosmos.base.reflection.v2alpha1.CodecDescriptor":{"type":"object","title":"CodecDescriptor describes the registered interfaces and provides metadata information on the types","properties":{"interfaces":{"type":"array","title":"interfaces is a list of the registerted interfaces descriptors","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.ConfigurationDescriptor":{"type":"object","title":"ConfigurationDescriptor contains metadata information on the sdk.Config","properties":{"bech32_account_address_prefix":{"type":"string","title":"bech32_account_address_prefix is the account address prefix"}}},"cosmos.base.reflection.v2alpha1.GetAuthnDescriptorResponse":{"type":"object","title":"GetAuthnDescriptorResponse is the response returned by the GetAuthnDescriptor RPC","properties":{"authn":{"title":"authn describes how to authenticate to the application when sending transactions","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.AuthnDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetChainDescriptorResponse":{"type":"object","title":"GetChainDescriptorResponse is the response returned by the GetChainDescriptor RPC","properties":{"chain":{"title":"chain describes application chain information","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ChainDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetCodecDescriptorResponse":{"type":"object","title":"GetCodecDescriptorResponse is the response returned by the GetCodecDescriptor RPC","properties":{"codec":{"title":"codec describes the application codec such as registered interfaces and implementations","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.CodecDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetConfigurationDescriptorResponse":{"type":"object","title":"GetConfigurationDescriptorResponse is the response returned by the GetConfigurationDescriptor RPC","properties":{"config":{"title":"config describes the application's sdk.Config","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.ConfigurationDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetQueryServicesDescriptorResponse":{"type":"object","title":"GetQueryServicesDescriptorResponse is the response returned by the GetQueryServicesDescriptor RPC","properties":{"queries":{"title":"queries provides information on the available queryable services","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServicesDescriptor"}}},"cosmos.base.reflection.v2alpha1.GetTxDescriptorResponse":{"type":"object","title":"GetTxDescriptorResponse is the response returned by the GetTxDescriptor RPC","properties":{"tx":{"title":"tx provides information on msgs that can be forwarded to the application\nalongside the accepted transaction protobuf type","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.TxDescriptor"}}},"cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor":{"type":"object","title":"InterfaceAcceptingMessageDescriptor describes a protobuf message which contains\nan interface represented as a google.protobuf.Any","properties":{"field_descriptor_names":{"type":"array","title":"field_descriptor_names is a list of the protobuf name (not fullname) of the field\nwhich contains the interface as google.protobuf.Any (the interface is the same, but\nit can be in multiple fields of the same proto message)","items":{"type":"string"}},"fullname":{"type":"string","title":"fullname is the protobuf fullname of the type containing the interface"}}},"cosmos.base.reflection.v2alpha1.InterfaceDescriptor":{"type":"object","title":"InterfaceDescriptor describes the implementation of an interface","properties":{"fullname":{"type":"string","title":"fullname is the name of the interface"},"interface_accepting_messages":{"type":"array","title":"interface_accepting_messages contains information regarding the proto messages which contain the interface as\ngoogle.protobuf.Any field","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceAcceptingMessageDescriptor"}},"interface_implementers":{"type":"array","title":"interface_implementers is a list of the descriptors of the interface implementers","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor"}}}},"cosmos.base.reflection.v2alpha1.InterfaceImplementerDescriptor":{"type":"object","title":"InterfaceImplementerDescriptor describes an interface implementer","properties":{"fullname":{"type":"string","title":"fullname is the protobuf queryable name of the interface implementer"},"type_url":{"type":"string","title":"type_url defines the type URL used when marshalling the type as any\nthis is required so we can provide type safe google.protobuf.Any marshalling and\nunmarshalling, making sure that we don't accept just 'any' type\nin our interface fields"}}},"cosmos.base.reflection.v2alpha1.MsgDescriptor":{"type":"object","title":"MsgDescriptor describes a cosmos-sdk message that can be delivered with a transaction","properties":{"msg_type_url":{"description":"msg_type_url contains the TypeURL of a sdk.Msg.","type":"string"}}},"cosmos.base.reflection.v2alpha1.QueryMethodDescriptor":{"type":"object","title":"QueryMethodDescriptor describes a queryable method of a query service\nno other info is provided beside method name and tendermint queryable path\nbecause it would be redundant with the grpc reflection service","properties":{"full_query_path":{"type":"string","title":"full_query_path is the path that can be used to query\nthis method via tendermint abci.Query"},"name":{"type":"string","title":"name is the protobuf name (not fullname) of the method"}}},"cosmos.base.reflection.v2alpha1.QueryServiceDescriptor":{"type":"object","title":"QueryServiceDescriptor describes a cosmos-sdk queryable service","properties":{"fullname":{"type":"string","title":"fullname is the protobuf fullname of the service descriptor"},"is_module":{"type":"boolean","title":"is_module describes if this service is actually exposed by an application's module"},"methods":{"type":"array","title":"methods provides a list of query service methods","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryMethodDescriptor"}}}},"cosmos.base.reflection.v2alpha1.QueryServicesDescriptor":{"type":"object","title":"QueryServicesDescriptor contains the list of cosmos-sdk queriable services","properties":{"query_services":{"type":"array","title":"query_services is a list of cosmos-sdk QueryServiceDescriptor","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.QueryServiceDescriptor"}}}},"cosmos.base.reflection.v2alpha1.SigningModeDescriptor":{"type":"object","title":"SigningModeDescriptor provides information on a signing flow of the application\nNOTE(fdymylja): here we could go as far as providing an entire flow on how\nto sign a message given a SigningModeDescriptor, but it's better to think about\nthis another time","properties":{"authn_info_provider_method_fullname":{"type":"string","title":"authn_info_provider_method_fullname defines the fullname of the method to call to get\nthe metadata required to authenticate using the provided sign_modes"},"name":{"type":"string","title":"name defines the unique name of the signing mode"},"number":{"type":"integer","format":"int32","title":"number is the unique int32 identifier for the sign_mode enum"}}},"cosmos.base.reflection.v2alpha1.TxDescriptor":{"type":"object","title":"TxDescriptor describes the accepted transaction type","properties":{"fullname":{"description":"fullname is the protobuf fullname of the raw transaction type (for instance the tx.Tx type)\nit is not meant to support polymorphism of transaction types, it is supposed to be used by\nreflection clients to understand if they can handle a specific transaction type in an application.","type":"string"},"msgs":{"type":"array","title":"msgs lists the accepted application messages (sdk.Msg)","items":{"type":"object","$ref":"#/definitions/cosmos.base.reflection.v2alpha1.MsgDescriptor"}}}},"cosmos.base.tendermint.v1beta1.ABCIQueryResponse":{"description":"ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query.\n\nNote: This type is a duplicate of the ResponseQuery proto type defined in\nTendermint.","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"type":"string","title":"nondeterministic"},"proof_ops":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOps"},"value":{"type":"string","format":"byte"}}},"cosmos.base.tendermint.v1beta1.Block":{"description":"Block is tendermint type Block, with the Header proposer address\nfield converted to bech32 string.","type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse":{"description":"GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestBlockResponse":{"description":"GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method.","type":"object","properties":{"block":{"title":"Deprecated: please use `sdk_block` instead","$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"sdk_block":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Block"}}},"cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse":{"description":"GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.GetNodeInfoResponse":{"description":"GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method.","type":"object","properties":{"application_version":{"$ref":"#/definitions/cosmos.base.tendermint.v1beta1.VersionInfo"},"default_node_info":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfo"}}},"cosmos.base.tendermint.v1beta1.GetSyncingResponse":{"description":"GetSyncingResponse is the response type for the Query/GetSyncing RPC method.","type":"object","properties":{"syncing":{"type":"boolean"}}},"cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse":{"description":"GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method.","type":"object","properties":{"block_height":{"type":"string","format":"int64"},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Validator"}}}},"cosmos.base.tendermint.v1beta1.Header":{"description":"Header defines the structure of a Tendermint block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"description":"proposer_address is the original block proposer address, formatted as a Bech32 string.\nIn Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string\nfor better UX.\n\noriginal proposer of the block","type":"string"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"cosmos.base.tendermint.v1beta1.Module":{"type":"object","title":"Module is the type for VersionInfo","properties":{"path":{"type":"string","title":"module path"},"sum":{"type":"string","title":"checksum"},"version":{"type":"string","title":"module version"}}},"cosmos.base.tendermint.v1beta1.ProofOp":{"description":"ProofOp defines an operation used for calculating Merkle root. The data could\nbe arbitrary format, providing necessary data for example neighbouring node\nhash.\n\nNote: This type is a duplicate of the ProofOp proto type defined in Tendermint.","type":"object","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"cosmos.base.tendermint.v1beta1.ProofOps":{"description":"ProofOps is Merkle proof defined by the list of ProofOps.\n\nNote: This type is a duplicate of the ProofOps proto type defined in Tendermint.","type":"object","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.ProofOp"}}}},"cosmos.base.tendermint.v1beta1.Validator":{"description":"Validator is the type for the validator-set.","type":"object","properties":{"address":{"type":"string"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/google.protobuf.Any"},"voting_power":{"type":"string","format":"int64"}}},"cosmos.base.tendermint.v1beta1.VersionInfo":{"description":"VersionInfo is the type for the GetNodeInfoResponse message.","type":"object","properties":{"app_name":{"type":"string"},"build_deps":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.tendermint.v1beta1.Module"}},"build_tags":{"type":"string"},"cosmos_sdk_version":{"type":"string"},"git_commit":{"type":"string"},"go_version":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"}}},"cosmos.base.v1beta1.Coin":{"description":"Coin defines a token with a denomination and an amount.\n\nNOTE: The amount field is an Int which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.base.v1beta1.DecCoin":{"description":"DecCoin defines a token with a denomination and a decimal amount.\n\nNOTE: The amount field is an Dec which implements the custom method\nsignatures required by gogoproto.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"}}},"cosmos.benchmark.v1.MsgLoadTest":{"description":"MsgLoadTestOps defines a message containing a sequence of load test operations.","type":"object","properties":{"caller":{"type":"string","format":"byte"},"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.benchmark.v1.Op"}}}},"cosmos.benchmark.v1.MsgLoadTestResponse":{"description":"MsgLoadTestResponse defines a message containing the results of a load test operation.","type":"object","properties":{"total_errors":{"type":"string","format":"uint64"},"total_time":{"type":"string","format":"uint64"}}},"cosmos.benchmark.v1.Op":{"description":"Op is a message describing a benchmark operation.","type":"object","properties":{"actor":{"type":"string"},"delete":{"type":"boolean"},"exists":{"type":"boolean"},"iterations":{"type":"integer","format":"int64"},"key_length":{"type":"string","format":"uint64"},"seed":{"type":"string","format":"uint64"},"value_length":{"type":"string","format":"uint64"}}},"cosmos.circuit.v1.AccountResponse":{"description":"AccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"permission":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.AccountsResponse":{"description":"AccountsResponse is the response type for the Query/Accounts RPC method.","type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.circuit.v1.GenesisAccountPermissions"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.circuit.v1.DisabledListResponse":{"description":"DisabledListResponse is the response type for the Query/DisabledList RPC method.","type":"object","properties":{"disabled_list":{"type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.GenesisAccountPermissions":{"type":"object","title":"GenesisAccountPermissions is the account permissions for the circuit breaker in genesis","properties":{"address":{"type":"string"},"permissions":{"$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreaker":{"description":"MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type.","type":"object","properties":{"grantee":{"description":"grantee is the account authorized with the provided permissions.","type":"string"},"granter":{"description":"granter is the granter of the circuit breaker permissions and must have\nLEVEL_SUPER_ADMIN.","type":"string"},"permissions":{"description":"permissions are the circuit breaker permissions that the grantee receives.\nThese will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can\nbe specified to revoke all permissions.","$ref":"#/definitions/cosmos.circuit.v1.Permissions"}}},"cosmos.circuit.v1.MsgAuthorizeCircuitBreakerResponse":{"description":"MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgResetCircuitBreaker":{"description":"MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip or reset the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of Msg type URLs to resume processing. If\nit is left empty all Msg processing for type URLs that the account is\nauthorized to trip will resume.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgResetCircuitBreakerResponse":{"description":"MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.MsgTripCircuitBreaker":{"description":"MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type.","type":"object","properties":{"authority":{"description":"authority is the account authorized to trip the circuit breaker.","type":"string"},"msg_type_urls":{"description":"msg_type_urls specifies a list of type URLs to immediately stop processing.\nIF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY.\nThis value is validated against the authority's permissions and if the\nauthority does not have permissions to trip the specified msg type URLs\n(or all URLs), the operation will fail.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.MsgTripCircuitBreakerResponse":{"description":"MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type.","type":"object","properties":{"success":{"type":"boolean"}}},"cosmos.circuit.v1.Permissions":{"description":"Permissions are the permissions that an account has to trip\nor reset the circuit breaker.","type":"object","properties":{"level":{"description":"level is the level of permissions granted to this account.","$ref":"#/definitions/cosmos.circuit.v1.Permissions.Level"},"limit_type_urls":{"description":"limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type\nURLs that the account can trip. It is an error to use limit_type_urls with\na level other than LEVEL_SOME_MSGS.","type":"array","items":{"type":"string"}}}},"cosmos.circuit.v1.Permissions.Level":{"description":"Level is the permission level.\n\n - LEVEL_NONE_UNSPECIFIED: LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit\nbreaker permissions.\n - LEVEL_SOME_MSGS: LEVEL_SOME_MSGS indicates that the account will have permission to\ntrip or reset the circuit breaker for some Msg type URLs. If this level\nis chosen, a non-empty list of Msg type URLs must be provided in\nlimit_type_urls.\n - LEVEL_ALL_MSGS: LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit\nbreaker for Msg's of all type URLs.\n - LEVEL_SUPER_ADMIN: LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker\nactions and can grant permissions to other accounts.","type":"string","default":"LEVEL_NONE_UNSPECIFIED","enum":["LEVEL_NONE_UNSPECIFIED","LEVEL_SOME_MSGS","LEVEL_ALL_MSGS","LEVEL_SUPER_ADMIN"]},"cosmos.consensus.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"abci":{"$ref":"#/definitions/tendermint.types.ABCIParams"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"block":{"description":"params defines the x/consensus parameters to update.\nVersionsParams is not included in this Msg because it is tracked\nsepararately in x/upgrade.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"}}},"cosmos.consensus.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.consensus.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/consensus parameters.","type":"object","properties":{"params":{"description":"params are the tendermint consensus params stored in the consensus module.\nPlease note that `params.version` is not populated in this response, it is\ntracked separately in the x/upgrade module.","$ref":"#/definitions/tendermint.types.ConsensusParams"}}},"cosmos.counter.v1.MsgIncreaseCountResponse":{"description":"MsgIncreaseCountResponse is the Msg/Counter response type.","type":"object","properties":{"new_count":{"description":"new_count is the number of times the counter was incremented.","type":"string","format":"int64"}}},"cosmos.counter.v1.MsgIncreaseCounter":{"description":"MsgIncreaseCounter defines a count Msg service counter.","type":"object","properties":{"count":{"description":"count is the number of times to increment the counter.","type":"string","format":"int64"},"signer":{"description":"signer is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.counter.v1.QueryGetCountRequest":{"description":"QueryGetCountRequest defines the request type for querying x/mock count.","type":"object"},"cosmos.counter.v1.QueryGetCountResponse":{"description":"QueryGetCountResponse defines the response type for querying x/mock count.","type":"object","properties":{"total_count":{"type":"string","format":"int64"}}},"cosmos.crisis.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"constant_fee":{"description":"constant_fee defines the x/crisis parameter.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.crisis.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.crisis.v1beta1.MsgVerifyInvariant":{"description":"MsgVerifyInvariant represents a message to verify a particular invariance.","type":"object","properties":{"invariant_module_name":{"description":"name of the invariant module.","type":"string"},"invariant_route":{"description":"invariant_route is the msg's invariant route.","type":"string"},"sender":{"description":"sender is the account address of private key to send coins to fee collector account.","type":"string"}}},"cosmos.crisis.v1beta1.MsgVerifyInvariantResponse":{"description":"MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type.","type":"object"},"cosmos.crypto.multisig.v1beta1.CompactBitArray":{"description":"CompactBitArray is an implementation of a space efficient bit array.\nThis is used to ensure that the encoded data takes up a minimal amount of\nspace after proto encoding.\nThis is not thread safe, and is not intended for concurrent usage.","type":"object","properties":{"elems":{"type":"string","format":"byte"},"extra_bits_stored":{"type":"integer","format":"int64"}}},"cosmos.distribution.v1beta1.DelegationDelegatorReward":{"description":"DelegationDelegatorReward represents the properties\nof a delegator's delegation reward.","type":"object","properties":{"reward":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpend":{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"recipient":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.","type":"object"},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPool":{"description":"DepositValidatorRewardsPool defines the request structure to provide\nadditional rewards to delegators from a specific validator.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgDepositValidatorRewardsPoolResponse":{"description":"MsgDepositValidatorRewardsPoolResponse defines the response to executing a\nMsgDepositValidatorRewardsPool message.","type":"object"},"cosmos.distribution.v1beta1.MsgFundCommunityPool":{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.distribution.v1beta1.MsgSetWithdrawAddress":{"description":"MsgSetWithdrawAddress sets the withdraw address for\na delegator (or validator self-delegation).","type":"object","properties":{"delegator_address":{"type":"string"},"withdraw_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgSetWithdrawAddressResponse":{"description":"MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response\ntype.","type":"object"},"cosmos.distribution.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/distribution parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward":{"description":"MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator\nfrom a single validator.","type":"object","properties":{"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawDelegatorRewardResponse":{"description":"MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward\nresponse type.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission":{"description":"MsgWithdrawValidatorCommission withdraws the full commission to the validator\naddress.","type":"object","properties":{"validator_address":{"type":"string"}}},"cosmos.distribution.v1beta1.MsgWithdrawValidatorCommissionResponse":{"description":"MsgWithdrawValidatorCommissionResponse defines the\nMsg/WithdrawValidatorCommission response type.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.distribution.v1beta1.Params":{"description":"Params defines the set of params for the distribution module.","type":"object","properties":{"base_proposer_reward":{"description":"Deprecated: The base_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"bonus_proposer_reward":{"description":"Deprecated: The bonus_proposer_reward field is deprecated and is no longer used\nin the x/distribution module's reward mechanism.","type":"string"},"community_tax":{"type":"string"},"withdraw_addr_enabled":{"type":"boolean"}}},"cosmos.distribution.v1beta1.QueryCommunityPoolResponse":{"description":"QueryCommunityPoolResponse is the response type for the Query/CommunityPool\nRPC method.","type":"object","properties":{"pool":{"description":"pool defines community pool's coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationRewardsResponse":{"description":"QueryDelegationRewardsResponse is the response type for the\nQuery/DelegationRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines the rewards accrued by a delegation.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegationTotalRewardsResponse":{"description":"QueryDelegationTotalRewardsResponse is the response type for the\nQuery/DelegationTotalRewards RPC method.","type":"object","properties":{"rewards":{"description":"rewards defines all the rewards accrued by a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.DelegationDelegatorReward"}},"total":{"description":"total defines the sum of all the rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is the response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"validators":{"description":"validators defines the validators a delegator is delegating for.","type":"array","items":{"type":"string"}}}},"cosmos.distribution.v1beta1.QueryDelegatorWithdrawAddressResponse":{"description":"QueryDelegatorWithdrawAddressResponse is the response type for the\nQuery/DelegatorWithdrawAddress RPC method.","type":"object","properties":{"withdraw_address":{"description":"withdraw_address defines the delegator address to query for.","type":"string"}}},"cosmos.distribution.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.distribution.v1beta1.Params"}}},"cosmos.distribution.v1beta1.QueryValidatorCommissionResponse":{"type":"object","title":"QueryValidatorCommissionResponse is the response type for the\nQuery/ValidatorCommission RPC method","properties":{"commission":{"description":"commission defines the commission the validator received.","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorAccumulatedCommission"}}},"cosmos.distribution.v1beta1.QueryValidatorDistributionInfoResponse":{"description":"QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method.","type":"object","properties":{"commission":{"description":"commission defines the commission the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}},"operator_address":{"description":"operator_address defines the validator operator address.","type":"string"},"self_bond_rewards":{"description":"self_bond_rewards defines the self delegations rewards.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.QueryValidatorOutstandingRewardsResponse":{"description":"QueryValidatorOutstandingRewardsResponse is the response type for the\nQuery/ValidatorOutstandingRewards RPC method.","type":"object","properties":{"rewards":{"$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorOutstandingRewards"}}},"cosmos.distribution.v1beta1.QueryValidatorSlashesResponse":{"description":"QueryValidatorSlashesResponse is the response type for the\nQuery/ValidatorSlashes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"slashes":{"description":"slashes defines the slashes the validator received.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.distribution.v1beta1.ValidatorSlashEvent"}}}},"cosmos.distribution.v1beta1.ValidatorAccumulatedCommission":{"description":"ValidatorAccumulatedCommission represents accumulated commission\nfor a validator kept as a running counter, can be withdrawn at any time.","type":"object","properties":{"commission":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorOutstandingRewards":{"description":"ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards\nfor a validator inexpensive to track, allows simple sanity checks.","type":"object","properties":{"rewards":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.DecCoin"}}}},"cosmos.distribution.v1beta1.ValidatorSlashEvent":{"description":"ValidatorSlashEvent represents a validator slash event.\nHeight is implicit within the store key.\nThis is needed to calculate appropriate amount of staking tokens\nfor delegations which are withdrawn after a slash has occurred.","type":"object","properties":{"fraction":{"type":"string"},"validator_period":{"type":"string","format":"uint64"}}},"cosmos.epochs.v1beta1.EpochInfo":{"description":"EpochInfo is a struct that describes the data going into\na timer defined by the x/epochs module.","type":"object","properties":{"current_epoch":{"description":"current_epoch is the current epoch number, or in other words,\nhow many times has the timer 'ticked'.\nThe first tick (current_epoch=1) is defined as\nthe first block whose blocktime is greater than the EpochInfo start_time.","type":"string","format":"int64"},"current_epoch_start_height":{"type":"string","format":"int64","title":"current_epoch_start_height is the block height at which the current epoch\nstarted. (The block height at which the timer last ticked)"},"current_epoch_start_time":{"description":"current_epoch_start_time describes the start time of the current timer\ninterval. The interval is (current_epoch_start_time,\ncurrent_epoch_start_time + duration] When the timer ticks, this is set to\ncurrent_epoch_start_time = last_epoch_start_time + duration only one timer\ntick for a given identifier can occur per block.\n\nNOTE! The current_epoch_start_time may diverge significantly from the\nwall-clock time the epoch began at. Wall-clock time of epoch start may be\n\u003e\u003e current_epoch_start_time. Suppose current_epoch_start_time = 10,\nduration = 5. Suppose the chain goes offline at t=14, and comes back online\nat t=30, and produces blocks at every successive time. (t=31, 32, etc.)\n* The t=30 block will start the epoch for (10, 15]\n* The t=31 block will start the epoch for (15, 20]\n* The t=32 block will start the epoch for (20, 25]\n* The t=33 block will start the epoch for (25, 30]\n* The t=34 block will start the epoch for (30, 35]\n* The **t=36** block will start the epoch for (35, 40]","type":"string","format":"date-time"},"duration":{"description":"duration is the time in between epoch ticks.\nIn order for intended behavior to be met, duration should\nbe greater than the chains expected block time.\nDuration must be non-zero.","type":"string"},"epoch_counting_started":{"description":"epoch_counting_started is a boolean, that indicates whether this\nepoch timer has began yet.","type":"boolean"},"identifier":{"description":"identifier is a unique reference to this particular timer.","type":"string"},"start_time":{"description":"start_time is the time at which the timer first ever ticks.\nIf start_time is in the future, the epoch will not begin until the start\ntime.","type":"string","format":"date-time"}}},"cosmos.epochs.v1beta1.QueryCurrentEpochResponse":{"description":"QueryCurrentEpochResponse defines the gRPC response structure for\nquerying an epoch by its identifier.","type":"object","properties":{"current_epoch":{"type":"string","format":"int64"}}},"cosmos.epochs.v1beta1.QueryEpochInfosResponse":{"description":"QueryEpochInfosRequest defines the gRPC response structure for\nquerying all epoch info.","type":"object","properties":{"epochs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.epochs.v1beta1.EpochInfo"}}}},"cosmos.evidence.v1beta1.MsgSubmitEvidence":{"description":"MsgSubmitEvidence represents a message that supports submitting arbitrary\nEvidence of misbehavior such as equivocation or counterfactual signing.","type":"object","properties":{"evidence":{"description":"evidence defines the evidence of misbehavior.","$ref":"#/definitions/google.protobuf.Any"},"submitter":{"description":"submitter is the signer account address of evidence.","type":"string"}}},"cosmos.evidence.v1beta1.MsgSubmitEvidenceResponse":{"description":"MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type.","type":"object","properties":{"hash":{"description":"hash defines the hash of the evidence.","type":"string","format":"byte"}}},"cosmos.evidence.v1beta1.QueryAllEvidenceResponse":{"description":"QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC\nmethod.","type":"object","properties":{"evidence":{"description":"evidence returns all evidences.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.evidence.v1beta1.QueryEvidenceResponse":{"description":"QueryEvidenceResponse is the response type for the Query/Evidence RPC method.","type":"object","properties":{"evidence":{"description":"evidence returns the requested evidence.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.evm.erc20.v1.MsgConvertCoinResponse":{"type":"object","title":"MsgConvertCoinResponse returns no fields"},"cosmos.evm.erc20.v1.MsgConvertERC20Response":{"type":"object","title":"MsgConvertERC20Response returns no fields"},"cosmos.evm.erc20.v1.MsgRegisterERC20":{"description":"MsgRegisterERC20 is the Msg/RegisterERC20 request type for registering\nan Erc20 contract token pair.","type":"object","properties":{"erc20addresses":{"type":"array","title":"erc20addresses is a slice of ERC20 token contract hex addresses","items":{"type":"string"}},"signer":{"type":"string","title":"signer is the address registering the erc20 pairs"}}},"cosmos.evm.erc20.v1.MsgRegisterERC20Response":{"description":"MsgRegisterERC20Response defines the response structure for executing a\nMsgRegisterERC20 message.","type":"object"},"cosmos.evm.erc20.v1.MsgToggleConversion":{"description":"MsgToggleConversion is the Msg/MsgToggleConversion request type for toggling\nan Erc20 contract conversion capability.","type":"object","properties":{"authority":{"description":"authority is the address of the governance account.","type":"string"},"token":{"type":"string","title":"token identifier can be either the hex contract address of the ERC20 or the\nCosmos base denomination"}}},"cosmos.evm.erc20.v1.MsgToggleConversionResponse":{"description":"MsgToggleConversionResponse defines the response structure for executing a\nToggleConversion message.","type":"object"},"cosmos.evm.erc20.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams is the Msg/UpdateParams request type for Erc20 parameters.\nSince: cosmos-sdk 0.47","properties":{"authority":{"description":"authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/vm parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.evm.erc20.v1.Params"}}},"cosmos.evm.erc20.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.\nSince: cosmos-sdk 0.47"},"cosmos.evm.erc20.v1.Owner":{"description":"Owner enumerates the ownership of a ERC20 contract.\n\n - OWNER_UNSPECIFIED: OWNER_UNSPECIFIED defines an invalid/undefined owner.\n - OWNER_MODULE: OWNER_MODULE - erc20 is owned by the erc20 module account.\n - OWNER_EXTERNAL: OWNER_EXTERNAL - erc20 is owned by an external account.","type":"string","default":"OWNER_UNSPECIFIED","enum":["OWNER_UNSPECIFIED","OWNER_MODULE","OWNER_EXTERNAL"]},"cosmos.evm.erc20.v1.Params":{"type":"object","title":"Params defines the erc20 module params","properties":{"enable_erc20":{"description":"enable_erc20 is the parameter to enable the conversion of Cosmos coins \u003c--\u003e\nERC20 tokens.","type":"boolean"},"permissionless_registration":{"type":"boolean","title":"permissionless_registration is the parameter that allows ERC20s to be\npermissionlessly registered to be converted to bank tokens and vice versa"}}},"cosmos.evm.erc20.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC\nmethod.","type":"object","properties":{"params":{"title":"params are the erc20 module parameters","$ref":"#/definitions/cosmos.evm.erc20.v1.Params"}}},"cosmos.evm.erc20.v1.QueryTokenPairResponse":{"description":"QueryTokenPairResponse is the response type for the Query/TokenPair RPC\nmethod.","type":"object","properties":{"token_pair":{"title":"token_pairs returns the info about a registered token pair for the erc20\nmodule","$ref":"#/definitions/cosmos.evm.erc20.v1.TokenPair"}}},"cosmos.evm.erc20.v1.QueryTokenPairsResponse":{"description":"QueryTokenPairsResponse is the response type for the Query/TokenPairs RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"token_pairs":{"type":"array","title":"token_pairs is a slice of registered token pairs for the erc20 module","items":{"type":"object","$ref":"#/definitions/cosmos.evm.erc20.v1.TokenPair"}}}},"cosmos.evm.erc20.v1.TokenPair":{"description":"TokenPair defines an instance that records a pairing (mapping) consisting of a native\nCosmos Coin and an ERC20 token address. The \"pair\" does not imply an asset swap exchange.","type":"object","properties":{"contract_owner":{"title":"contract_owner is the an ENUM specifying the type of ERC20 owner (0\ninvalid, 1 ModuleAccount, 2 external address)","$ref":"#/definitions/cosmos.evm.erc20.v1.Owner"},"denom":{"type":"string","title":"denom defines the cosmos base denomination to be mapped to"},"enabled":{"type":"boolean","title":"enabled defines the token mapping enable status"},"erc20_address":{"type":"string","title":"erc20_address is the hex address of ERC20 contract token"}}},"cosmos.evm.feemarket.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines a Msg for updating the x/feemarket module parameters.","type":"object","properties":{"authority":{"description":"authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/feemarket parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.evm.feemarket.v1.Params"}}},"cosmos.evm.feemarket.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.evm.feemarket.v1.Params":{"type":"object","title":"Params defines the EVM module parameters","properties":{"base_fee":{"description":"base_fee for EIP-1559 blocks.","type":"string"},"base_fee_change_denominator":{"description":"base_fee_change_denominator bounds the amount the base fee can change\nbetween blocks.","type":"integer","format":"int64"},"elasticity_multiplier":{"description":"elasticity_multiplier bounds the maximum gas limit an EIP-1559 block may\nhave.","type":"integer","format":"int64"},"enable_height":{"description":"enable_height defines at which block height the base fee calculation is\nenabled.","type":"string","format":"int64"},"min_gas_multiplier":{"type":"string","title":"min_gas_multiplier bounds the minimum gas used to be charged\nto senders based on gas limit"},"min_gas_price":{"type":"string","title":"min_gas_price defines the minimum gas price value for cosmos and eth\ntransactions"},"no_base_fee":{"type":"boolean","title":"no_base_fee forces the EIP-1559 base fee to 0 (needed for 0 price calls)"}}},"cosmos.evm.feemarket.v1.QueryBaseFeeResponse":{"description":"QueryBaseFeeResponse returns the EIP1559 base fee.","type":"object","properties":{"base_fee":{"type":"string","title":"base_fee is the EIP1559 base fee"}}},"cosmos.evm.feemarket.v1.QueryBlockGasResponse":{"description":"QueryBlockGasResponse returns block gas used for a given height.","type":"object","properties":{"gas":{"type":"string","format":"int64","title":"gas is the returned block gas"}}},"cosmos.evm.feemarket.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/vm parameters.","type":"object","properties":{"params":{"description":"params define the evm module parameters.","$ref":"#/definitions/cosmos.evm.feemarket.v1.Params"}}},"cosmos.evm.precisebank.v1.QueryFractionalBalanceResponse":{"description":"QueryFractionalBalanceResponse defines the response type for\nQuery/FractionalBalance method.","type":"object","properties":{"fractional_balance":{"description":"fractional_balance is the fractional balance of the address.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.evm.precisebank.v1.QueryRemainderResponse":{"description":"QueryRemainderResponse defines the response type for Query/Remainder method.","type":"object","properties":{"remainder":{"description":"remainder is the amount backed by the reserve, but not yet owned by any\naccount, i.e. not in circulation.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.evm.vm.v1.AccessControl":{"type":"object","title":"AccessControl defines the permission policy of the EVM\nfor creating and calling contracts","properties":{"call":{"title":"call defines the permission policy for calling contracts","$ref":"#/definitions/cosmos.evm.vm.v1.AccessControlType"},"create":{"title":"create defines the permission policy for creating contracts","$ref":"#/definitions/cosmos.evm.vm.v1.AccessControlType"}}},"cosmos.evm.vm.v1.AccessControlType":{"type":"object","title":"AccessControlType defines the permission type for policies","properties":{"access_control_list":{"type":"array","title":"access_control_list defines defines different things depending on the\nAccessType:\n- ACCESS_TYPE_PERMISSIONLESS: list of addresses that are blocked from\nperforming the operation\n- ACCESS_TYPE_RESTRICTED: ignored\n- ACCESS_TYPE_PERMISSIONED: list of addresses that are allowed to perform\nthe operation","items":{"type":"string"}},"access_type":{"title":"access_type defines which type of permission is required for the operation","$ref":"#/definitions/cosmos.evm.vm.v1.AccessType"}}},"cosmos.evm.vm.v1.AccessType":{"description":"- ACCESS_TYPE_PERMISSIONLESS: ACCESS_TYPE_PERMISSIONLESS does not restrict the operation to anyone\n - ACCESS_TYPE_RESTRICTED: ACCESS_TYPE_RESTRICTED restrict the operation to anyone\n - ACCESS_TYPE_PERMISSIONED: ACCESS_TYPE_PERMISSIONED only allows the operation for specific addresses","type":"string","title":"AccessType defines the types of permissions for the operations","default":"ACCESS_TYPE_PERMISSIONLESS","enum":["ACCESS_TYPE_PERMISSIONLESS","ACCESS_TYPE_RESTRICTED","ACCESS_TYPE_PERMISSIONED"]},"cosmos.evm.vm.v1.ChainConfig":{"description":"ChainConfig defines the Ethereum ChainConfig parameters using *sdk.Int values\ninstead of *big.Int.","type":"object","properties":{"arrow_glacier_block":{"type":"string","title":"arrow_glacier_block: Eip-4345 (bomb delay) switch block (nil = no fork, 0 =\nalready activated)"},"berlin_block":{"type":"string","title":"berlin_block: Berlin switch block (nil = no fork, 0 = already on berlin)"},"byzantium_block":{"type":"string","title":"byzantium_block: Byzantium switch block (nil no fork, 0 = already on\nbyzantium)"},"cancun_time":{"type":"string","title":"cancun_time: Cancun switch time (nil = no fork, 0 = already on cancun)"},"chain_id":{"type":"string","format":"uint64","title":"chain_id is the id of the chain (EIP-155)"},"constantinople_block":{"type":"string","title":"constantinople_block: Constantinople switch block (nil no fork, 0 = already\nactivated)"},"dao_fork_block":{"type":"string","title":"dao_fork_block corresponds to TheDAO hard-fork switch block (nil no fork)"},"dao_fork_support":{"type":"boolean","title":"dao_fork_support defines whether the nodes supports or opposes the DAO\nhard-fork"},"decimals":{"type":"string","format":"uint64","title":"decimals is the real decimal precision of the denomination used on the EVM"},"denom":{"type":"string","title":"denom is the denomination used on the EVM"},"eip150_block":{"type":"string","title":"eip150_block: EIP150 implements the Gas price changes\n(https://github.com/ethereum/EIPs/issues/150) EIP150 HF block (nil no fork)"},"eip155_block":{"type":"string","title":"eip155_block: EIP155Block HF block"},"eip158_block":{"type":"string","title":"eip158_block: EIP158 HF block"},"gray_glacier_block":{"type":"string","title":"gray_glacier_block: EIP-5133 (bomb delay) switch block (nil = no fork, 0 =\nalready activated)"},"homestead_block":{"type":"string","title":"homestead_block switch (nil no fork, 0 = already homestead)"},"istanbul_block":{"type":"string","title":"istanbul_block: Istanbul switch block (nil no fork, 0 = already on\nistanbul)"},"london_block":{"type":"string","title":"london_block: London switch block (nil = no fork, 0 = already on london)"},"merge_netsplit_block":{"type":"string","title":"merge_netsplit_block: Virtual fork after The Merge to use as a network\nsplitter"},"muir_glacier_block":{"type":"string","title":"muir_glacier_block: Eip-2384 (bomb delay) switch block (nil no fork, 0 =\nalready activated)"},"osaka_time":{"type":"string","title":"osaka_time: Osaka switch time (nil = no fork, 0 = already on osaka)"},"petersburg_block":{"type":"string","title":"petersburg_block: Petersburg switch block (nil same as Constantinople)"},"prague_time":{"type":"string","title":"prague_time: Prague switch time (nil = no fork, 0 = already on prague)"},"shanghai_time":{"type":"string","title":"shanghai_time: Shanghai switch time (nil = no fork, 0 = already on\nshanghai)"},"verkle_time":{"type":"string","title":"verkle_time: Verkle switch time (nil = no fork, 0 = already on verkle)"}}},"cosmos.evm.vm.v1.EstimateGasResponse":{"type":"object","title":"EstimateGasResponse defines EstimateGas response","properties":{"gas":{"type":"string","format":"uint64","title":"gas returns the estimated gas"},"ret":{"type":"string","format":"byte","title":"ret is the returned data from evm function (result or data supplied with\nrevert opcode)"},"vm_error":{"type":"string","title":"vm_error is the error returned by vm execution"}}},"cosmos.evm.vm.v1.ExtendedDenomOptions":{"type":"object","properties":{"extended_denom":{"type":"string"}}},"cosmos.evm.vm.v1.Log":{"description":"Log represents an protobuf compatible Ethereum Log that defines a contract\nlog event. These events are generated by the LOG opcode and stored/indexed by\nthe node.\n\nNOTE: address, topics and data are consensus fields. The rest of the fields\nare derived, i.e. filled in by the nodes, but not secured by consensus.","type":"object","properties":{"address":{"type":"string","title":"address of the contract that generated the event"},"block_hash":{"type":"string","title":"block_hash of the block in which the transaction was included"},"block_number":{"type":"string","format":"uint64","title":"block_number of the block in which the transaction was included"},"block_timestamp":{"type":"string","format":"uint64","title":"block_timestamp is the timestamp of the block in which the transaction was"},"data":{"type":"string","format":"byte","title":"data which is supplied by the contract, usually ABI-encoded"},"index":{"type":"string","format":"uint64","title":"index of the log in the block"},"removed":{"description":"removed is true if this log was reverted due to a chain\nreorganisation. You must pay attention to this field if you receive logs\nthrough a filter query.","type":"boolean"},"topics":{"description":"topics is a list of topics provided by the contract.","type":"array","items":{"type":"string"}},"tx_hash":{"type":"string","title":"tx_hash is the transaction hash"},"tx_index":{"type":"string","format":"uint64","title":"tx_index of the transaction in the block"}}},"cosmos.evm.vm.v1.MsgEthereumTx":{"description":"MsgEthereumTx encapsulates an Ethereum transaction as an SDK message.","type":"object","properties":{"from":{"type":"string","format":"byte","title":"from is the bytes of ethereum signer address. This address value is checked\nagainst the address derived from the signature (V, R, S) using the\nsecp256k1 elliptic curve"},"raw":{"type":"string","format":"byte","title":"raw is the raw ethereum transaction"}}},"cosmos.evm.vm.v1.MsgEthereumTxResponse":{"description":"MsgEthereumTxResponse defines the Msg/EthereumTx response type.","type":"object","properties":{"block_hash":{"type":"string","format":"byte","title":"include the block hash for json-rpc to use"},"block_timestamp":{"type":"string","format":"uint64","title":"include the block timestamp for json-rpc to use"},"gas_used":{"type":"string","format":"uint64","title":"gas_used specifies how much gas was consumed by the transaction"},"hash":{"type":"string","title":"hash of the ethereum transaction in hex format. This hash differs from the\nCometBFT sha256 hash of the transaction bytes. See\nhttps://github.com/tendermint/tendermint/issues/6539 for reference"},"logs":{"description":"logs contains the transaction hash and the proto-compatible ethereum\nlogs.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.evm.vm.v1.Log"}},"max_used_gas":{"type":"string","format":"uint64","title":"max_used_gas specifies the gas consumed by the transaction, not including refunds"},"ret":{"type":"string","format":"byte","title":"ret is the returned data from evm function (result or data supplied with\nrevert opcode)"},"vm_error":{"type":"string","title":"vm_error is the error returned by vm execution"}}},"cosmos.evm.vm.v1.MsgRegisterPreinstalls":{"description":"MsgRegisterPreinstalls defines a Msg for creating preinstalls in evm state.","type":"object","properties":{"authority":{"description":"authority is the address of the governance account.","type":"string"},"preinstalls":{"description":"preinstalls defines the preinstalls to create.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.evm.vm.v1.Preinstall"}}}},"cosmos.evm.vm.v1.MsgRegisterPreinstallsResponse":{"description":"MsgRegisterPreinstallsResponse defines the response structure for executing a\nMsgRegisterPreinstalls message.","type":"object"},"cosmos.evm.vm.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines a Msg for updating the x/vm module parameters.","type":"object","properties":{"authority":{"description":"authority is the address of the governance account.","type":"string"},"params":{"description":"params defines the x/vm parameters to update.\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.evm.vm.v1.Params"}}},"cosmos.evm.vm.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.evm.vm.v1.Params":{"type":"object","title":"Params defines the EVM module parameters","properties":{"access_control":{"title":"access_control defines the permission policy of the EVM","$ref":"#/definitions/cosmos.evm.vm.v1.AccessControl"},"active_static_precompiles":{"type":"array","title":"active_static_precompiles defines the slice of hex addresses of the\nprecompiled contracts that are active","items":{"type":"string"}},"evm_channels":{"type":"array","title":"evm_channels is the list of channel identifiers from EVM compatible chains","items":{"type":"string"}},"evm_denom":{"description":"evm_denom represents the token denomination used to run the EVM state\ntransitions.","type":"string"},"extended_denom_options":{"$ref":"#/definitions/cosmos.evm.vm.v1.ExtendedDenomOptions"},"extra_eips":{"type":"array","title":"extra_eips defines the additional EIPs for the vm.Config","items":{"type":"string","format":"int64"}},"history_serve_window":{"type":"string","format":"uint64"}}},"cosmos.evm.vm.v1.Preinstall":{"type":"object","title":"Preinstall defines a contract that is preinstalled on-chain with a specific\ncontract address and bytecode","properties":{"address":{"type":"string","title":"address in hex format of the preinstall contract"},"code":{"type":"string","title":"code in hex format for the preinstall contract"},"name":{"type":"string","title":"name of the preinstall contract"}}},"cosmos.evm.vm.v1.QueryAccountResponse":{"description":"QueryAccountResponse is the response type for the Query/Account RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the EVM denomination.","type":"string"},"code_hash":{"description":"code_hash is the hex-formatted code bytes from the EOA.","type":"string"},"nonce":{"description":"nonce is the account's sequence number.","type":"string","format":"uint64"}}},"cosmos.evm.vm.v1.QueryBalanceResponse":{"description":"QueryBalanceResponse is the response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the EVM denomination.","type":"string"}}},"cosmos.evm.vm.v1.QueryBaseFeeResponse":{"description":"QueryBaseFeeResponse returns the EIP1559 base fee.","type":"object","properties":{"base_fee":{"type":"string","title":"base_fee is the EIP1559 base fee"}}},"cosmos.evm.vm.v1.QueryCodeResponse":{"description":"QueryCodeResponse is the response type for the Query/Code RPC\nmethod.","type":"object","properties":{"code":{"description":"code represents the code bytes from an ethereum address.","type":"string","format":"byte"}}},"cosmos.evm.vm.v1.QueryConfigResponse":{"description":"QueryConfigResponse returns the EVM config.","type":"object","properties":{"config":{"title":"config is the evm configuration","$ref":"#/definitions/cosmos.evm.vm.v1.ChainConfig"}}},"cosmos.evm.vm.v1.QueryCosmosAccountResponse":{"description":"QueryCosmosAccountResponse is the response type for the Query/CosmosAccount\nRPC method.","type":"object","properties":{"account_number":{"type":"string","format":"uint64","title":"account_number is the account number"},"cosmos_address":{"description":"cosmos_address is the cosmos address of the account.","type":"string"},"sequence":{"description":"sequence is the account's sequence number.","type":"string","format":"uint64"}}},"cosmos.evm.vm.v1.QueryGlobalMinGasPriceResponse":{"type":"object","title":"QueryGlobalMinGasPriceResponse returns the GlobalMinGasPrice","properties":{"min_gas_price":{"type":"string","title":"min_gas_price is the feemarket's min_gas_price"}}},"cosmos.evm.vm.v1.QueryParamsResponse":{"description":"QueryParamsResponse defines the response type for querying x/vm parameters.","type":"object","properties":{"params":{"description":"params define the evm module parameters.","$ref":"#/definitions/cosmos.evm.vm.v1.Params"}}},"cosmos.evm.vm.v1.QueryStorageResponse":{"description":"QueryStorageResponse is the response type for the Query/Storage RPC\nmethod.","type":"object","properties":{"value":{"description":"value defines the storage state value hash associated with the given key.","type":"string"}}},"cosmos.evm.vm.v1.QueryTraceBlockResponse":{"type":"object","title":"QueryTraceBlockResponse defines TraceBlock response","properties":{"data":{"type":"string","format":"byte","title":"data is the response serialized in bytes"}}},"cosmos.evm.vm.v1.QueryTraceCallResponse":{"type":"object","title":"QueryTraceCallResponse defines TraceCall response","properties":{"data":{"type":"string","format":"byte","title":"data is the response serialized in bytes"}}},"cosmos.evm.vm.v1.QueryTraceTxResponse":{"type":"object","title":"QueryTraceTxResponse defines TraceTx response","properties":{"data":{"type":"string","format":"byte","title":"data is the response serialized in bytes"}}},"cosmos.evm.vm.v1.QueryValidatorAccountResponse":{"description":"QueryValidatorAccountResponse is the response type for the\nQuery/ValidatorAccount RPC method.","type":"object","properties":{"account_address":{"description":"account_address is the cosmos address of the account in bech32 format.","type":"string"},"account_number":{"type":"string","format":"uint64","title":"account_number is the account number"},"sequence":{"description":"sequence is the account's sequence number.","type":"string","format":"uint64"}}},"cosmos.evm.vm.v1.TraceConfig":{"description":"TraceConfig holds extra parameters to trace functions.","type":"object","properties":{"debug":{"type":"boolean","title":"debug can be used to print output during capture end"},"disable_stack":{"type":"boolean","title":"disable_stack switches stack capture"},"disable_storage":{"type":"boolean","title":"disable_storage switches storage capture"},"enable_memory":{"type":"boolean","title":"enable_memory switches memory capture"},"enable_return_data":{"type":"boolean","title":"enable_return_data switches the capture of return data"},"limit":{"type":"integer","format":"int32","title":"limit defines the maximum length of output, but zero means unlimited"},"overrides":{"title":"overrides can be used to execute a trace using future fork rules","$ref":"#/definitions/cosmos.evm.vm.v1.ChainConfig"},"reexec":{"type":"string","format":"uint64","title":"reexec defines the number of blocks the tracer is willing to go back"},"timeout":{"type":"string","title":"timeout overrides the default timeout of 5 seconds for JavaScript-based\ntracing calls"},"tracer":{"type":"string","title":"tracer is a custom javascript tracer"},"tracer_json_config":{"type":"string","title":"tracer_json_config configures the tracer using a JSON string"}}},"cosmos.feegrant.v1beta1.Grant":{"type":"object","title":"Grant is stored in the KVStore to record a grant with full context","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowance":{"description":"MsgGrantAllowance adds permission for Grantee to spend up to Allowance\nof fees from the account of Granter.","type":"object","properties":{"allowance":{"description":"allowance can be any of basic, periodic, allowed fee allowance.","$ref":"#/definitions/google.protobuf.Any"},"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgGrantAllowanceResponse":{"description":"MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.MsgPruneAllowances":{"description":"MsgPruneAllowances prunes expired fee allowances.","type":"object","properties":{"pruner":{"description":"pruner is the address of the user pruning expired allowances.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgPruneAllowancesResponse":{"description":"MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.MsgRevokeAllowance":{"description":"MsgRevokeAllowance removes any existing Allowance from Granter to Grantee.","type":"object","properties":{"grantee":{"description":"grantee is the address of the user being granted an allowance of another user's funds.","type":"string"},"granter":{"description":"granter is the address of the user granting an allowance of their funds.","type":"string"}}},"cosmos.feegrant.v1beta1.MsgRevokeAllowanceResponse":{"description":"MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type.","type":"object"},"cosmos.feegrant.v1beta1.QueryAllowanceResponse":{"description":"QueryAllowanceResponse is the response type for the Query/Allowance RPC method.","type":"object","properties":{"allowance":{"description":"allowance is a allowance granted for grantee by granter.","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}}},"cosmos.feegrant.v1beta1.QueryAllowancesByGranterResponse":{"description":"QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method.","type":"object","properties":{"allowances":{"description":"allowances that have been issued by the granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.feegrant.v1beta1.QueryAllowancesResponse":{"description":"QueryAllowancesResponse is the response type for the Query/Allowances RPC method.","type":"object","properties":{"allowances":{"description":"allowances are allowance's granted for grantee by granter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.feegrant.v1beta1.Grant"}},"pagination":{"description":"pagination defines an pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1.MsgCancelProposal":{"description":"MsgCancelProposal is the Msg/CancelProposal request type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1.MsgCancelProposalResponse":{"description":"MsgCancelProposalResponse defines the response structure for executing a\nMsgCancelProposal message.","type":"object","properties":{"canceled_height":{"description":"canceled_height defines the block height at which the proposal is canceled.","type":"string","format":"uint64"},"canceled_time":{"description":"canceled_time is the time when proposal is canceled.","type":"string","format":"date-time"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1.MsgExecLegacyContent":{"description":"MsgExecLegacyContent is used to wrap the legacy content field into a message.\nThis ensures backwards compatibility with v1beta1.MsgSubmitProposal.","type":"object","properties":{"authority":{"description":"authority must be the gov module address.","type":"string"},"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.gov.v1.MsgExecLegacyContentResponse":{"description":"MsgExecLegacyContentResponse defines the Msg/ExecLegacyContent response type.","type":"object"},"cosmos.gov.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"expedited":{"type":"boolean","title":"expedited defines if the proposal is expedited or not"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"messages":{"description":"messages are the arbitrary messages to be executed if proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"},"summary":{"type":"string","title":"summary is the summary of the proposal"},"title":{"description":"title is the title of the proposal.","type":"string"}}},"cosmos.gov.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/gov parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.gov.v1.Params"}}},"cosmos.gov.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.gov.v1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the Vote.","type":"string"},"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.","type":"object","properties":{"metadata":{"description":"metadata is any arbitrary metadata attached to the VoteWeighted.","type":"string"},"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.","type":"object"},"cosmos.gov.v1.Params":{"description":"Params defines the parameters for the x/gov module.","type":"object","properties":{"burn_proposal_deposit_prevote":{"type":"boolean","title":"burn deposits if the proposal does not enter voting period"},"burn_vote_quorum":{"type":"boolean","title":"burn deposits if a proposal does not meet quorum"},"burn_vote_veto":{"type":"boolean","title":"burn deposits if quorum with vote type no_veto is met"},"expedited_min_deposit":{"description":"Minimum expedited deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"expedited_threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.67.","type":"string"},"expedited_voting_period":{"description":"Duration of the voting period of an expedited proposal.","type":"string"},"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"min_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value minimum that must be met when making a deposit.\nDefault value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be\nrequired.","type":"string"},"min_initial_deposit_ratio":{"description":"The ratio representing the proportion of the deposit value that must be paid at proposal submission.","type":"string"},"proposal_cancel_dest":{"description":"The address which will receive (proposal_cancel_ratio * deposit) proposal deposits.\nIf empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned.","type":"string"},"proposal_cancel_ratio":{"description":"The cancel ratio which will not be returned back to the depositors when a proposal is cancelled.","type":"string"},"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\n considered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\n vetoed. Default value: 1/3.","type":"string"},"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"expedited":{"type":"boolean","title":"expedited defines if the proposal is expedited"},"failed_reason":{"type":"string","title":"failed_reason defines the reason why the proposal failed"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"},"id":{"description":"id defines the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages are the arbitrary messages to be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/gov#proposal-3"},"proposer":{"type":"string","title":"proposer is the address of the proposal sumbitter"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"summary":{"type":"string","title":"summary is a short summary of the proposal"},"title":{"type":"string","title":"title is the title of the proposal"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1.QueryConstitutionResponse":{"type":"object","title":"QueryConstitutionResponse is the response type for the Query/Constitution RPC method","properties":{"constitution":{"type":"string"}}},"cosmos.gov.v1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1.Deposit"}}},"cosmos.gov.v1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"Deprecated: Prefer to use `params` instead.\ndeposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1.DepositParams"},"params":{"description":"params defines all the paramaters of x/gov module.","$ref":"#/definitions/cosmos.gov.v1.Params"},"tally_params":{"description":"Deprecated: Prefer to use `params` instead.\ntally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1.TallyParams"},"voting_params":{"description":"Deprecated: Prefer to use `params` instead.\nvoting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1.VotingParams"}}},"cosmos.gov.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"description":"proposal is the requested governance proposal.","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}},"cosmos.gov.v1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Proposal"}}}},"cosmos.gov.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1.TallyResult"}}},"cosmos.gov.v1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1.Vote"}}},"cosmos.gov.v1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.Vote"}}}},"cosmos.gov.v1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string"}}},"cosmos.gov.v1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the number of abstain votes on a proposal.","type":"string"},"no_count":{"description":"no_count is the number of no votes on a proposal.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the number of no with veto votes on a proposal.","type":"string"},"yes_count":{"description":"yes_count is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5"},"options":{"description":"options is the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.gov.v1beta1.Deposit":{"description":"Deposit defines an amount deposited by an account address to an active\nproposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.DepositParams":{"description":"DepositParams defines the params for deposits on governance proposals.","type":"object","properties":{"max_deposit_period":{"description":"Maximum period for Atom holders to deposit on a proposal. Initial value: 2\nmonths.","type":"string"},"min_deposit":{"description":"Minimum deposit for a proposal to enter voting period.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.gov.v1beta1.MsgDeposit":{"description":"MsgDeposit defines a message to submit a deposit to an existing proposal.","type":"object","properties":{"amount":{"description":"amount to be deposited by depositor.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"description":"depositor defines the deposit addresses from the proposals.","type":"string"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgDepositResponse":{"description":"MsgDepositResponse defines the Msg/Deposit response type.","type":"object"},"cosmos.gov.v1beta1.MsgSubmitProposal":{"description":"MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary\nproposal Content.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"initial_deposit":{"description":"initial_deposit is the deposit value that must be paid at proposal submission.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"proposer":{"description":"proposer is the account address of the proposer.","type":"string"}}},"cosmos.gov.v1beta1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse defines the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"}}},"cosmos.gov.v1beta1.MsgVote":{"description":"MsgVote defines a message to cast a vote.","type":"object","properties":{"option":{"description":"option defines the vote option.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteResponse":{"description":"MsgVoteResponse defines the Msg/Vote response type.","type":"object"},"cosmos.gov.v1beta1.MsgVoteWeighted":{"description":"MsgVoteWeighted defines a message to cast a vote.","type":"object","properties":{"options":{"description":"options defines the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address for the proposal.","type":"string"}}},"cosmos.gov.v1beta1.MsgVoteWeightedResponse":{"description":"MsgVoteWeightedResponse defines the Msg/VoteWeighted response type.","type":"object"},"cosmos.gov.v1beta1.Proposal":{"description":"Proposal defines the core field members of a governance proposal.","type":"object","properties":{"content":{"description":"content is the proposal's content.","$ref":"#/definitions/google.protobuf.Any"},"deposit_end_time":{"description":"deposit_end_time is the end time for deposition.","type":"string","format":"date-time"},"final_tally_result":{"description":"final_tally_result is the final tally result of the proposal. When\nquerying a proposal via gRPC, this field is not populated until the\nproposal's voting period has ended.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"status":{"description":"status defines the proposal status.","$ref":"#/definitions/cosmos.gov.v1beta1.ProposalStatus"},"submit_time":{"description":"submit_time is the time of proposal submission.","type":"string","format":"date-time"},"total_deposit":{"description":"total_deposit is the total deposit on the proposal.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"voting_end_time":{"description":"voting_end_time is the end time of voting on a proposal.","type":"string","format":"date-time"},"voting_start_time":{"description":"voting_start_time is the starting time to vote on a proposal.","type":"string","format":"date-time"}}},"cosmos.gov.v1beta1.ProposalStatus":{"description":"ProposalStatus enumerates the valid statuses of a proposal.\n\n - PROPOSAL_STATUS_UNSPECIFIED: PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status.\n - PROPOSAL_STATUS_DEPOSIT_PERIOD: PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit\nperiod.\n - PROPOSAL_STATUS_VOTING_PERIOD: PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting\nperiod.\n - PROPOSAL_STATUS_PASSED: PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has\npassed.\n - PROPOSAL_STATUS_REJECTED: PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has\nbeen rejected.\n - PROPOSAL_STATUS_FAILED: PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has\nfailed.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_DEPOSIT_PERIOD","PROPOSAL_STATUS_VOTING_PERIOD","PROPOSAL_STATUS_PASSED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_FAILED"]},"cosmos.gov.v1beta1.QueryDepositResponse":{"description":"QueryDepositResponse is the response type for the Query/Deposit RPC method.","type":"object","properties":{"deposit":{"description":"deposit defines the requested deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}}},"cosmos.gov.v1beta1.QueryDepositsResponse":{"description":"QueryDepositsResponse is the response type for the Query/Deposits RPC method.","type":"object","properties":{"deposits":{"description":"deposits defines the requested deposits.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Deposit"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.gov.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"deposit_params":{"description":"deposit_params defines the parameters related to deposit.","$ref":"#/definitions/cosmos.gov.v1beta1.DepositParams"},"tally_params":{"description":"tally_params defines the parameters related to tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyParams"},"voting_params":{"description":"voting_params defines the parameters related to voting.","$ref":"#/definitions/cosmos.gov.v1beta1.VotingParams"}}},"cosmos.gov.v1beta1.QueryProposalResponse":{"description":"QueryProposalResponse is the response type for the Query/Proposal RPC method.","type":"object","properties":{"proposal":{"$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}},"cosmos.gov.v1beta1.QueryProposalsResponse":{"description":"QueryProposalsResponse is the response type for the Query/Proposals RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals defines all the requested governance proposals.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Proposal"}}}},"cosmos.gov.v1beta1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the response type for the Query/Tally RPC method.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.gov.v1beta1.TallyResult"}}},"cosmos.gov.v1beta1.QueryVoteResponse":{"description":"QueryVoteResponse is the response type for the Query/Vote RPC method.","type":"object","properties":{"vote":{"description":"vote defines the queried vote.","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}},"cosmos.gov.v1beta1.QueryVotesResponse":{"description":"QueryVotesResponse is the response type for the Query/Votes RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes defines the queried votes.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.Vote"}}}},"cosmos.gov.v1beta1.TallyParams":{"description":"TallyParams defines the params for tallying votes on governance proposals.","type":"object","properties":{"quorum":{"description":"Minimum percentage of total stake needed to vote for a result to be\nconsidered valid.","type":"string","format":"byte"},"threshold":{"description":"Minimum proportion of Yes votes for proposal to pass. Default value: 0.5.","type":"string","format":"byte"},"veto_threshold":{"description":"Minimum value of Veto votes to Total votes ratio for proposal to be\nvetoed. Default value: 1/3.","type":"string","format":"byte"}}},"cosmos.gov.v1beta1.TallyResult":{"description":"TallyResult defines a standard tally for a governance proposal.","type":"object","properties":{"abstain":{"description":"abstain is the number of abstain votes on a proposal.","type":"string"},"no":{"description":"no is the number of no votes on a proposal.","type":"string"},"no_with_veto":{"description":"no_with_veto is the number of no with veto votes on a proposal.","type":"string"},"yes":{"description":"yes is the number of yes votes on a proposal.","type":"string"}}},"cosmos.gov.v1beta1.Vote":{"description":"Vote defines a vote on a governance proposal.\nA Vote consists of a proposal ID, the voter, and the vote option.","type":"object","properties":{"option":{"description":"Deprecated: Prefer to use `options` instead. This field is set in queries\nif and only if `len(options) == 1` and that option has weight 1. In all\nother cases, this field will default to VOTE_OPTION_UNSPECIFIED.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"options":{"description":"options is the weighted vote options.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.gov.v1beta1.WeightedVoteOption"}},"proposal_id":{"description":"proposal_id defines the unique id of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter address of the proposal.","type":"string"}}},"cosmos.gov.v1beta1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given governance proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines a no-op vote option.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.gov.v1beta1.VotingParams":{"description":"VotingParams defines the params for voting on governance proposals.","type":"object","properties":{"voting_period":{"description":"Duration of the voting period.","type":"string"}}},"cosmos.gov.v1beta1.WeightedVoteOption":{"description":"WeightedVoteOption defines a unit of vote for vote split.","type":"object","properties":{"option":{"description":"option defines the valid vote options, it must not contain duplicate vote options.","$ref":"#/definitions/cosmos.gov.v1beta1.VoteOption"},"weight":{"description":"weight is the vote weight associated with the vote option.","type":"string"}}},"cosmos.group.v1.Exec":{"description":"Exec defines modes of execution of a proposal on creation or on new vote.\n\n - EXEC_UNSPECIFIED: An empty value means that there should be a separate\nMsgExec request for the proposal to execute.\n - EXEC_TRY: Try to execute the proposal immediately.\nIf the proposal is not allowed per the DecisionPolicy,\nthe proposal will still be open and could\nbe executed at a later point.","type":"string","default":"EXEC_UNSPECIFIED","enum":["EXEC_UNSPECIFIED","EXEC_TRY"]},"cosmos.group.v1.GroupInfo":{"description":"GroupInfo represents the high-level on-chain information for a group.","type":"object","properties":{"admin":{"description":"admin is the account address of the group's admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group was created.","type":"string","format":"date-time"},"id":{"description":"id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata to attached to the group.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1"},"total_weight":{"description":"total_weight is the sum of the group members' weights.","type":"string"},"version":{"type":"string","format":"uint64","title":"version is used to track changes to a group's membership structure that\nwould break existing proposals. Whenever any members weight is changed,\nor any member is added or removed this version is incremented and will\ncause proposals based on older versions of this group to fail"}}},"cosmos.group.v1.GroupMember":{"description":"GroupMember represents the relationship between a group and a member.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member":{"description":"member is the member data.","$ref":"#/definitions/cosmos.group.v1.Member"}}},"cosmos.group.v1.GroupPolicyInfo":{"description":"GroupPolicyInfo represents the high-level on-chain information for a group policy.","type":"object","properties":{"address":{"description":"address is the account address of group policy.","type":"string"},"admin":{"description":"admin is the account address of the group admin.","type":"string"},"created_at":{"description":"created_at is a timestamp specifying when a group policy was created.","type":"string","format":"date-time"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the group policy.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#decision-policy-1"},"version":{"description":"version is used to track changes to a group's GroupPolicyInfo structure that\nwould create a different result on a running proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.Member":{"description":"Member represents a group member with an account address,\nnon-zero weight, metadata and added_at timestamp.","type":"object","properties":{"added_at":{"description":"added_at is a timestamp specifying when a member was added.","type":"string","format":"date-time"},"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MemberRequest":{"description":"MemberRequest represents a group member to be used in Msg server requests.\nContrary to `Member`, it doesn't have any `added_at` field\nsince this field cannot be set as part of requests.","type":"object","properties":{"address":{"description":"address is the member's account address.","type":"string"},"metadata":{"description":"metadata is any arbitrary metadata attached to the member.","type":"string"},"weight":{"description":"weight is the member's voting weight that should be greater than 0.","type":"string"}}},"cosmos.group.v1.MsgCreateGroup":{"description":"MsgCreateGroup is the Msg/CreateGroup request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}},"metadata":{"description":"metadata is any arbitrary metadata to attached to the group.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicy":{"description":"MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is any arbitrary metadata attached to the group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupPolicyResponse":{"description":"MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type.","type":"object","properties":{"address":{"description":"address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgCreateGroupResponse":{"description":"MsgCreateGroupResponse is the Msg/CreateGroup response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgCreateGroupWithPolicy":{"description":"MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group and group policy admin.","type":"string"},"decision_policy":{"description":"decision_policy specifies the group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_metadata":{"description":"group_metadata is any arbitrary metadata attached to the group.","type":"string"},"group_policy_as_admin":{"description":"group_policy_as_admin is a boolean field, if set to true, the group policy account address will be used as group\nand group policy admin.","type":"boolean"},"group_policy_metadata":{"description":"group_policy_metadata is any arbitrary metadata attached to the group policy.","type":"string"},"members":{"description":"members defines the group members.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgCreateGroupWithPolicyResponse":{"description":"MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type.","type":"object","properties":{"group_id":{"description":"group_id is the unique ID of the newly created group with policy.","type":"string","format":"uint64"},"group_policy_address":{"description":"group_policy_address is the account address of the newly created group policy.","type":"string"}}},"cosmos.group.v1.MsgExec":{"description":"MsgExec is the Msg/Exec request type.","type":"object","properties":{"executor":{"description":"executor is the account address used to execute the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgExecResponse":{"description":"MsgExecResponse is the Msg/Exec request type.","type":"object","properties":{"result":{"description":"result is the final result of the proposal execution.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"}}},"cosmos.group.v1.MsgLeaveGroup":{"description":"MsgLeaveGroup is the Msg/LeaveGroup request type.","type":"object","properties":{"address":{"description":"address is the account address of the group member.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgLeaveGroupResponse":{"description":"MsgLeaveGroupResponse is the Msg/LeaveGroup response type.","type":"object"},"cosmos.group.v1.MsgSubmitProposal":{"description":"MsgSubmitProposal is the Msg/SubmitProposal request type.","type":"object","properties":{"exec":{"description":"exec defines the mode of execution of the proposal,\nwhether it should be executed immediately on creation or not.\nIf so, proposers signatures are considered as Yes votes.","$ref":"#/definitions/cosmos.group.v1.Exec"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"description":"metadata is any arbitrary metadata attached to the proposal.","type":"string"},"proposers":{"description":"proposers are the account addresses of the proposers.\nProposers signatures will be counted as yes votes.","type":"array","items":{"type":"string"}},"summary":{"description":"summary is the summary of the proposal.","type":"string"},"title":{"description":"title is the title of the proposal.","type":"string"}}},"cosmos.group.v1.MsgSubmitProposalResponse":{"description":"MsgSubmitProposalResponse is the Msg/SubmitProposal response type.","type":"object","properties":{"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgUpdateGroupAdmin":{"description":"MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the current account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"new_admin":{"description":"new_admin is the group new admin account address.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupAdminResponse":{"description":"MsgUpdateGroupAdminResponse is the Msg/UpdateGroupAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMembers":{"description":"MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"member_updates":{"description":"member_updates is the list of members to update,\nset weight to 0 to remove a member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.MemberRequest"}}}},"cosmos.group.v1.MsgUpdateGroupMembersResponse":{"description":"MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupMetadata":{"description":"MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_id":{"description":"group_id is the unique ID of the group.","type":"string","format":"uint64"},"metadata":{"description":"metadata is the updated group's metadata.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupMetadataResponse":{"description":"MsgUpdateGroupMetadataResponse is the Msg/UpdateGroupMetadata response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyAdmin":{"description":"MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of the group policy.","type":"string"},"new_admin":{"description":"new_admin is the new group policy admin.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyAdminResponse":{"description":"MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicy":{"description":"MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"decision_policy":{"description":"decision_policy is the updated group policy's decision policy.","$ref":"#/definitions/google.protobuf.Any"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyDecisionPolicyResponse":{"description":"MsgUpdateGroupPolicyDecisionPolicyResponse is the Msg/UpdateGroupPolicyDecisionPolicy response type.","type":"object"},"cosmos.group.v1.MsgUpdateGroupPolicyMetadata":{"description":"MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type.","type":"object","properties":{"admin":{"description":"admin is the account address of the group admin.","type":"string"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"metadata":{"description":"metadata is the group policy metadata to be updated.","type":"string"}}},"cosmos.group.v1.MsgUpdateGroupPolicyMetadataResponse":{"description":"MsgUpdateGroupPolicyMetadataResponse is the Msg/UpdateGroupPolicyMetadata response type.","type":"object"},"cosmos.group.v1.MsgVote":{"description":"MsgVote is the Msg/Vote request type.","type":"object","properties":{"exec":{"description":"exec defines whether the proposal should be executed\nimmediately after voting or not.","$ref":"#/definitions/cosmos.group.v1.Exec"},"metadata":{"description":"metadata is any arbitrary metadata attached to the vote.","type":"string"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"voter":{"description":"voter is the voter account address.","type":"string"}}},"cosmos.group.v1.MsgVoteResponse":{"description":"MsgVoteResponse is the Msg/Vote response type.","type":"object"},"cosmos.group.v1.MsgWithdrawProposal":{"description":"MsgWithdrawProposal is the Msg/WithdrawProposal request type.","type":"object","properties":{"address":{"description":"address is the admin of the group policy or one of the proposer of the proposal.","type":"string"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"}}},"cosmos.group.v1.MsgWithdrawProposalResponse":{"description":"MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type.","type":"object"},"cosmos.group.v1.Proposal":{"description":"Proposal defines a group proposal. Any member of a group can submit a proposal\nfor a group policy to decide upon.\nA proposal consists of a set of `sdk.Msg`s that will be executed if the proposal\npasses as well as some optional metadata associated with the proposal.","type":"object","properties":{"executor_result":{"description":"executor_result is the final result of the proposal execution. Initial value is NotRun.","$ref":"#/definitions/cosmos.group.v1.ProposalExecutorResult"},"final_tally_result":{"description":"final_tally_result contains the sums of all weighted votes for this\nproposal for each vote option. It is empty at submission, and only\npopulated after tallying, at voting period end or at proposal execution,\nwhichever happens first.","$ref":"#/definitions/cosmos.group.v1.TallyResult"},"group_policy_address":{"description":"group_policy_address is the account address of group policy.","type":"string"},"group_policy_version":{"description":"group_policy_version tracks the version of the group policy at proposal submission.\nWhen a decision policy is changed, existing proposals from previous policy\nversions will become invalid with the `ABORTED` status.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"group_version":{"description":"group_version tracks the version of the group at proposal submission.\nThis field is here for informational purposes only.","type":"string","format":"uint64"},"id":{"description":"id is the unique id of the proposal.","type":"string","format":"uint64"},"messages":{"description":"messages is a list of `sdk.Msg`s that will be executed if the proposal passes.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the proposal.\nthe recommended format of the metadata is to be found here:\nhttps://docs.cosmos.network/v0.47/modules/group#proposal-4"},"proposers":{"description":"proposers are the account addresses of the proposers.","type":"array","items":{"type":"string"}},"status":{"description":"status represents the high level position in the life cycle of the proposal. Initial value is Submitted.","$ref":"#/definitions/cosmos.group.v1.ProposalStatus"},"submit_time":{"description":"submit_time is a timestamp specifying when a proposal was submitted.","type":"string","format":"date-time"},"summary":{"type":"string","title":"summary is a short summary of the proposal"},"title":{"type":"string","title":"title is the title of the proposal"},"voting_period_end":{"description":"voting_period_end is the timestamp before which voting must be done.\nUnless a successful MsgExec is called before (to execute a proposal whose\ntally is successful before the voting period ends), tallying will be done\nat this point, and the `final_tally_result`and `status` fields will be\naccordingly updated.","type":"string","format":"date-time"}}},"cosmos.group.v1.ProposalExecutorResult":{"description":"ProposalExecutorResult defines types of proposal executor results.\n\n - PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED: An empty value is not allowed.\n - PROPOSAL_EXECUTOR_RESULT_NOT_RUN: We have not yet run the executor.\n - PROPOSAL_EXECUTOR_RESULT_SUCCESS: The executor was successful and proposed action updated state.\n - PROPOSAL_EXECUTOR_RESULT_FAILURE: The executor returned an error and proposed action didn't update state.","type":"string","default":"PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","enum":["PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED","PROPOSAL_EXECUTOR_RESULT_NOT_RUN","PROPOSAL_EXECUTOR_RESULT_SUCCESS","PROPOSAL_EXECUTOR_RESULT_FAILURE"]},"cosmos.group.v1.ProposalStatus":{"description":"ProposalStatus defines proposal statuses.\n\n - PROPOSAL_STATUS_UNSPECIFIED: An empty value is invalid and not allowed.\n - PROPOSAL_STATUS_SUBMITTED: Initial status of a proposal when submitted.\n - PROPOSAL_STATUS_ACCEPTED: Final status of a proposal when the final tally is done and the outcome\npasses the group policy's decision policy.\n - PROPOSAL_STATUS_REJECTED: Final status of a proposal when the final tally is done and the outcome\nis rejected by the group policy's decision policy.\n - PROPOSAL_STATUS_ABORTED: Final status of a proposal when the group policy is modified before the\nfinal tally.\n - PROPOSAL_STATUS_WITHDRAWN: A proposal can be withdrawn before the voting start time by the owner.\nWhen this happens the final status is Withdrawn.","type":"string","default":"PROPOSAL_STATUS_UNSPECIFIED","enum":["PROPOSAL_STATUS_UNSPECIFIED","PROPOSAL_STATUS_SUBMITTED","PROPOSAL_STATUS_ACCEPTED","PROPOSAL_STATUS_REJECTED","PROPOSAL_STATUS_ABORTED","PROPOSAL_STATUS_WITHDRAWN"]},"cosmos.group.v1.QueryGroupInfoResponse":{"description":"QueryGroupInfoResponse is the Query/GroupInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupInfo of the group.","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}}},"cosmos.group.v1.QueryGroupMembersResponse":{"description":"QueryGroupMembersResponse is the Query/GroupMembersResponse response type.","type":"object","properties":{"members":{"description":"members are the members of the group with given group_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupMember"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByAdminResponse":{"description":"QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info with provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPoliciesByGroupResponse":{"description":"QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type.","type":"object","properties":{"group_policies":{"description":"group_policies are the group policies info associated with the provided group.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupPolicyInfoResponse":{"description":"QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type.","type":"object","properties":{"info":{"description":"info is the GroupPolicyInfo of the group policy.","$ref":"#/definitions/cosmos.group.v1.GroupPolicyInfo"}}},"cosmos.group.v1.QueryGroupsByAdminResponse":{"description":"QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided admin.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsByMemberResponse":{"description":"QueryGroupsByMemberResponse is the Query/GroupsByMember response type.","type":"object","properties":{"groups":{"description":"groups are the groups info with the provided group member.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryGroupsResponse":{"description":"QueryGroupsResponse is the Query/Groups response type.","type":"object","properties":{"groups":{"description":"`groups` is all the groups present in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.GroupInfo"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.group.v1.QueryProposalResponse":{"description":"QueryProposalResponse is the Query/Proposal response type.","type":"object","properties":{"proposal":{"description":"proposal is the proposal info.","$ref":"#/definitions/cosmos.group.v1.Proposal"}}},"cosmos.group.v1.QueryProposalsByGroupPolicyResponse":{"description":"QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"proposals":{"description":"proposals are the proposals with given group policy.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Proposal"}}}},"cosmos.group.v1.QueryTallyResultResponse":{"description":"QueryTallyResultResponse is the Query/TallyResult response type.","type":"object","properties":{"tally":{"description":"tally defines the requested tally.","$ref":"#/definitions/cosmos.group.v1.TallyResult"}}},"cosmos.group.v1.QueryVoteByProposalVoterResponse":{"description":"QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type.","type":"object","properties":{"vote":{"description":"vote is the vote with given proposal_id and voter.","$ref":"#/definitions/cosmos.group.v1.Vote"}}},"cosmos.group.v1.QueryVotesByProposalResponse":{"description":"QueryVotesByProposalResponse is the Query/VotesByProposal response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes for given proposal_id.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.QueryVotesByVoterResponse":{"description":"QueryVotesByVoterResponse is the Query/VotesByVoter response type.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"votes":{"description":"votes are the list of votes by given voter.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.group.v1.Vote"}}}},"cosmos.group.v1.TallyResult":{"description":"TallyResult represents the sum of weighted votes for each vote option.","type":"object","properties":{"abstain_count":{"description":"abstain_count is the weighted sum of abstainers.","type":"string"},"no_count":{"description":"no_count is the weighted sum of no votes.","type":"string"},"no_with_veto_count":{"description":"no_with_veto_count is the weighted sum of veto.","type":"string"},"yes_count":{"description":"yes_count is the weighted sum of yes votes.","type":"string"}}},"cosmos.group.v1.Vote":{"type":"object","title":"Vote represents a vote for a proposal.string metadata","properties":{"metadata":{"type":"string","title":"metadata is any arbitrary metadata attached to the vote.\nthe recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2"},"option":{"description":"option is the voter's choice on the proposal.","$ref":"#/definitions/cosmos.group.v1.VoteOption"},"proposal_id":{"description":"proposal is the unique ID of the proposal.","type":"string","format":"uint64"},"submit_time":{"description":"submit_time is the timestamp when the vote was submitted.","type":"string","format":"date-time"},"voter":{"description":"voter is the account address of the voter.","type":"string"}}},"cosmos.group.v1.VoteOption":{"description":"VoteOption enumerates the valid vote options for a given proposal.\n\n - VOTE_OPTION_UNSPECIFIED: VOTE_OPTION_UNSPECIFIED defines an unspecified vote option which will\nreturn an error.\n - VOTE_OPTION_YES: VOTE_OPTION_YES defines a yes vote option.\n - VOTE_OPTION_ABSTAIN: VOTE_OPTION_ABSTAIN defines an abstain vote option.\n - VOTE_OPTION_NO: VOTE_OPTION_NO defines a no vote option.\n - VOTE_OPTION_NO_WITH_VETO: VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option.","type":"string","default":"VOTE_OPTION_UNSPECIFIED","enum":["VOTE_OPTION_UNSPECIFIED","VOTE_OPTION_YES","VOTE_OPTION_ABSTAIN","VOTE_OPTION_NO","VOTE_OPTION_NO_WITH_VETO"]},"cosmos.mint.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/mint parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.mint.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.mint.v1beta1.Params":{"description":"Params defines the parameters for the x/mint module.","type":"object","properties":{"blocks_per_year":{"type":"string","format":"uint64","title":"expected blocks per year"},"goal_bonded":{"type":"string","title":"goal of percent bonded atoms"},"inflation_max":{"type":"string","title":"maximum inflation rate"},"inflation_min":{"type":"string","title":"minimum inflation rate"},"inflation_rate_change":{"type":"string","title":"maximum annual change in inflation rate"},"mint_denom":{"type":"string","title":"type of coin to mint"}}},"cosmos.mint.v1beta1.QueryAnnualProvisionsResponse":{"description":"QueryAnnualProvisionsResponse is the response type for the\nQuery/AnnualProvisions RPC method.","type":"object","properties":{"annual_provisions":{"description":"annual_provisions is the current minting annual provisions value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryInflationResponse":{"description":"QueryInflationResponse is the response type for the Query/Inflation RPC\nmethod.","type":"object","properties":{"inflation":{"description":"inflation is the current minting inflation value.","type":"string","format":"byte"}}},"cosmos.mint.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/cosmos.mint.v1beta1.Params"}}},"cosmos.nft.v1beta1.Class":{"description":"Class defines the class of the nft type.","type":"object","properties":{"data":{"title":"data is the app specific metadata of the NFT class. Optional","$ref":"#/definitions/google.protobuf.Any"},"description":{"type":"string","title":"description is a brief description of nft classification. Optional"},"id":{"type":"string","title":"id defines the unique identifier of the NFT classification, similar to the contract address of ERC721"},"name":{"type":"string","title":"name defines the human-readable name of the NFT classification. Optional"},"symbol":{"type":"string","title":"symbol is an abbreviated name for nft classification. Optional"},"uri":{"type":"string","title":"uri for the class metadata stored off chain. It can define schema for Class and NFT `Data` attributes. Optional"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri. Optional"}}},"cosmos.nft.v1beta1.MsgSend":{"description":"MsgSend represents a message to send a nft from one account to another account.","type":"object","properties":{"class_id":{"type":"string","title":"class_id defines the unique identifier of the nft classification, similar to the contract address of ERC721"},"id":{"type":"string","title":"id defines the unique identification of nft"},"receiver":{"type":"string","title":"receiver is the receiver address of nft"},"sender":{"type":"string","title":"sender is the address of the owner of nft"}}},"cosmos.nft.v1beta1.MsgSendResponse":{"description":"MsgSendResponse defines the Msg/Send response type.","type":"object"},"cosmos.nft.v1beta1.NFT":{"description":"NFT defines the NFT.","type":"object","properties":{"class_id":{"type":"string","title":"class_id associated with the NFT, similar to the contract address of ERC721"},"data":{"title":"data is an app specific data of the NFT. Optional","$ref":"#/definitions/google.protobuf.Any"},"id":{"type":"string","title":"id is a unique identifier of the NFT"},"uri":{"type":"string","title":"uri for the NFT metadata stored off chain"},"uri_hash":{"type":"string","title":"uri_hash is a hash of the document pointed by uri"}}},"cosmos.nft.v1beta1.QueryBalanceResponse":{"type":"object","title":"QueryBalanceResponse is the response type for the Query/Balance RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs of a given class owned by the owner"}}},"cosmos.nft.v1beta1.QueryClassResponse":{"type":"object","title":"QueryClassResponse is the response type for the Query/Class RPC method","properties":{"class":{"description":"class defines the class of the nft type.","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}}},"cosmos.nft.v1beta1.QueryClassesResponse":{"type":"object","title":"QueryClassesResponse is the response type for the Query/Classes RPC method","properties":{"classes":{"description":"class defines the class of the nft type.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.Class"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryNFTResponse":{"type":"object","title":"QueryNFTResponse is the response type for the Query/NFT RPC method","properties":{"nft":{"title":"owner is the owner address of the nft","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}}},"cosmos.nft.v1beta1.QueryNFTsResponse":{"type":"object","title":"QueryNFTsResponse is the response type for the Query/NFTs RPC methods","properties":{"nfts":{"type":"array","title":"NFT defines the NFT","items":{"type":"object","$ref":"#/definitions/cosmos.nft.v1beta1.NFT"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.nft.v1beta1.QueryOwnerResponse":{"type":"object","title":"QueryOwnerResponse is the response type for the Query/Owner RPC method","properties":{"owner":{"type":"string","title":"owner is the owner address of the nft"}}},"cosmos.nft.v1beta1.QuerySupplyResponse":{"type":"object","title":"QuerySupplyResponse is the response type for the Query/Supply RPC method","properties":{"amount":{"type":"string","format":"uint64","title":"amount is the number of all NFTs from the given class"}}},"cosmos.params.v1beta1.ParamChange":{"description":"ParamChange defines an individual parameter change, for use in\nParameterChangeProposal.","type":"object","properties":{"key":{"type":"string"},"subspace":{"type":"string"},"value":{"type":"string"}}},"cosmos.params.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"param":{"description":"param defines the queried parameter.","$ref":"#/definitions/cosmos.params.v1beta1.ParamChange"}}},"cosmos.params.v1beta1.QuerySubspacesResponse":{"description":"QuerySubspacesResponse defines the response types for querying for all\nregistered subspaces and all keys for a subspace.","type":"object","properties":{"subspaces":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.params.v1beta1.Subspace"}}}},"cosmos.params.v1beta1.Subspace":{"description":"Subspace defines a parameter subspace name and all the keys that exist for\nthe subspace.","type":"object","properties":{"keys":{"type":"array","items":{"type":"string"}},"subspace":{"type":"string"}}},"cosmos.protocolpool.v1.ContinuousFund":{"description":"ContinuousFund defines the fields of continuous fund proposal.","type":"object","properties":{"expiry":{"description":"Optional, if expiry is set, removes the state object when expired.","type":"string","format":"date-time"},"percentage":{"description":"Percentage is the percentage of funds to be allocated from Community pool.","type":"string"},"recipient":{"description":"Recipient is the address string of the account receiving funds.","type":"string"}}},"cosmos.protocolpool.v1.MsgCancelContinuousFund":{"description":"MsgCancelContinuousFund defines a message to cancel continuous funds for a specific recipient.","type":"object","properties":{"authority":{"description":"Authority is the account address of authority.","type":"string"},"recipient":{"description":"Recipient is the account address string of the recipient whose funds are to be cancelled.","type":"string"}}},"cosmos.protocolpool.v1.MsgCancelContinuousFundResponse":{"description":"MsgCancelContinuousFundResponse defines the response to executing a\nMsgCancelContinuousFund message.","type":"object","properties":{"canceled_height":{"description":"CanceledHeight defines the canceled block height.","type":"string","format":"uint64"},"canceled_time":{"description":"CanceledTime is the canceled time.","type":"string","format":"date-time"},"recipient":{"description":"Recipient is the account address string of the recipient whose funds are cancelled.","type":"string"}}},"cosmos.protocolpool.v1.MsgCommunityPoolSpend":{"description":"MsgCommunityPoolSpend defines a message for sending tokens from the community\npool to another account. This message is typically executed via a governance\nproposal with the governance module being the executing authority.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"authority":{"description":"Authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"recipient":{"type":"string"}}},"cosmos.protocolpool.v1.MsgCommunityPoolSpendResponse":{"description":"MsgCommunityPoolSpendResponse defines the response to executing a\nMsgCommunityPoolSpend message.","type":"object"},"cosmos.protocolpool.v1.MsgCreateContinuousFund":{"description":"MsgCreateContinuousFund defines a message for adding continuous funds.","type":"object","properties":{"authority":{"description":"Authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"expiry":{"description":"Optional, if expiry is set, removes the state object when expired.","type":"string","format":"date-time"},"percentage":{"description":"Percentage is the percentage of funds to be allocated from Community pool.","type":"string"},"recipient":{"description":"Recipient address of the account receiving funds.","type":"string"}}},"cosmos.protocolpool.v1.MsgCreateContinuousFundResponse":{"description":"MsgCreateContinuousFundResponse defines the response to executing a\nMsgCreateContinuousFund message.","type":"object"},"cosmos.protocolpool.v1.MsgFundCommunityPool":{"description":"MsgFundCommunityPool allows an account to directly\nfund the community pool.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"depositor":{"type":"string"}}},"cosmos.protocolpool.v1.MsgFundCommunityPoolResponse":{"description":"MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type.","type":"object"},"cosmos.protocolpool.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/protocolpool parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.protocolpool.v1.Params"}}},"cosmos.protocolpool.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.protocolpool.v1.Params":{"description":"Params defines the parameters for the protocolpool module.","type":"object","properties":{"distribution_frequency":{"description":"DistributionFrequency is the frequency (in terms of blocks) that funds are distributed out from the\nx/protocolpool module.","type":"string","format":"uint64"},"enabled_distribution_denoms":{"description":"EnabledDistributionDenoms lists the denoms that are allowed to be distributed.\nThis is to avoid spending time distributing undesired tokens to continuous funds and budgets.","type":"array","items":{"type":"string"}}}},"cosmos.protocolpool.v1.QueryCommunityPoolResponse":{"description":"QueryCommunityPoolResponse is the response type for the Query/CommunityPool\nRPC method.","type":"object","properties":{"pool":{"description":"pool defines community pool's coins.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"cosmos.protocolpool.v1.QueryContinuousFundResponse":{"description":"QueryUnclaimedBudgetResponse is the response type for the Query/ContinuousFund\nRPC method.","type":"object","properties":{"continuous_fund":{"description":"ContinuousFunds is the given continuous fund returned in the query.","$ref":"#/definitions/cosmos.protocolpool.v1.ContinuousFund"}}},"cosmos.protocolpool.v1.QueryContinuousFundsResponse":{"description":"QueryUnclaimedBudgetResponse is the response type for the Query/ContinuousFunds\nRPC method.","type":"object","properties":{"continuous_funds":{"description":"ContinuousFunds defines all continuous funds in state.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.protocolpool.v1.ContinuousFund"}}}},"cosmos.protocolpool.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"$ref":"#/definitions/cosmos.protocolpool.v1.Params"}}},"cosmos.slashing.v1beta1.MsgUnjail":{"type":"object","title":"MsgUnjail defines the Msg/Unjail request type","properties":{"validator_addr":{"type":"string"}}},"cosmos.slashing.v1beta1.MsgUnjailResponse":{"type":"object","title":"MsgUnjailResponse defines the Msg/Unjail response type"},"cosmos.slashing.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/slashing parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.slashing.v1beta1.Params":{"description":"Params represents the parameters used for by the slashing module.","type":"object","properties":{"downtime_jail_duration":{"type":"string"},"min_signed_per_window":{"type":"string","format":"byte"},"signed_blocks_window":{"type":"string","format":"int64"},"slash_fraction_double_sign":{"type":"string","format":"byte"},"slash_fraction_downtime":{"type":"string","format":"byte"}}},"cosmos.slashing.v1beta1.QueryParamsResponse":{"type":"object","title":"QueryParamsResponse is the response type for the Query/Params RPC method","properties":{"params":{"$ref":"#/definitions/cosmos.slashing.v1beta1.Params"}}},"cosmos.slashing.v1beta1.QuerySigningInfoResponse":{"type":"object","title":"QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC\nmethod","properties":{"val_signing_info":{"title":"val_signing_info is the signing info of requested val cons address","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}}},"cosmos.slashing.v1beta1.QuerySigningInfosResponse":{"type":"object","title":"QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC\nmethod","properties":{"info":{"type":"array","title":"info is the signing info of all validators","items":{"type":"object","$ref":"#/definitions/cosmos.slashing.v1beta1.ValidatorSigningInfo"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.slashing.v1beta1.ValidatorSigningInfo":{"description":"ValidatorSigningInfo defines a validator's signing info for monitoring their\nliveness activity.","type":"object","properties":{"address":{"type":"string"},"index_offset":{"description":"Index which is incremented every time a validator is bonded in a block and\n_may_ have signed a pre-commit or not. This in conjunction with the\nsigned_blocks_window param determines the index in the missed block bitmap.","type":"string","format":"int64"},"jailed_until":{"description":"Timestamp until which the validator is jailed due to liveness downtime.","type":"string","format":"date-time"},"missed_blocks_counter":{"description":"A counter of missed (unsigned) blocks. It is used to avoid unnecessary\nreads in the missed block bitmap.","type":"string","format":"int64"},"start_height":{"type":"string","format":"int64","title":"Height at which validator was first a candidate OR was un-jailed"},"tombstoned":{"description":"Whether or not a validator has been tombstoned (killed out of validator\nset). It is set once the validator commits an equivocation or for any other\nconfigured misbehavior.","type":"boolean"}}},"cosmos.staking.v1beta1.BondStatus":{"description":"BondStatus is the status of a validator.\n\n - BOND_STATUS_UNSPECIFIED: UNSPECIFIED defines an invalid validator status.\n - BOND_STATUS_UNBONDED: UNBONDED defines a validator that is not bonded.\n - BOND_STATUS_UNBONDING: UNBONDING defines a validator that is unbonding.\n - BOND_STATUS_BONDED: BONDED defines a validator that is bonded.","type":"string","default":"BOND_STATUS_UNSPECIFIED","enum":["BOND_STATUS_UNSPECIFIED","BOND_STATUS_UNBONDED","BOND_STATUS_UNBONDING","BOND_STATUS_BONDED"]},"cosmos.staking.v1beta1.Commission":{"description":"Commission defines commission parameters for a given validator.","type":"object","properties":{"commission_rates":{"description":"commission_rates defines the initial commission rates to be used for creating a validator.","$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"update_time":{"description":"update_time is the last time the commission rate was changed.","type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.CommissionRates":{"description":"CommissionRates defines the initial commission rates to be used for creating\na validator.","type":"object","properties":{"max_change_rate":{"description":"max_change_rate defines the maximum daily increase of the validator commission, as a fraction.","type":"string"},"max_rate":{"description":"max_rate defines the maximum commission rate which validator can ever charge, as a fraction.","type":"string"},"rate":{"description":"rate is the commission rate charged to delegators, as a fraction.","type":"string"}}},"cosmos.staking.v1beta1.Delegation":{"description":"Delegation represents the bond with tokens held by an account. It is\nowned by one delegator, and is associated with the voting power of one\nvalidator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"shares":{"description":"shares define the delegation shares received.","type":"string"},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.DelegationResponse":{"description":"DelegationResponse is equivalent to Delegation except that it contains a\nbalance in addition to shares which is more suitable for client responses.","type":"object","properties":{"balance":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Delegation"}}},"cosmos.staking.v1beta1.Description":{"description":"Description defines a validator description.","type":"object","properties":{"details":{"description":"details define other optional details.","type":"string"},"identity":{"description":"identity defines an optional identity signature (ex. UPort or Keybase).","type":"string"},"moniker":{"description":"moniker defines a human-readable name for the validator.","type":"string"},"security_contact":{"description":"security_contact defines an optional email for security contact.","type":"string"},"website":{"description":"website defines an optional website link.","type":"string"}}},"cosmos.staking.v1beta1.HistoricalInfo":{"description":"HistoricalInfo contains header and validator information for a given block.\nIt is stored as part of staking module's state, which persists the `n` most\nrecent HistoricalInfo\n(`n` is set by the staking module's `historical_entries` parameter).","type":"object","properties":{"header":{"$ref":"#/definitions/tendermint.types.Header"},"valset":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.MsgBeginRedelegate":{"description":"MsgBeginRedelegate defines a SDK message for performing a redelegation\nof coins from a delegator and source validator to a destination validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_dst_address":{"type":"string"},"validator_src_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgBeginRedelegateResponse":{"description":"MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type.","type":"object","properties":{"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegation":{"type":"object","title":"MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator","properties":{"amount":{"title":"amount is always less than or equal to unbonding delegation entry balance","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse":{"type":"object","title":"MsgCancelUnbondingDelegationResponse"},"cosmos.staking.v1beta1.MsgCreateValidator":{"description":"MsgCreateValidator defines a SDK message for creating a new validator.","type":"object","properties":{"commission":{"$ref":"#/definitions/cosmos.staking.v1beta1.CommissionRates"},"delegator_address":{"description":"Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated.\nThe validator address bytes and delegator address bytes refer to the same account while creating validator (defer\nonly in bech32 notation).","type":"string"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"pubkey":{"$ref":"#/definitions/google.protobuf.Any"},"validator_address":{"type":"string"},"value":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"cosmos.staking.v1beta1.MsgCreateValidatorResponse":{"description":"MsgCreateValidatorResponse defines the Msg/CreateValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgDelegate":{"description":"MsgDelegate defines a SDK message for performing a delegation of coins\nfrom a delegator to a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgDelegateResponse":{"description":"MsgDelegateResponse defines the Msg/Delegate response type.","type":"object"},"cosmos.staking.v1beta1.MsgEditValidator":{"description":"MsgEditValidator defines a SDK message for editing an existing validator.","type":"object","properties":{"commission_rate":{"type":"string","title":"We pass a reference to the new commission rate and min self delegation as\nit's not mandatory to update. If not updated, the deserialized rate will be\nzero with no way to distinguish if an update was intended.\nREF: #2373"},"description":{"$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"min_self_delegation":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgEditValidatorResponse":{"description":"MsgEditValidatorResponse defines the Msg/EditValidator response type.","type":"object"},"cosmos.staking.v1beta1.MsgUndelegate":{"description":"MsgUndelegate defines a SDK message for performing an undelegation from a\ndelegate and a validator.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"delegator_address":{"type":"string"},"validator_address":{"type":"string"}}},"cosmos.staking.v1beta1.MsgUndelegateResponse":{"description":"MsgUndelegateResponse defines the Msg/Undelegate response type.","type":"object","properties":{"amount":{"title":"amount returns the amount of undelegated coins","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"completion_time":{"type":"string","format":"date-time"}}},"cosmos.staking.v1beta1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the x/staking parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"cosmos.staking.v1beta1.Params":{"description":"Params defines the parameters for the x/staking module.","type":"object","properties":{"bond_denom":{"description":"bond_denom defines the bondable coin denomination.","type":"string"},"historical_entries":{"description":"historical_entries is the number of historical entries to persist.","type":"integer","format":"int64"},"max_entries":{"description":"max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio).","type":"integer","format":"int64"},"max_validators":{"description":"max_validators is the maximum number of validators.","type":"integer","format":"int64"},"min_commission_rate":{"type":"string","title":"min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators"},"unbonding_time":{"description":"unbonding_time is the time duration of unbonding.","type":"string"}}},"cosmos.staking.v1beta1.Pool":{"description":"Pool is used for tracking bonded and not-bonded token supply of the bond\ndenomination.","type":"object","properties":{"bonded_tokens":{"type":"string"},"not_bonded_tokens":{"type":"string"}}},"cosmos.staking.v1beta1.QueryDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/Delegation RPC method.","type":"object","properties":{"delegation_response":{"description":"delegation_responses defines the delegation info of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse":{"description":"QueryDelegatorDelegationsResponse is response type for the\nQuery/DelegatorDelegations RPC method.","type":"object","properties":{"delegation_responses":{"description":"delegation_responses defines all the delegations' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse":{"description":"QueryUnbondingDelegatorDelegationsResponse is response type for the\nQuery/UnbondingDelegatorDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorResponse":{"description":"QueryDelegatorValidatorResponse response type for the\nQuery/DelegatorValidator RPC method.","type":"object","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse":{"description":"QueryDelegatorValidatorsResponse is response type for the\nQuery/DelegatorValidators RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators defines the validators' info of a delegator.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.QueryHistoricalInfoResponse":{"description":"QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC\nmethod.","type":"object","properties":{"hist":{"description":"hist defines the historical info at the given height.","$ref":"#/definitions/cosmos.staking.v1beta1.HistoricalInfo"}}},"cosmos.staking.v1beta1.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/cosmos.staking.v1beta1.Params"}}},"cosmos.staking.v1beta1.QueryPoolResponse":{"description":"QueryPoolResponse is response type for the Query/Pool RPC method.","type":"object","properties":{"pool":{"description":"pool defines the pool info.","$ref":"#/definitions/cosmos.staking.v1beta1.Pool"}}},"cosmos.staking.v1beta1.QueryRedelegationsResponse":{"description":"QueryRedelegationsResponse is response type for the Query/Redelegations RPC\nmethod.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"redelegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationResponse"}}}},"cosmos.staking.v1beta1.QueryUnbondingDelegationResponse":{"description":"QueryDelegationResponse is response type for the Query/UnbondingDelegation\nRPC method.","type":"object","properties":{"unbond":{"description":"unbond defines the unbonding information of a delegation.","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}},"cosmos.staking.v1beta1.QueryValidatorDelegationsResponse":{"type":"object","title":"QueryValidatorDelegationsResponse is response type for the\nQuery/ValidatorDelegations RPC method","properties":{"delegation_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.DelegationResponse"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"cosmos.staking.v1beta1.QueryValidatorResponse":{"type":"object","title":"QueryValidatorResponse is response type for the Query/Validator RPC method","properties":{"validator":{"description":"validator defines the validator info.","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}},"cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse":{"description":"QueryValidatorUnbondingDelegationsResponse is response type for the\nQuery/ValidatorUnbondingDelegations RPC method.","type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"unbonding_responses":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegation"}}}},"cosmos.staking.v1beta1.QueryValidatorsResponse":{"type":"object","title":"QueryValidatorsResponse is response type for the Query/Validators RPC method","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"validators":{"description":"validators contains all the queried validators.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.Validator"}}}},"cosmos.staking.v1beta1.Redelegation":{"description":"Redelegation contains the list of a particular delegator's redelegating bonds\nfrom a particular source validator to a particular destination validator.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the bech32-encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the redelegation entries.\n\nredelegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}},"validator_dst_address":{"description":"validator_dst_address is the validator redelegation destination operator address.","type":"string"},"validator_src_address":{"description":"validator_src_address is the validator redelegation source operator address.","type":"string"}}},"cosmos.staking.v1beta1.RedelegationEntry":{"description":"RedelegationEntry defines a redelegation object with relevant metadata.","type":"object","properties":{"completion_time":{"description":"completion_time defines the unix time for redelegation completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height defines the height which the redelegation took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the initial balance when redelegation started.","type":"string"},"shares_dst":{"description":"shares_dst is the amount of destination-validator shares created by redelegation.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.RedelegationEntryResponse":{"description":"RedelegationEntryResponse is equivalent to a RedelegationEntry except that it\ncontains a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"balance":{"type":"string"},"redelegation_entry":{"$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntry"}}},"cosmos.staking.v1beta1.RedelegationResponse":{"description":"RedelegationResponse is equivalent to a Redelegation except that its entries\ncontain a balance in addition to shares which is more suitable for client\nresponses.","type":"object","properties":{"entries":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.RedelegationEntryResponse"}},"redelegation":{"$ref":"#/definitions/cosmos.staking.v1beta1.Redelegation"}}},"cosmos.staking.v1beta1.UnbondingDelegation":{"description":"UnbondingDelegation stores all of a single delegator's unbonding bonds\nfor a single validator in an time-ordered list.","type":"object","properties":{"delegator_address":{"description":"delegator_address is the encoded address of the delegator.","type":"string"},"entries":{"description":"entries are the unbonding delegation entries.\n\nunbonding delegation entries","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.staking.v1beta1.UnbondingDelegationEntry"}},"validator_address":{"description":"validator_address is the encoded address of the validator.","type":"string"}}},"cosmos.staking.v1beta1.UnbondingDelegationEntry":{"description":"UnbondingDelegationEntry defines an unbonding object with relevant metadata.","type":"object","properties":{"balance":{"description":"balance defines the tokens to receive at completion.","type":"string"},"completion_time":{"description":"completion_time is the unix time for unbonding completion.","type":"string","format":"date-time"},"creation_height":{"description":"creation_height is the height which the unbonding took place.","type":"string","format":"int64"},"initial_balance":{"description":"initial_balance defines the tokens initially scheduled to receive at completion.","type":"string"},"unbonding_id":{"type":"string","format":"uint64","title":"Incrementing id that uniquely identifies this entry"},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"Strictly positive if this entry's unbonding has been stopped by external modules"}}},"cosmos.staking.v1beta1.Validator":{"description":"Validator defines a validator, together with the total amount of the\nValidator's bond shares and their exchange rate to coins. Slashing results in\na decrease in the exchange rate, allowing correct calculation of future\nundelegations without iterating over delegators. When coins are delegated to\nthis validator, the validator is credited with a delegation whose number of\nbond shares is based on the amount of coins delegated divided by the current\nexchange rate. Voting power can be calculated as total bonded shares\nmultiplied by exchange rate.","type":"object","properties":{"commission":{"description":"commission defines the commission parameters.","$ref":"#/definitions/cosmos.staking.v1beta1.Commission"},"consensus_pubkey":{"description":"consensus_pubkey is the consensus public key of the validator, as a Protobuf Any.","$ref":"#/definitions/google.protobuf.Any"},"delegator_shares":{"description":"delegator_shares defines total shares issued to a validator's delegators.","type":"string"},"description":{"description":"description defines the description terms for the validator.","$ref":"#/definitions/cosmos.staking.v1beta1.Description"},"jailed":{"description":"jailed defined whether the validator has been jailed from bonded status or not.","type":"boolean"},"min_self_delegation":{"description":"min_self_delegation is the validator's self declared minimum self delegation.","type":"string"},"operator_address":{"description":"operator_address defines the address of the validator's operator; bech encoded in JSON.","type":"string"},"status":{"description":"status is the validator status (bonded/unbonding/unbonded).","$ref":"#/definitions/cosmos.staking.v1beta1.BondStatus"},"tokens":{"description":"tokens define the delegated tokens (incl. self-delegation).","type":"string"},"unbonding_height":{"description":"unbonding_height defines, if unbonding, the height at which this validator has begun unbonding.","type":"string","format":"int64"},"unbonding_ids":{"type":"array","title":"list of unbonding ids, each uniquely identifing an unbonding of this validator","items":{"type":"string","format":"uint64"}},"unbonding_on_hold_ref_count":{"type":"string","format":"int64","title":"strictly positive if this validator's unbonding has been stopped by external modules"},"unbonding_time":{"description":"unbonding_time defines, if unbonding, the min time for the validator to complete unbonding.","type":"string","format":"date-time"}}},"cosmos.store.streaming.abci.ListenCommitRequest":{"type":"object","title":"ListenCommitRequest is the request type for the ListenCommit RPC method","properties":{"block_height":{"type":"string","format":"int64","title":"explicitly pass in block height as ResponseCommit does not contain this info"},"change_set":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.store.v1beta1.StoreKVPair"}},"res":{"$ref":"#/definitions/tendermint.abci.ResponseCommit"}}},"cosmos.store.streaming.abci.ListenCommitResponse":{"type":"object","title":"ListenCommitResponse is the response type for the ListenCommit RPC method"},"cosmos.store.streaming.abci.ListenFinalizeBlockRequest":{"type":"object","title":"ListenEndBlockRequest is the request type for the ListenEndBlock RPC method","properties":{"req":{"$ref":"#/definitions/tendermint.abci.RequestFinalizeBlock"},"res":{"$ref":"#/definitions/tendermint.abci.ResponseFinalizeBlock"}}},"cosmos.store.streaming.abci.ListenFinalizeBlockResponse":{"type":"object","title":"ListenEndBlockResponse is the response type for the ListenEndBlock RPC method"},"cosmos.store.v1beta1.StoreKVPair":{"type":"object","title":"StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes)\nIt optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and\nDeletes","properties":{"delete":{"type":"boolean","title":"true indicates a delete operation, false indicates a set operation"},"key":{"type":"string","format":"byte"},"store_key":{"type":"string","title":"the store key for the KVStore this pair originates from"},"value":{"type":"string","format":"byte"}}},"cosmos.tx.signing.v1beta1.SignMode":{"description":"SignMode represents a signing mode with its own security guarantees.\n\nThis enum should be considered a registry of all known sign modes\nin the Cosmos ecosystem. Apps are not expected to support all known\nsign modes. Apps that would like to support custom sign modes are\nencouraged to open a small PR against this file to add a new case\nto this SignMode enum describing their sign mode so that different\napps have a consistent version of this enum.\n\n - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be\nrejected.\n - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is\nverified with raw bytes from Tx.\n - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some\nhuman-readable textual representation on top of the binary representation\nfrom SIGN_MODE_DIRECT.\n\nSince: cosmos-sdk 0.50\n - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses\nSignDocDirectAux. As opposed to SIGN_MODE_DIRECT, this sign mode does not\nrequire signers signing over other signers' `signer_info`.\n\nSince: cosmos-sdk 0.46\n - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses\nAmino JSON and will be removed in the future.\n - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos\nSDK. Ref: https://eips.ethereum.org/EIPS/eip-191\n\nCurrently, SIGN_MODE_EIP_191 is registered as a SignMode enum variant,\nbut is not implemented on the SDK by default. To enable EIP-191, you need\nto pass a custom `TxConfig` that has an implementation of\n`SignModeHandler` for EIP-191. The SDK may decide to fully support\nEIP-191 in the future.\n\nSince: cosmos-sdk 0.45.2","type":"string","default":"SIGN_MODE_UNSPECIFIED","enum":["SIGN_MODE_UNSPECIFIED","SIGN_MODE_DIRECT","SIGN_MODE_TEXTUAL","SIGN_MODE_DIRECT_AUX","SIGN_MODE_LEGACY_AMINO_JSON","SIGN_MODE_EIP_191"]},"cosmos.tx.v1beta1.AuthInfo":{"description":"AuthInfo describes the fee and signer modes that are used to sign a\ntransaction.","type":"object","properties":{"fee":{"description":"Fee is the fee and gas limit for the transaction. The first signer is the\nprimary signer and the one which pays the fee. The fee can be calculated\nbased on the cost of evaluating the body and doing signature verification\nof the signers. This can be estimated via simulation.","$ref":"#/definitions/cosmos.tx.v1beta1.Fee"},"signer_infos":{"description":"signer_infos defines the signing modes for the required signers. The number\nand order of elements must match the required signers from TxBody's\nmessages. The first element is the primary signer and the one which pays\nthe fee.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.SignerInfo"}},"tip":{"description":"Tip is the optional tip used for transactions fees paid in another denom.\n\nThis field is ignored if the chain didn't enable tips, i.e. didn't add the\n`TipDecorator` in its posthandler.","$ref":"#/definitions/cosmos.tx.v1beta1.Tip"}}},"cosmos.tx.v1beta1.BroadcastMode":{"description":"BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC\nmethod.\n\n - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering\n - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead,\nBROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards.\n - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits\nfor a CheckTx execution response only.\n - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client\nreturns immediately.","type":"string","default":"BROADCAST_MODE_UNSPECIFIED","enum":["BROADCAST_MODE_UNSPECIFIED","BROADCAST_MODE_BLOCK","BROADCAST_MODE_SYNC","BROADCAST_MODE_ASYNC"]},"cosmos.tx.v1beta1.BroadcastTxRequest":{"description":"BroadcastTxRequest is the request type for the Service.BroadcastTxRequest\nRPC method.","type":"object","properties":{"mode":{"$ref":"#/definitions/cosmos.tx.v1beta1.BroadcastMode"},"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.BroadcastTxResponse":{"description":"BroadcastTxResponse is the response type for the\nService.BroadcastTx method.","type":"object","properties":{"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.Fee":{"description":"Fee includes the amount of coins paid in fees and the maximum\ngas to be used by the transaction. The ratio yields an effective \"gasprice\",\nwhich must be above some miminum to be accepted into the mempool.","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of coins to be paid as a fee","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"gas_limit":{"type":"string","format":"uint64","title":"gas_limit is the maximum gas that can be used in transaction processing\nbefore an out of gas error occurs"},"granter":{"type":"string","title":"if set, the fee payer (either the first signer or the value of the payer\nfield) requests that a fee grant be used to pay fees instead of the fee\npayer's own balance. If an appropriate fee grant does not exist or the\nchain does not support fee grants, this will fail"},"payer":{"description":"if unset, the first signer is responsible for paying the fees. If set, the\nspecified account must pay the fees. the payer must be a tx signer (and\nthus have signed this field in AuthInfo). setting this field does *not*\nchange the ordering of required signers for the transaction.","type":"string"}}},"cosmos.tx.v1beta1.GetBlockWithTxsResponse":{"description":"GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs\nmethod.","type":"object","properties":{"block":{"$ref":"#/definitions/tendermint.types.Block"},"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"pagination":{"description":"pagination defines a pagination for the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"txs":{"description":"txs are the transactions in the block.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.GetTxResponse":{"description":"GetTxResponse is the response type for the Service.GetTx method.","type":"object","properties":{"tx":{"description":"tx is the queried transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_response":{"description":"tx_response is the queried TxResponses.","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}}},"cosmos.tx.v1beta1.GetTxsEventResponse":{"description":"GetTxsEventResponse is the response type for the Service.TxsByEvents\nRPC method.","type":"object","properties":{"pagination":{"description":"pagination defines a pagination for the response.\nDeprecated post v0.46.x: use total instead.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"total":{"type":"string","format":"uint64","title":"total is total number of results available"},"tx_responses":{"description":"tx_responses is the list of queried TxResponses.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.abci.v1beta1.TxResponse"}},"txs":{"description":"txs is the list of queried transactions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}}},"cosmos.tx.v1beta1.ModeInfo":{"description":"ModeInfo describes the signing mode of a single or nested multisig signer.","type":"object","properties":{"multi":{"title":"multi represents a nested multisig signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Multi"},"single":{"title":"single represents a single signer","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo.Single"}}},"cosmos.tx.v1beta1.ModeInfo.Multi":{"type":"object","title":"Multi is the mode info for a multisig public key","properties":{"bitarray":{"title":"bitarray specifies which keys within the multisig are signing","$ref":"#/definitions/cosmos.crypto.multisig.v1beta1.CompactBitArray"},"mode_infos":{"type":"array","title":"mode_infos is the corresponding modes of the signers of the multisig\nwhich could include nested multisig public keys","items":{"type":"object","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"}}}},"cosmos.tx.v1beta1.ModeInfo.Single":{"type":"object","title":"Single is the mode info for a single signer. It is structured as a message\nto allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the\nfuture","properties":{"mode":{"title":"mode is the signing mode of the single signer","$ref":"#/definitions/cosmos.tx.signing.v1beta1.SignMode"}}},"cosmos.tx.v1beta1.OrderBy":{"description":"- ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults\nto ASC in this case.\n - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order\n - ORDER_BY_DESC: ORDER_BY_DESC defines descending order","type":"string","title":"OrderBy defines the sorting order","default":"ORDER_BY_UNSPECIFIED","enum":["ORDER_BY_UNSPECIFIED","ORDER_BY_ASC","ORDER_BY_DESC"]},"cosmos.tx.v1beta1.SignerInfo":{"description":"SignerInfo describes the public key and signing mode of a single top-level\nsigner.","type":"object","properties":{"mode_info":{"title":"mode_info describes the signing mode of the signer and is a nested\nstructure to support nested multisig pubkey's","$ref":"#/definitions/cosmos.tx.v1beta1.ModeInfo"},"public_key":{"description":"public_key is the public key of the signer. It is optional for accounts\nthat already exist in state. If unset, the verifier can use the required \\\nsigner address for this position and lookup the public key.","$ref":"#/definitions/google.protobuf.Any"},"sequence":{"description":"sequence is the sequence of the account, which describes the\nnumber of committed transactions signed by a given address. It is used to\nprevent replay attacks.","type":"string","format":"uint64"}}},"cosmos.tx.v1beta1.SimulateRequest":{"description":"SimulateRequest is the request type for the Service.Simulate\nRPC method.","type":"object","properties":{"tx":{"description":"tx is the transaction to simulate.\nDeprecated. Send raw tx bytes instead.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"},"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.SimulateResponse":{"description":"SimulateResponse is the response type for the\nService.SimulateRPC method.","type":"object","properties":{"gas_info":{"description":"gas_info is the information about gas used in the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.GasInfo"},"result":{"description":"result is the result of the simulation.","$ref":"#/definitions/cosmos.base.abci.v1beta1.Result"}}},"cosmos.tx.v1beta1.Tip":{"description":"Tip is the tip used for meta-transactions.","type":"object","properties":{"amount":{"type":"array","title":"amount is the amount of the tip","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"tipper":{"type":"string","title":"tipper is the address of the account paying for the tip"}}},"cosmos.tx.v1beta1.Tx":{"description":"Tx is the standard type used for broadcasting transactions.","type":"object","properties":{"auth_info":{"title":"auth_info is the authorization related content of the transaction,\nspecifically signers, signer modes and fee","$ref":"#/definitions/cosmos.tx.v1beta1.AuthInfo"},"body":{"title":"body is the processable content of the transaction","$ref":"#/definitions/cosmos.tx.v1beta1.TxBody"},"signatures":{"description":"signatures is a list of signatures that matches the length and order of\nAuthInfo's signer_infos to allow connecting signature meta information like\npublic key and signing mode by position.","type":"array","items":{"type":"string","format":"byte"}}}},"cosmos.tx.v1beta1.TxBody":{"description":"TxBody is the body of a transaction that all signers sign over.","type":"object","properties":{"extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, the transaction will be rejected","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"memo":{"description":"memo is any arbitrary note/comment to be added to the transaction.\nWARNING: in clients, any publicly exposed text should not be called memo,\nbut should be called `note` instead (see\nhttps://github.com/cosmos/cosmos-sdk/issues/9122).","type":"string"},"messages":{"description":"messages is a list of messages to be executed. The required signers of\nthose messages define the number and order of elements in AuthInfo's\nsigner_infos and Tx's signatures. Each required signer address is added to\nthe list only the first time it occurs.\nBy convention, the first required signer (usually from the first message)\nis referred to as the primary signer and pays the fee for the whole\ntransaction.","type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"non_critical_extension_options":{"type":"array","title":"extension_options are arbitrary options that can be added by chains\nwhen the default options are not sufficient. If any of these are present\nand can't be handled, they will be ignored","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"timeout_height":{"description":"timeout_height is the block height after which this transaction will not\nbe processed by the chain.","type":"string","format":"uint64"},"timeout_timestamp":{"description":"timeout_timestamp is the block time after which this transaction will not\nbe processed by the chain.\n\nNote, if unordered=true this value MUST be set\nand will act as a short-lived TTL in which the transaction is deemed valid\nand kept in memory to prevent duplicates.","type":"string","format":"date-time"},"unordered":{"description":"unordered, when set to true, indicates that the transaction signer(s)\nintend for the transaction to be evaluated and executed in an un-ordered\nfashion. Specifically, the account's nonce will NOT be checked or\nincremented, which allows for fire-and-forget as well as concurrent\ntransaction execution.\n\nNote, when set to true, the existing 'timeout_timestamp' value must\nbe set and will be used to correspond to a timestamp in which the transaction is deemed\nvalid.\n\nWhen true, the sequence value MUST be 0, and any transaction with unordered=true and a non-zero sequence value will\nbe rejected.\nExternal services that make assumptions about sequence values may need to be updated because of this.","type":"boolean"}}},"cosmos.tx.v1beta1.TxDecodeAminoRequest":{"description":"TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino\nRPC method.","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeAminoResponse":{"description":"TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino\nRPC method.","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxDecodeRequest":{"description":"TxDecodeRequest is the request type for the Service.TxDecode\nRPC method.","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the raw transaction.","type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxDecodeResponse":{"description":"TxDecodeResponse is the response type for the\nService.TxDecode method.","type":"object","properties":{"tx":{"description":"tx is the decoded transaction.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeAminoRequest":{"description":"TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino\nRPC method.","type":"object","properties":{"amino_json":{"type":"string"}}},"cosmos.tx.v1beta1.TxEncodeAminoResponse":{"description":"TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino\nRPC method.","type":"object","properties":{"amino_binary":{"type":"string","format":"byte"}}},"cosmos.tx.v1beta1.TxEncodeRequest":{"description":"TxEncodeRequest is the request type for the Service.TxEncode\nRPC method.","type":"object","properties":{"tx":{"description":"tx is the transaction to encode.","$ref":"#/definitions/cosmos.tx.v1beta1.Tx"}}},"cosmos.tx.v1beta1.TxEncodeResponse":{"description":"TxEncodeResponse is the response type for the\nService.TxEncode method.","type":"object","properties":{"tx_bytes":{"description":"tx_bytes is the encoded transaction bytes.","type":"string","format":"byte"}}},"cosmos.upgrade.v1beta1.ModuleVersion":{"description":"ModuleVersion specifies a module and its consensus version.","type":"object","properties":{"name":{"type":"string","title":"name of the app module"},"version":{"type":"string","format":"uint64","title":"consensus version of the app module"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgrade":{"description":"MsgCancelUpgrade is the Msg/CancelUpgrade request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"}}},"cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse":{"description":"MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type.","type":"object"},"cosmos.upgrade.v1beta1.MsgSoftwareUpgrade":{"description":"MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"plan":{"description":"plan is the upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse":{"description":"MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type.","type":"object"},"cosmos.upgrade.v1beta1.Plan":{"description":"Plan specifies information about a planned upgrade and when it should occur.","type":"object","properties":{"height":{"description":"The height at which the upgrade must be performed.","type":"string","format":"int64"},"info":{"type":"string","title":"Any application specific upgrade info to be included on-chain\nsuch as a git commit that validators could automatically upgrade to"},"name":{"description":"Sets the name for the upgrade. This name will be used by the upgraded\nversion of the software to apply any special \"on-upgrade\" commands during\nthe first BeginBlock method after the upgrade is applied. It is also used\nto detect whether a software version can handle a given upgrade. If no\nupgrade handler with this name has been set in the software, it will be\nassumed that the software is out-of-date when the upgrade Time or Height is\nreached and the software will exit.","type":"string"},"time":{"description":"Deprecated: Time based upgrades have been deprecated. Time based upgrade logic\nhas been removed from the SDK.\nIf this field is not empty, an error will be thrown.","type":"string","format":"date-time"},"upgraded_client_state":{"description":"Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been\nmoved to the IBC module in the sub module 02-client.\nIf this field is not empty, an error will be thrown.","$ref":"#/definitions/google.protobuf.Any"}}},"cosmos.upgrade.v1beta1.QueryAppliedPlanResponse":{"description":"QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC\nmethod.","type":"object","properties":{"height":{"description":"height is the block height at which the plan was applied.","type":"string","format":"int64"}}},"cosmos.upgrade.v1beta1.QueryAuthorityResponse":{"type":"object","title":"QueryAuthorityResponse is the response type for Query/Authority","properties":{"address":{"type":"string"}}},"cosmos.upgrade.v1beta1.QueryCurrentPlanResponse":{"description":"QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC\nmethod.","type":"object","properties":{"plan":{"description":"plan is the current upgrade plan.","$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"}}},"cosmos.upgrade.v1beta1.QueryModuleVersionsResponse":{"description":"QueryModuleVersionsResponse is the response type for the Query/ModuleVersions\nRPC method.","type":"object","properties":{"module_versions":{"description":"module_versions is a list of module names with their consensus versions.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.upgrade.v1beta1.ModuleVersion"}}}},"cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState\nRPC method.","type":"object","properties":{"upgraded_consensus_state":{"type":"string","format":"byte"}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","type":"object","properties":{"from_address":{"type":"string"},"start_time":{"description":"start of vesting as unix time (in seconds).","type":"string","format":"int64"},"to_address":{"type":"string"},"vesting_periods":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.vesting.v1beta1.Period"}}}},"cosmos.vesting.v1beta1.MsgCreatePeriodicVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount\nresponse type.","type":"object"},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccount":{"description":"MsgCreatePermanentLockedAccount defines a message that enables creating a permanent\nlocked account.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreatePermanentLockedAccountResponse":{"description":"MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type.","type":"object"},"cosmos.vesting.v1beta1.MsgCreateVestingAccount":{"description":"MsgCreateVestingAccount defines a message that enables creating a vesting\naccount.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"delayed":{"type":"boolean"},"end_time":{"description":"end of vesting as unix time (in seconds).","type":"string","format":"int64"},"from_address":{"type":"string"},"to_address":{"type":"string"}}},"cosmos.vesting.v1beta1.MsgCreateVestingAccountResponse":{"description":"MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type.","type":"object"},"cosmos.vesting.v1beta1.Period":{"description":"Period defines a length of time and amount of coins that will vest.","type":"object","properties":{"amount":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"length":{"description":"Period duration in seconds.","type":"string","format":"int64"}}},"gamm.poolmodels.balancer.MsgCreateBalancerPool":{"type":"object","title":"===================== MsgCreatePool","properties":{"pool_assets":{"type":"array","items":{"type":"object","$ref":"#/definitions/gamm.poolmodels.balancer.PoolAsset"}},"pool_params":{"$ref":"#/definitions/gamm.poolmodels.balancer.PoolParams"},"sender":{"type":"string"}}},"gamm.poolmodels.balancer.MsgCreateBalancerPoolResponse":{"type":"object","title":"Returns the poolID","properties":{"pool_id":{"type":"string","format":"uint64"}}},"gamm.poolmodels.balancer.PoolAsset":{"description":"Pool asset is an internal struct that combines the amount of the\ntoken in the pool, and its balancer weight.\nThis is an awkward packaging of data,\nand should be revisited in a future state migration.","type":"object","properties":{"token":{"description":"Coins we are talking about,\nthe denomination must be unique amongst all PoolAssets for this pool.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"weight":{"type":"string","title":"Weight that is not normalized. This weight must be less than 2^50"}}},"gamm.poolmodels.balancer.PoolParams":{"description":"PoolParams defined the parameters that will be managed by the pool\ngovernance in the future. This params are not managed by the chain\ngovernance. Instead they will be managed by the token holders of the pool.","type":"object","properties":{"exit_fee":{"type":"string","title":"N.B.: exit fee is disabled during pool creation in x/poolmanager. While old\npools can maintain a non-zero fee. No new pool can be created with non-zero\nfee anymore"},"swap_fee":{"type":"string"}}},"gamm.poolmodels.stableswap.MsgCreateStableswapPool":{"type":"object","title":"===================== MsgCreatePool","properties":{"future_pool_governor":{"type":"string"},"initial_pool_liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"pool_params":{"$ref":"#/definitions/gamm.poolmodels.stableswap.PoolParams"},"scaling_factor_controller":{"type":"string"},"scaling_factors":{"type":"array","items":{"type":"string","format":"uint64"}},"sender":{"type":"string"}}},"gamm.poolmodels.stableswap.MsgCreateStableswapPoolResponse":{"description":"Returns a poolID with custom poolName.","type":"object","properties":{"pool_id":{"type":"string","format":"uint64"}}},"gamm.poolmodels.stableswap.MsgStableSwapAdjustScalingFactors":{"description":"Sender must be the pool's scaling_factor_governor in order for the tx to\nsucceed. Adjusts stableswap scaling factors.","type":"object","properties":{"pool_id":{"type":"string","format":"uint64"},"scaling_factors":{"type":"array","items":{"type":"string","format":"uint64"}},"sender":{"type":"string"}}},"gamm.poolmodels.stableswap.MsgStableSwapAdjustScalingFactorsResponse":{"type":"object"},"gamm.poolmodels.stableswap.PoolParams":{"description":"PoolParams defined the parameters that will be managed by the pool\ngovernance in the future. This params are not managed by the chain\ngovernance. Instead they will be managed by the token holders of the pool.\nThe pool's token holders are specified in future_pool_governor.","type":"object","properties":{"exit_fee":{"type":"string","title":"N.B.: exit fee is disabled during pool creation in x/poolmanager. While old\npools can maintain a non-zero fee. No new pool can be created with non-zero\nfee anymore"},"swap_fee":{"type":"string"}}},"gamm.v1beta1.IBCTransferInfo":{"type":"object","title":"===================== IBC Transfer Info","properties":{"memo":{"type":"string"},"receiver":{"type":"string"},"source_channel":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"gamm.v1beta1.MsgExitPool":{"type":"object","title":"===================== MsgExitPool","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_in_amount":{"type":"string"},"token_out_mins":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.MsgExitPoolResponse":{"type":"object","properties":{"token_out":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.MsgExitSwapExternAmountOut":{"type":"object","title":"===================== MsgExitSwapExternAmountOut","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_in_max_amount":{"type":"string"},"token_out":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"gamm.v1beta1.MsgExitSwapExternAmountOutResponse":{"type":"object","properties":{"share_in_amount":{"type":"string"}}},"gamm.v1beta1.MsgExitSwapShareAmountIn":{"type":"object","title":"===================== MsgExitSwapShareAmountIn","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_in_amount":{"type":"string"},"token_out_denom":{"type":"string"},"token_out_min_amount":{"type":"string"}}},"gamm.v1beta1.MsgExitSwapShareAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"gamm.v1beta1.MsgJoinPool":{"type":"object","title":"===================== MsgJoinPool\nThis is really MsgJoinPoolNoSwap","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_out_amount":{"type":"string"},"token_in_maxs":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.MsgJoinPoolResponse":{"type":"object","properties":{"share_out_amount":{"type":"string"},"token_in":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.MsgJoinSwapExternAmountIn":{"type":"object","title":"===================== MsgJoinSwapExternAmountIn\nTODO: Rename to MsgJoinSwapExactAmountIn","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_out_min_amount":{"type":"string","title":"repeated cosmos.base.v1beta1.Coin tokensIn = 5 [\n (gogoproto.moretags) = \"yaml:\\\"tokens_in\\\"\",\n (gogoproto.nullable) = false\n ];"},"token_in":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"gamm.v1beta1.MsgJoinSwapExternAmountInResponse":{"type":"object","properties":{"share_out_amount":{"type":"string"}}},"gamm.v1beta1.MsgJoinSwapShareAmountOut":{"type":"object","title":"===================== MsgJoinSwapShareAmountOut","properties":{"pool_id":{"type":"string","format":"uint64"},"sender":{"type":"string"},"share_out_amount":{"type":"string"},"token_in_denom":{"type":"string"},"token_in_max_amount":{"type":"string"}}},"gamm.v1beta1.MsgJoinSwapShareAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountIn":{"type":"object","title":"===================== MsgSwapExactAmountIn","properties":{"affiliates":{"type":"array","title":"affiliates are optional fee recipients that receive fees calculated from token_out_min_amount","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.Affiliate"}},"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInRoute"}},"sender":{"type":"string"},"token_in":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"token_out_min_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountInWithIBCTransfer":{"type":"object","title":"===================== MsgSwapExactAmountInWithIBCTransfer","properties":{"affiliates":{"type":"array","title":"affiliates are optional fee recipients that receive fees calculated from token_out_min_amount","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.Affiliate"}},"ibc_transfer_info":{"$ref":"#/definitions/gamm.v1beta1.IBCTransferInfo"},"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInRoute"}},"sender":{"type":"string"},"token_in":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"token_out_min_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountInWithIBCTransferResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"gamm.v1beta1.MsgSwapExactAmountOut":{"type":"object","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountOutRoute"}},"sender":{"type":"string"},"token_in_max_amount":{"type":"string"},"token_out":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"gamm.v1beta1.MsgSwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"gamm.v1beta1.Params":{"type":"object","title":"Params holds parameters for the incentives module"},"gamm.v1beta1.ParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/gamm.v1beta1.Params"}}},"gamm.v1beta1.QueryCalcExitPoolCoinsFromSharesResponse":{"type":"object","properties":{"tokens_out":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesRequest":{"type":"object","title":"=============================== CalcJoinPoolNoSwapShares","properties":{"pool_id":{"type":"string","format":"uint64"},"tokens_in":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryCalcJoinPoolNoSwapSharesResponse":{"type":"object","properties":{"shares_out":{"type":"string"},"tokens_out":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryCalcJoinPoolSharesResponse":{"type":"object","properties":{"share_out_amount":{"type":"string"},"tokens_out":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryNumPoolsResponse":{"type":"object","properties":{"num_pools":{"type":"string","format":"uint64"}}},"gamm.v1beta1.QueryPoolParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/google.protobuf.Any"}}},"gamm.v1beta1.QueryPoolResponse":{"type":"object","title":"Deprecated: please use the alternative in x/poolmanager","properties":{"pool":{"$ref":"#/definitions/google.protobuf.Any"}}},"gamm.v1beta1.QueryPoolTypeResponse":{"type":"object","properties":{"pool_type":{"type":"string"}}},"gamm.v1beta1.QueryPoolsResponse":{"type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"gamm.v1beta1.QueryPoolsWithFilterResponse":{"type":"object","properties":{"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"},"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"gamm.v1beta1.QuerySpotPriceResponse":{"description":"QuerySpotPriceResponse defines the gRPC response structure for a SpotPrice\nquery.","type":"object","properties":{"spot_price":{"type":"string","title":"String of the Dec. Ex) 10.203uatom"}}},"gamm.v1beta1.QuerySwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"gamm.v1beta1.QuerySwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"gamm.v1beta1.QueryTotalLiquidityResponse":{"type":"object","properties":{"liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryTotalPoolLiquidityResponse":{"type":"object","title":"Deprecated: please use the alternative in x/poolmanager","properties":{"liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"gamm.v1beta1.QueryTotalSharesResponse":{"type":"object","properties":{"total_shares":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"gamm.v2.QuerySpotPriceResponse":{"type":"object","title":"Deprecated: please use alternate in x/poolmanager","properties":{"spot_price":{"type":"string","title":"String of the Dec. Ex) 10.203uatom"}}},"google.protobuf.Any":{"type":"object","properties":{"@type":{"type":"string"}},"additionalProperties":{}},"google.rpc.Status":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"details":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}},"message":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccount":{"type":"object","title":"MsgRegisterInterchainAccount defines the payload for Msg/RegisterAccount","properties":{"connection_id":{"type":"string"},"ordering":{"$ref":"#/definitions/ibc.core.channel.v1.Order"},"owner":{"type":"string"},"version":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgRegisterInterchainAccountResponse":{"type":"object","title":"MsgRegisterInterchainAccountResponse defines the response for Msg/RegisterAccount","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTx":{"type":"object","title":"MsgSendTx defines the payload for Msg/SendTx","properties":{"connection_id":{"type":"string"},"owner":{"type":"string"},"packet_data":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.InterchainAccountPacketData"},"relative_timeout":{"description":"Relative timeout timestamp provided will be added to the current block time during transaction execution.\nThe timeout timestamp must be non-zero.","type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgSendTxResponse":{"type":"object","title":"MsgSendTxResponse defines the response for MsgSendTx","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/controller parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.controller.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.controller.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the controller submodule.","type":"object","properties":{"controller_enabled":{"description":"controller_enabled enables or disables the controller submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse":{"description":"QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method.","type":"object","properties":{"address":{"type":"string"}}},"ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.controller.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafe":{"type":"object","title":"MsgModuleQuerySafe defines the payload for Msg/ModuleQuerySafe","properties":{"requests":{"description":"requests defines the module safe queries to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.QueryRequest"}},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgModuleQuerySafeResponse":{"type":"object","title":"MsgModuleQuerySafeResponse defines the response for Msg/ModuleQuerySafe","properties":{"height":{"type":"string","format":"uint64","title":"height at which the responses were queried"},"responses":{"type":"array","title":"protobuf encoded responses for each query","items":{"type":"string","format":"byte"}}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParams":{"type":"object","title":"MsgUpdateParams defines the payload for Msg/UpdateParams","properties":{"params":{"description":"params defines the 27-interchain-accounts/host parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.interchain_accounts.host.v1.MsgUpdateParamsResponse":{"type":"object","title":"MsgUpdateParamsResponse defines the response for Msg/UpdateParams"},"ibc.applications.interchain_accounts.host.v1.Params":{"description":"Params defines the set of on-chain interchain accounts parameters.\nThe following parameters may be used to disable the host submodule.","type":"object","properties":{"allow_messages":{"description":"allow_messages defines a list of sdk message typeURLs allowed to be executed on a host chain.","type":"array","items":{"type":"string"}},"host_enabled":{"description":"host_enabled enables or disables the host submodule.","type":"boolean"}}},"ibc.applications.interchain_accounts.host.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.interchain_accounts.host.v1.Params"}}},"ibc.applications.interchain_accounts.host.v1.QueryRequest":{"description":"QueryRequest defines the parameters for a particular query request\nby an interchain account.","type":"object","properties":{"data":{"type":"string","format":"byte","title":"data defines the payload of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"},"path":{"type":"string","title":"path defines the path of the query request as defined by ADR-021.\nhttps://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-021-protobuf-query-encoding.md#custom-query-registration-and-routing"}}},"ibc.applications.interchain_accounts.v1.InterchainAccountPacketData":{"description":"InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field.","type":"object","properties":{"data":{"type":"string","format":"byte"},"memo":{"type":"string"},"type":{"$ref":"#/definitions/ibc.applications.interchain_accounts.v1.Type"}}},"ibc.applications.interchain_accounts.v1.Type":{"description":"- TYPE_UNSPECIFIED: Default zero value enumeration\n - TYPE_EXECUTE_TX: Execute a transaction on an interchain accounts host chain","type":"string","title":"Type defines a classification of message issued from a controller chain to its associated interchain accounts\nhost","default":"TYPE_UNSPECIFIED","enum":["TYPE_UNSPECIFIED","TYPE_EXECUTE_TX"]},"ibc.applications.transfer.v1.Denom":{"description":"Denom holds the base denom of a Token and a trace of the chains it was sent through.","type":"object","properties":{"base":{"type":"string","title":"the base token denomination"},"trace":{"type":"array","title":"the trace of the token","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Hop"}}}},"ibc.applications.transfer.v1.Hop":{"type":"object","title":"Hop defines a port ID, channel ID pair specifying a unique \"hop\" in a trace","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"}}},"ibc.applications.transfer.v1.MsgTransfer":{"type":"object","title":"MsgTransfer defines a msg to transfer fungible tokens (i.e Coins) between\nICS20 enabled chains. See ICS Spec here:\nhttps://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures","properties":{"encoding":{"type":"string","title":"optional encoding"},"memo":{"type":"string","title":"optional memo"},"receiver":{"type":"string","title":"the recipient address on the destination chain"},"sender":{"type":"string","title":"the sender address"},"source_channel":{"type":"string","title":"the channel by which the packet will be sent"},"source_port":{"type":"string","title":"the port on which the packet will be sent"},"timeout_height":{"description":"Timeout height relative to the current block height.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set, and timeout_height must be omitted.","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"description":"Timeout timestamp in absolute nanoseconds since unix epoch.\nIf you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set.\nIf you are sending with IBC v2 protocol, timeout_timestamp must be set.","type":"string","format":"uint64"},"token":{"title":"token to be transferred","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.applications.transfer.v1.MsgTransferResponse":{"description":"MsgTransferResponse defines the Msg/Transfer response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64","title":"sequence number of the transfer packet sent"}}},"ibc.applications.transfer.v1.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"params":{"description":"params defines the transfer parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.applications.transfer.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibc.applications.transfer.v1.Params":{"description":"Params defines the set of IBC transfer parameters.\nNOTE: To prevent a single token from being transferred, set the\nTransfersEnabled parameter to true and then set the bank module's SendEnabled\nparameter for the denomination to false.","type":"object","properties":{"receive_enabled":{"description":"receive_enabled enables or disables all cross-chain token transfers to this\nchain.","type":"boolean"},"send_enabled":{"description":"send_enabled enables or disables all cross-chain token transfers from this\nchain.","type":"boolean"}}},"ibc.applications.transfer.v1.QueryDenomHashResponse":{"description":"QueryDenomHashResponse is the response type for the Query/DenomHash RPC\nmethod.","type":"object","properties":{"hash":{"description":"hash (in hex format) of the denomination trace information.","type":"string"}}},"ibc.applications.transfer.v1.QueryDenomResponse":{"description":"QueryDenomResponse is the response type for the Query/Denom RPC\nmethod.","type":"object","properties":{"denom":{"description":"denom returns the requested denomination.","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}}},"ibc.applications.transfer.v1.QueryDenomsResponse":{"description":"QueryDenomsResponse is the response type for the Query/Denoms RPC\nmethod.","type":"object","properties":{"denoms":{"description":"denoms returns all denominations.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.applications.transfer.v1.Denom"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.applications.transfer.v1.QueryEscrowAddressResponse":{"description":"QueryEscrowAddressResponse is the response type of the EscrowAddress RPC method.","type":"object","properties":{"escrow_address":{"type":"string","title":"the escrow account address"}}},"ibc.applications.transfer.v1.QueryParamsResponse":{"description":"QueryParamsResponse is the response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.applications.transfer.v1.Params"}}},"ibc.applications.transfer.v1.QueryTotalEscrowForDenomResponse":{"description":"QueryTotalEscrowForDenomResponse is the response type for TotalEscrowForDenom RPC method.","type":"object","properties":{"amount":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"ibc.core.channel.v1.Channel":{"description":"Channel defines pipeline for exactly-once packet delivery between specific\nmodules on separate blockchains, which has at least one end capable of\nsending packets and one end capable of receiving packets.","type":"object","properties":{"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.Counterparty":{"type":"object","title":"Counterparty defines a channel end counterparty","properties":{"channel_id":{"type":"string","title":"channel end on the counterparty chain"},"port_id":{"description":"port on the counterparty chain which owns the other end of the channel.","type":"string"}}},"ibc.core.channel.v1.IdentifiedChannel":{"description":"IdentifiedChannel defines a channel with additional port and channel\nidentifier fields.","type":"object","properties":{"channel_id":{"type":"string","title":"channel identifier"},"connection_hops":{"type":"array","title":"list of connection identifiers, in order, along which packets sent on\nthis channel will travel","items":{"type":"string"}},"counterparty":{"title":"counterparty channel end","$ref":"#/definitions/ibc.core.channel.v1.Counterparty"},"ordering":{"title":"whether the channel is ordered or unordered","$ref":"#/definitions/ibc.core.channel.v1.Order"},"port_id":{"type":"string","title":"port identifier"},"state":{"title":"current state of the channel end","$ref":"#/definitions/ibc.core.channel.v1.State"},"version":{"type":"string","title":"opaque channel version, which is agreed upon during the handshake"}}},"ibc.core.channel.v1.MsgAcknowledgement":{"type":"object","title":"MsgAcknowledgement receives incoming IBC acknowledgement","properties":{"acknowledgement":{"type":"string","format":"byte"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgChannelCloseConfirm":{"description":"MsgChannelCloseConfirm defines a msg sent by a Relayer to Chain B\nto acknowledge the change of channel state to CLOSED on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseConfirmResponse":{"description":"MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelCloseInit":{"description":"MsgChannelCloseInit defines a msg sent by a Relayer to Chain A\nto close a channel with Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelCloseInitResponse":{"description":"MsgChannelCloseInitResponse defines the Msg/ChannelCloseInit response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenAck":{"description":"MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge\nthe change of channel state to TRYOPEN on Chain B.","type":"object","properties":{"channel_id":{"type":"string"},"counterparty_channel_id":{"type":"string"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenAckResponse":{"description":"MsgChannelOpenAckResponse defines the Msg/ChannelOpenAck response type.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenConfirm":{"description":"MsgChannelOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of channel state to OPEN on Chain A.","type":"object","properties":{"channel_id":{"type":"string"},"port_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenConfirmResponse":{"description":"MsgChannelOpenConfirmResponse defines the Msg/ChannelOpenConfirm response\ntype.","type":"object"},"ibc.core.channel.v1.MsgChannelOpenInit":{"description":"MsgChannelOpenInit defines an sdk.Msg to initialize a channel handshake. It\nis called by a relayer on Chain A.","type":"object","properties":{"channel":{"$ref":"#/definitions/ibc.core.channel.v1.Channel"},"port_id":{"type":"string"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenInitResponse":{"description":"MsgChannelOpenInitResponse defines the Msg/ChannelOpenInit response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTry":{"description":"MsgChannelOpenInit defines a msg sent by a Relayer to try to open a channel\non Chain B. The version field within the Channel field has been deprecated. Its\nvalue will be ignored by core IBC.","type":"object","properties":{"channel":{"description":"NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC.","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"counterparty_version":{"type":"string"},"port_id":{"type":"string"},"previous_channel_id":{"description":"Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC.","type":"string"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgChannelOpenTryResponse":{"description":"MsgChannelOpenTryResponse defines the Msg/ChannelOpenTry response type.","type":"object","properties":{"channel_id":{"type":"string"},"version":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacket":{"type":"object","title":"MsgRecvPacket receives incoming IBC packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnClose":{"description":"MsgTimeoutOnClose timed-out packet upon counterparty channel closure.","type":"object","properties":{"next_sequence_recv":{"type":"string","format":"uint64"},"packet":{"$ref":"#/definitions/ibc.core.channel.v1.Packet"},"proof_close":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v1.MsgTimeoutOnCloseResponse":{"description":"MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v1.ResponseResultType"}}},"ibc.core.channel.v1.Order":{"description":"- ORDER_NONE_UNSPECIFIED: zero-value for channel ordering\n - ORDER_UNORDERED: packets can be delivered in any order, which may differ from the order in\nwhich they were sent.\n - ORDER_ORDERED: packets are delivered exactly in the order which they were sent","type":"string","title":"Order defines if a channel is ORDERED or UNORDERED","default":"ORDER_NONE_UNSPECIFIED","enum":["ORDER_NONE_UNSPECIFIED","ORDER_UNORDERED","ORDER_ORDERED"]},"ibc.core.channel.v1.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"data":{"type":"string","format":"byte","title":"actual opaque bytes transferred directly to the application module"},"destination_channel":{"description":"identifies the channel end on the receiving chain.","type":"string"},"destination_port":{"description":"identifies the port on the receiving chain.","type":"string"},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_channel":{"description":"identifies the channel end on the sending chain.","type":"string"},"source_port":{"description":"identifies the port on the sending chain.","type":"string"},"timeout_height":{"title":"block height after which the packet times out","$ref":"#/definitions/ibc.core.client.v1.Height"},"timeout_timestamp":{"type":"string","format":"uint64","title":"block timestamp (in nanoseconds) after which the packet times out"}}},"ibc.core.channel.v1.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"channel_id":{"description":"channel unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"port_id":{"description":"channel port identifier.","type":"string"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v1.QueryChannelClientStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelConsensusStateResponse":{"type":"object","title":"QueryChannelClientStateResponse is the Response type for the\nQuery/QueryChannelClientState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelResponse":{"description":"QueryChannelResponse is the response type for the Query/Channel RPC method.\nBesides the Channel end, it includes a proof and the height from which the\nproof was retrieved.","type":"object","properties":{"channel":{"title":"channel associated with the request identifiers","$ref":"#/definitions/ibc.core.channel.v1.Channel"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryChannelsResponse":{"description":"QueryChannelsResponse is the response type for the Query/Channels RPC method.","type":"object","properties":{"channels":{"description":"list of stored channels of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryConnectionChannelsResponse":{"type":"object","title":"QueryConnectionChannelsResponse is the Response type for the\nQuery/QueryConnectionChannels RPC method","properties":{"channels":{"description":"list of channels associated with a connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.IdentifiedChannel"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryNextSequenceReceiveResponse":{"type":"object","title":"QuerySequenceResponse is the response type for the\nQuery/QueryNextSequenceReceiveResponse RPC method","properties":{"next_sequence_receive":{"type":"string","format":"uint64","title":"next sequence receive number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the request type for the\nQuery/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementResponse":{"type":"object","title":"QueryPacketAcknowledgementResponse defines the client query response for a\npacket which also includes a proof and the height from which the\nproof was retrieved","properties":{"acknowledgement":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketCommitmentResponse":{"type":"object","title":"QueryPacketCommitmentResponse defines the client query response for a packet\nwhich also includes a proof and the height from which the proof was\nretrieved","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v1.QueryPacketCommitmentsResponse":{"type":"object","title":"QueryPacketCommitmentsResponse is the request type for the\nQuery/QueryPacketCommitments RPC method","properties":{"commitments":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v1.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v1.QueryPacketReceiptResponse":{"type":"object","title":"QueryPacketReceiptResponse defines the client query response for a packet\nreceipt which also includes a proof, and the height from which the proof was\nretrieved","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v1.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the\nQuery/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v1.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.channel.v1.State":{"description":"State defines if a channel is in one of the following states:\nCLOSED, INIT, TRYOPEN, OPEN, or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A channel has just started the opening handshake.\n - STATE_TRYOPEN: A channel has acknowledged the handshake step on the counterparty chain.\n - STATE_OPEN: A channel has completed the handshake. Open channels are\nready to send and receive packets.\n - STATE_CLOSED: A channel has been closed and can no longer be used to send or receive\npackets.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN","STATE_CLOSED"]},"ibc.core.channel.v2.Acknowledgement":{"description":"Acknowledgement contains a list of all ack results associated with a single packet.\nIn the case of a successful receive, the acknowledgement will contain an app acknowledgement\nfor each application that received a payload in the same order that the payloads were sent\nin the packet.\nIf the receive is not successful, the acknowledgement will contain a single app acknowledgment\nwhich will be a constant error acknowledgment as defined by the IBC v2 protocol.","type":"object","properties":{"app_acknowledgements":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.channel.v2.MsgAcknowledgement":{"description":"MsgAcknowledgement receives incoming IBC acknowledgement.","type":"object","properties":{"acknowledgement":{"$ref":"#/definitions/ibc.core.channel.v2.Acknowledgement"},"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_acked":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgAcknowledgementResponse":{"description":"MsgAcknowledgementResponse defines the Msg/Acknowledgement response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgRecvPacket":{"description":"MsgRecvPacket receives an incoming IBC packet.","type":"object","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_commitment":{"type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgRecvPacketResponse":{"description":"MsgRecvPacketResponse defines the Msg/RecvPacket response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.MsgSendPacket":{"description":"MsgSendPacket sends an outgoing IBC packet.","type":"object","properties":{"payloads":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"signer":{"type":"string"},"source_client":{"type":"string"},"timeout_timestamp":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgSendPacketResponse":{"description":"MsgSendPacketResponse defines the Msg/SendPacket response type.","type":"object","properties":{"sequence":{"type":"string","format":"uint64"}}},"ibc.core.channel.v2.MsgTimeout":{"type":"object","title":"MsgTimeout receives timed-out packet","properties":{"packet":{"$ref":"#/definitions/ibc.core.channel.v2.Packet"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_unreceived":{"type":"string","format":"byte"},"signer":{"type":"string"}}},"ibc.core.channel.v2.MsgTimeoutResponse":{"description":"MsgTimeoutResponse defines the Msg/Timeout response type.","type":"object","properties":{"result":{"$ref":"#/definitions/ibc.core.channel.v2.ResponseResultType"}}},"ibc.core.channel.v2.Packet":{"type":"object","title":"Packet defines a type that carries data across different chains through IBC","properties":{"destination_client":{"description":"identifies the receiving client on the receiving chain.","type":"string"},"payloads":{"description":"a list of payloads, each one for a specific application.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.Payload"}},"sequence":{"description":"number corresponds to the order of sends and receives, where a Packet\nwith an earlier sequence number must be sent and received before a Packet\nwith a later sequence number.","type":"string","format":"uint64"},"source_client":{"description":"identifies the sending client on the sending chain.","type":"string"},"timeout_timestamp":{"description":"timeout timestamp in seconds after which the packet times out.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.PacketState":{"description":"PacketState defines the generic type necessary to retrieve and store\npacket commitments, acknowledgements, and receipts.\nCaller is responsible for knowing the context necessary to interpret this\nstate as a commitment, acknowledgement, or a receipt.","type":"object","properties":{"client_id":{"description":"client unique identifier.","type":"string"},"data":{"description":"embedded data that represents packet state.","type":"string","format":"byte"},"sequence":{"description":"packet sequence.","type":"string","format":"uint64"}}},"ibc.core.channel.v2.Payload":{"type":"object","title":"Payload contains the source and destination ports and payload for the application (version, encoding, raw bytes)","properties":{"destination_port":{"description":"specifies the destination port of the packet.","type":"string"},"encoding":{"description":"the encoding used for the provided value.","type":"string"},"source_port":{"description":"specifies the source port of the packet.","type":"string"},"value":{"description":"the raw bytes for the payload.","type":"string","format":"byte"},"version":{"description":"version of the specified application.","type":"string"}}},"ibc.core.channel.v2.QueryNextSequenceSendResponse":{"type":"object","title":"QueryNextSequenceSendResponse is the response type for the Query/QueryNextSequenceSend RPC method","properties":{"next_sequence_send":{"type":"string","format":"uint64","title":"next sequence send number"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementResponse":{"description":"QueryPacketAcknowledgementResponse is the response type for the Query/PacketAcknowledgement RPC method.","type":"object","properties":{"acknowledgement":{"type":"string","format":"byte","title":"acknowledgement associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketAcknowledgementsResponse":{"type":"object","title":"QueryPacketAcknowledgemetsResponse is the request type for the\nQuery/QueryPacketAcknowledgements RPC method","properties":{"acknowledgements":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketCommitmentResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitment":{"type":"string","format":"byte","title":"packet associated with the request fields"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.channel.v2.QueryPacketCommitmentsResponse":{"description":"QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method.","type":"object","properties":{"commitments":{"description":"collection of packet commitments for the requested channel identifier.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.channel.v2.PacketState"}},"height":{"description":"query block height.","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"description":"pagination response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.channel.v2.QueryPacketReceiptResponse":{"description":"QueryPacketReceiptResponse is the response type for the Query/PacketReceipt RPC method.","type":"object","properties":{"proof":{"type":"string","format":"byte","title":"merkle proof of existence or absence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"},"received":{"type":"boolean","title":"success flag for if receipt exists"}}},"ibc.core.channel.v2.QueryUnreceivedAcksResponse":{"type":"object","title":"QueryUnreceivedAcksResponse is the response type for the\nQuery/UnreceivedAcks RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived acknowledgement sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.QueryUnreceivedPacketsResponse":{"type":"object","title":"QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method","properties":{"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"sequences":{"type":"array","title":"list of unreceived packet sequences","items":{"type":"string","format":"uint64"}}}},"ibc.core.channel.v2.ResponseResultType":{"description":"- RESPONSE_RESULT_TYPE_UNSPECIFIED: Default zero value enumeration\n - RESPONSE_RESULT_TYPE_NOOP: The message did not call the IBC application callbacks (because, for example, the packet had already been relayed)\n - RESPONSE_RESULT_TYPE_SUCCESS: The message was executed successfully\n - RESPONSE_RESULT_TYPE_FAILURE: The message was executed unsuccessfully","type":"string","title":"ResponseResultType defines the possible outcomes of the execution of a message","default":"RESPONSE_RESULT_TYPE_UNSPECIFIED","enum":["RESPONSE_RESULT_TYPE_UNSPECIFIED","RESPONSE_RESULT_TYPE_NOOP","RESPONSE_RESULT_TYPE_SUCCESS","RESPONSE_RESULT_TYPE_FAILURE"]},"ibc.core.client.v1.ConsensusStateWithHeight":{"description":"ConsensusStateWithHeight defines a consensus state with an additional height\nfield.","type":"object","properties":{"consensus_state":{"title":"consensus state","$ref":"#/definitions/google.protobuf.Any"},"height":{"title":"consensus state height","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.Height":{"description":"Normally the RevisionHeight is incremented at each height while keeping\nRevisionNumber the same. However some consensus algorithms may choose to\nreset the height in certain conditions e.g. hard forks, state-machine\nbreaking changes In these cases, the RevisionNumber is incremented so that\nheight continues to be monitonically increasing even as the RevisionHeight\ngets reset\n\nPlease note that json tags for generated Go code are overridden to explicitly exclude the omitempty jsontag.\nThis enforces the Go json marshaller to always emit zero values for both revision_number and revision_height.","type":"object","title":"Height is a monotonically increasing data type\nthat can be compared against another Height for the purposes of updating and\nfreezing clients","properties":{"revision_height":{"type":"string","format":"uint64","title":"the height within the given revision"},"revision_number":{"type":"string","format":"uint64","title":"the revision that the client is currently on"}}},"ibc.core.client.v1.IdentifiedClientState":{"description":"IdentifiedClientState defines a client state with an additional client\nidentifier field.","type":"object","properties":{"client_id":{"type":"string","title":"client identifier"},"client_state":{"title":"client state","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgCreateClient":{"type":"object","title":"MsgCreateClient defines a message to create an IBC client","properties":{"client_state":{"title":"light client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"description":"consensus state associated with the client that corresponds to a given\nheight.","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgCreateClientResponse":{"description":"MsgCreateClientResponse defines the Msg/CreateClient response type.","type":"object","properties":{"client_id":{"type":"string"}}},"ibc.core.client.v1.MsgDeleteClientCreator":{"type":"object","title":"MsgDeleteClientCreator defines a message to delete the client creator of a client","properties":{"client_id":{"type":"string","title":"client identifier"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgDeleteClientCreatorResponse":{"description":"MsgDeleteClientCreatorResponse defines the Msg/DeleteClientCreator response type.","type":"object"},"ibc.core.client.v1.MsgIBCSoftwareUpgrade":{"type":"object","title":"MsgIBCSoftwareUpgrade defines the message used to schedule an upgrade of an IBC client using a v1 governance proposal","properties":{"plan":{"$ref":"#/definitions/cosmos.upgrade.v1beta1.Plan"},"signer":{"type":"string","title":"signer address"},"upgraded_client_state":{"description":"An UpgradedClientState must be provided to perform an IBC breaking upgrade.\nThis will make the chain commit to the correct upgraded (self) client state\nbefore the upgrade occurs, so that connecting chains can verify that the\nnew upgraded client is valid by verifying a proof on the previous version\nof the chain. This will allow IBC connections to persist smoothly across\nplanned chain upgrades. Correspondingly, the UpgradedClientState field has been\ndeprecated in the Cosmos SDK to allow for this logic to exist solely in\nthe 02-client module.","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.MsgIBCSoftwareUpgradeResponse":{"description":"MsgIBCSoftwareUpgradeResponse defines the Msg/IBCSoftwareUpgrade response type.","type":"object"},"ibc.core.client.v1.MsgRecoverClient":{"description":"MsgRecoverClient defines the message used to recover a frozen or expired client.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"subject_client_id":{"type":"string","title":"the client identifier for the client to be updated if the proposal passes"},"substitute_client_id":{"type":"string","title":"the substitute client identifier for the client which will replace the subject\nclient"}}},"ibc.core.client.v1.MsgRecoverClientResponse":{"description":"MsgRecoverClientResponse defines the Msg/RecoverClient response type.","type":"object"},"ibc.core.client.v1.MsgSubmitMisbehaviour":{"description":"MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for\nlight client misbehaviour.\nThis message has been deprecated. Use MsgUpdateClient instead.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"misbehaviour":{"title":"misbehaviour used for freezing the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgSubmitMisbehaviourResponse":{"description":"MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response\ntype.","type":"object"},"ibc.core.client.v1.MsgUpdateClient":{"description":"MsgUpdateClient defines an sdk.Msg to update a IBC client state using\nthe given client message.","type":"object","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_message":{"title":"client message to update the light client","$ref":"#/definitions/google.protobuf.Any"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateClientResponse":{"description":"MsgUpdateClientResponse defines the Msg/UpdateClient response type.","type":"object"},"ibc.core.client.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the client parameters.","type":"object","properties":{"params":{"description":"params defines the client parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.client.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.client.v1.MsgUpgradeClient":{"type":"object","title":"MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client\nstate","properties":{"client_id":{"type":"string","title":"client unique identifier"},"client_state":{"title":"upgraded client state","$ref":"#/definitions/google.protobuf.Any"},"consensus_state":{"title":"upgraded consensus state, only contains enough information to serve as a\nbasis of trust in update logic","$ref":"#/definitions/google.protobuf.Any"},"proof_upgrade_client":{"type":"string","format":"byte","title":"proof that old chain committed to new client"},"proof_upgrade_consensus_state":{"type":"string","format":"byte","title":"proof that old chain committed to new consensus state"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v1.MsgUpgradeClientResponse":{"description":"MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.","type":"object"},"ibc.core.client.v1.Params":{"description":"Params defines the set of IBC light client parameters.","type":"object","properties":{"allowed_clients":{"description":"allowed_clients defines the list of allowed client state types which can be created\nand interacted with. If a client type is removed from the allowed clients list, usage\nof this client will be disabled until it is added again to the list.","type":"array","items":{"type":"string"}}}},"ibc.core.client.v1.QueryClientCreatorResponse":{"description":"QueryClientCreatorResponse is the response type for the Query/ClientCreator RPC\nmethod.","type":"object","properties":{"creator":{"type":"string","title":"creator of the client"}}},"ibc.core.client.v1.QueryClientParamsResponse":{"description":"QueryClientParamsResponse is the response type for the Query/ClientParams RPC\nmethod.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.client.v1.Params"}}},"ibc.core.client.v1.QueryClientStateResponse":{"description":"QueryClientStateResponse is the response type for the Query/ClientState RPC\nmethod. Besides the client state, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryClientStatesResponse":{"description":"QueryClientStatesResponse is the response type for the Query/ClientStates RPC\nmethod.","type":"object","properties":{"client_states":{"description":"list of stored ClientStates of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryClientStatusResponse":{"description":"QueryClientStatusResponse is the response type for the Query/ClientStatus RPC\nmethod. It returns the current status of the IBC client.","type":"object","properties":{"status":{"type":"string"}}},"ibc.core.client.v1.QueryConsensusStateHeightsResponse":{"type":"object","title":"QueryConsensusStateHeightsResponse is the response type for the\nQuery/ConsensusStateHeights RPC method","properties":{"consensus_state_heights":{"type":"array","title":"consensus state heights","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.Height"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryConsensusStateResponse":{"type":"object","title":"QueryConsensusStateResponse is the response type for the Query/ConsensusState\nRPC method","properties":{"consensus_state":{"title":"consensus state associated with the client identifier at the given height","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.client.v1.QueryConsensusStatesResponse":{"type":"object","title":"QueryConsensusStatesResponse is the response type for the\nQuery/ConsensusStates RPC method","properties":{"consensus_states":{"type":"array","title":"consensus states associated with the identifier","items":{"type":"object","$ref":"#/definitions/ibc.core.client.v1.ConsensusStateWithHeight"}},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.client.v1.QueryUpgradedClientStateResponse":{"description":"QueryUpgradedClientStateResponse is the response type for the\nQuery/UpgradedClientState RPC method.","type":"object","properties":{"upgraded_client_state":{"title":"client state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryUpgradedConsensusStateResponse":{"description":"QueryUpgradedConsensusStateResponse is the response type for the\nQuery/UpgradedConsensusState RPC method.","type":"object","properties":{"upgraded_consensus_state":{"title":"Consensus state associated with the request identifier","$ref":"#/definitions/google.protobuf.Any"}}},"ibc.core.client.v1.QueryVerifyMembershipRequest":{"type":"object","title":"QueryVerifyMembershipRequest is the request type for the Query/VerifyMembership RPC method","properties":{"block_delay":{"type":"string","format":"uint64","title":"optional block delay"},"client_id":{"description":"client unique identifier.","type":"string"},"merkle_path":{"description":"the commitment key path.","$ref":"#/definitions/ibc.core.commitment.v2.MerklePath"},"proof":{"description":"the proof to be verified by the client.","type":"string","format":"byte"},"proof_height":{"description":"the height of the commitment root at which the proof is verified.","$ref":"#/definitions/ibc.core.client.v1.Height"},"time_delay":{"type":"string","format":"uint64","title":"optional time delay"},"value":{"description":"the value which is proven.","type":"string","format":"byte"}}},"ibc.core.client.v1.QueryVerifyMembershipResponse":{"type":"object","title":"QueryVerifyMembershipResponse is the response type for the Query/VerifyMembership RPC method","properties":{"success":{"description":"boolean indicating success or failure of proof verification.","type":"boolean"}}},"ibc.core.client.v2.Config":{"type":"object","title":"Config is a **per-client** configuration struct that sets which relayers are allowed to relay v2 IBC messages\nfor a given client.\nIf it is set, then only relayers in the allow list can send v2 messages\nIf it is not set, then the client allows permissionless relaying of v2 messages","properties":{"allowed_relayers":{"type":"array","title":"allowed_relayers defines the set of allowed relayers for IBC V2 protocol for the given client","items":{"type":"string"}}}},"ibc.core.client.v2.CounterpartyInfo":{"type":"object","title":"CounterpartyInfo defines the key that the counterparty will use to message our client","properties":{"client_id":{"type":"string","title":"client identifier is the identifier used to send packet messages to our client"},"merkle_prefix":{"type":"array","title":"merkle prefix key is the prefix that ics provable keys are stored under","items":{"type":"string","format":"byte"}}}},"ibc.core.client.v2.MsgRegisterCounterparty":{"type":"object","title":"MsgRegisterCounterparty defines a message to register a counterparty on a client","properties":{"client_id":{"type":"string","title":"client identifier"},"counterparty_client_id":{"type":"string","title":"counterparty client identifier"},"counterparty_merkle_prefix":{"type":"array","title":"counterparty merkle prefix","items":{"type":"string","format":"byte"}},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgRegisterCounterpartyResponse":{"description":"MsgRegisterCounterpartyResponse defines the Msg/RegisterCounterparty response type.","type":"object"},"ibc.core.client.v2.MsgUpdateClientConfig":{"type":"object","title":"MsgUpdateClientConfig defines the sdk.Msg type to update the configuration for a given client","properties":{"client_id":{"type":"string","title":"client identifier"},"config":{"description":"NOTE: All fields in the config must be supplied.","title":"allowed relayers","$ref":"#/definitions/ibc.core.client.v2.Config"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.client.v2.MsgUpdateClientConfigResponse":{"description":"MsgUpdateClientConfigResponse defines the MsgUpdateClientConfig response type.","type":"object"},"ibc.core.client.v2.QueryConfigResponse":{"type":"object","title":"QueryConfigResponse is the response type for the Query/Config RPC method","properties":{"config":{"$ref":"#/definitions/ibc.core.client.v2.Config"}}},"ibc.core.client.v2.QueryCounterpartyInfoResponse":{"description":"QueryCounterpartyInfoResponse is the response type for the\nQuery/CounterpartyInfo RPC method.","type":"object","properties":{"counterparty_info":{"$ref":"#/definitions/ibc.core.client.v2.CounterpartyInfo"}}},"ibc.core.commitment.v1.MerklePrefix":{"type":"object","title":"MerklePrefix is merkle path prefixed to the key.\nThe constructed key from the Path and the key will be append(Path.KeyPath,\nappend(Path.KeyPrefix, key...))","properties":{"key_prefix":{"type":"string","format":"byte"}}},"ibc.core.commitment.v2.MerklePath":{"description":"MerklePath is the path used to verify commitment proofs, which can be an\narbitrary structured object (defined by a commitment type).\nICS-23 verification supports membership proofs for nested merkle trees.\nThe ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix.\nThe IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash\nstored in the consensus state of the client.\nEach element of the path represents the key of a merkle tree from the root to the leaf.\nThe elements of the path before the final element must be the path to the tree that contains\nthe ICS24 provable store. Thus, it should remain constant for all ICS24 proofs.\nThe final element of the path is the key of the leaf in the ICS24 provable store,\nThus IBC core will append the ICS24 path to the final element of the MerklePath\nstored in the counterparty to create the full path to the leaf for proof verification.\nExamples:\nCosmos SDK:\nThe Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes\nare hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"ibc\", \"\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"ibc\", \"{packetCommitmentPath}\"] which will then be used for final verification.\nEthereum:\nThe Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed\nby the smart contract state. Each smart contract has a specific prefix reserved within the global trie.\nThus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie.\nSince there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty\nMerklePrefix has the following structure: [\"IBCCoreContractAddressStoragePrefix\"]\nThe core IBC handler will append the ICS24 path to the final element of the MerklePath\nlike so: [\"IBCCoreContractAddressStoragePrefix{packetCommitmentPath}\"] which will then be used for final\nverification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the\nconsensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24\nprovable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified\nby the client against the root hash in the client's consensus state.","type":"object","properties":{"key_path":{"type":"array","items":{"type":"string","format":"byte"}}}},"ibc.core.connection.v1.ConnectionEnd":{"description":"ConnectionEnd defines a stateful object on a chain connected to another\nseparate one.\nNOTE: there must only be 2 defined ConnectionEnds to establish\na connection between two chains.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period that must pass before a consensus state can be used for\npacket-verification NOTE: delay period logic is only implemented by some\nclients.","type":"string","format":"uint64"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"description":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.Counterparty":{"description":"Counterparty defines the counterparty chain associated with a connection end.","type":"object","properties":{"client_id":{"description":"identifies the client on the counterparty chain associated with a given\nconnection.","type":"string"},"connection_id":{"description":"identifies the connection end on the counterparty chain associated with a\ngiven connection.","type":"string"},"prefix":{"description":"commitment merkle prefix of the counterparty chain.","$ref":"#/definitions/ibc.core.commitment.v1.MerklePrefix"}}},"ibc.core.connection.v1.IdentifiedConnection":{"description":"IdentifiedConnection defines a connection with additional connection\nidentifier field.","type":"object","properties":{"client_id":{"description":"client associated with this connection.","type":"string"},"counterparty":{"description":"counterparty chain associated with this connection.","$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"description":"delay period associated with this connection.","type":"string","format":"uint64"},"id":{"description":"connection identifier.","type":"string"},"state":{"description":"current state of the connection end.","$ref":"#/definitions/ibc.core.connection.v1.State"},"versions":{"type":"array","title":"IBC version which can be utilised to determine encodings or protocols for\nchannels or packets utilising this connection","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}}}},"ibc.core.connection.v1.MsgConnectionOpenAck":{"description":"MsgConnectionOpenAck defines a msg sent by a Relayer to Chain A to\nacknowledge the change of connection state to TRYOPEN on Chain B.","type":"object","properties":{"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"connection_id":{"type":"string"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty_connection_id":{"type":"string"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_try":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain B: `UNINITIALIZED -\u003e\nTRYOPEN`"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenAckResponse":{"description":"MsgConnectionOpenAckResponse defines the Msg/ConnectionOpenAck response type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenConfirm":{"description":"MsgConnectionOpenConfirm defines a msg sent by a Relayer to Chain B to\nacknowledge the change of connection state to OPEN on Chain A.","type":"object","properties":{"connection_id":{"type":"string"},"proof_ack":{"type":"string","format":"byte","title":"proof for the change of the connection state on Chain A: `INIT -\u003e OPEN`"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenConfirmResponse":{"description":"MsgConnectionOpenConfirmResponse defines the Msg/ConnectionOpenConfirm\nresponse type.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenInit":{"description":"MsgConnectionOpenInit defines the msg sent by an account on Chain A to\ninitialize a connection with Chain B.","type":"object","properties":{"client_id":{"type":"string"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"delay_period":{"type":"string","format":"uint64"},"signer":{"type":"string"},"version":{"$ref":"#/definitions/ibc.core.connection.v1.Version"}}},"ibc.core.connection.v1.MsgConnectionOpenInitResponse":{"description":"MsgConnectionOpenInitResponse defines the Msg/ConnectionOpenInit response\ntype.","type":"object"},"ibc.core.connection.v1.MsgConnectionOpenTry":{"description":"MsgConnectionOpenTry defines a msg sent by a Relayer to try to open a\nconnection on Chain B.","type":"object","properties":{"client_id":{"type":"string"},"client_state":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/google.protobuf.Any"},"consensus_height":{"description":"Deprecated: this field is unused.","$ref":"#/definitions/ibc.core.client.v1.Height"},"counterparty":{"$ref":"#/definitions/ibc.core.connection.v1.Counterparty"},"counterparty_versions":{"type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.Version"}},"delay_period":{"type":"string","format":"uint64"},"host_consensus_state_proof":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"previous_connection_id":{"description":"Deprecated: this field is unused. Crossing hellos are no longer supported in core IBC.","type":"string"},"proof_client":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_consensus":{"description":"Deprecated: this field is unused.","type":"string","format":"byte"},"proof_height":{"$ref":"#/definitions/ibc.core.client.v1.Height"},"proof_init":{"type":"string","format":"byte","title":"proof of the initialization the connection on Chain A: `UNINITIALIZED -\u003e\nINIT`"},"signer":{"type":"string"}}},"ibc.core.connection.v1.MsgConnectionOpenTryResponse":{"description":"MsgConnectionOpenTryResponse defines the Msg/ConnectionOpenTry response type.","type":"object"},"ibc.core.connection.v1.MsgUpdateParams":{"description":"MsgUpdateParams defines the sdk.Msg type to update the connection parameters.","type":"object","properties":{"params":{"description":"params defines the connection parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibc.core.connection.v1.Params"},"signer":{"type":"string","title":"signer address"}}},"ibc.core.connection.v1.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the MsgUpdateParams response type.","type":"object"},"ibc.core.connection.v1.Params":{"description":"Params defines the set of Connection parameters.","type":"object","properties":{"max_expected_time_per_block":{"description":"maximum expected time per block (in nanoseconds), used to enforce block delay. This parameter should reflect the\nlargest amount of time that the chain might reasonably take to produce the next block under normal operating\nconditions. A safe choice is 3-5x the expected time per block.","type":"string","format":"uint64"}}},"ibc.core.connection.v1.QueryClientConnectionsResponse":{"type":"object","title":"QueryClientConnectionsResponse is the response type for the\nQuery/ClientConnections RPC method","properties":{"connection_paths":{"description":"slice of all the connection paths associated with a client.","type":"array","items":{"type":"string"}},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was generated","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionClientStateResponse":{"type":"object","title":"QueryConnectionClientStateResponse is the response type for the\nQuery/ConnectionClientState RPC method","properties":{"identified_client_state":{"title":"client state associated with the channel","$ref":"#/definitions/ibc.core.client.v1.IdentifiedClientState"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionConsensusStateResponse":{"type":"object","title":"QueryConnectionConsensusStateResponse is the response type for the\nQuery/ConnectionConsensusState RPC method","properties":{"client_id":{"type":"string","title":"client ID associated with the consensus state"},"consensus_state":{"title":"consensus state associated with the channel","$ref":"#/definitions/google.protobuf.Any"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionParamsResponse":{"description":"QueryConnectionParamsResponse is the response type for the Query/ConnectionParams RPC method.","type":"object","properties":{"params":{"description":"params defines the parameters of the module.","$ref":"#/definitions/ibc.core.connection.v1.Params"}}},"ibc.core.connection.v1.QueryConnectionResponse":{"description":"QueryConnectionResponse is the response type for the Query/Connection RPC\nmethod. Besides the connection end, it includes a proof and the height from\nwhich the proof was retrieved.","type":"object","properties":{"connection":{"title":"connection associated with the request identifier","$ref":"#/definitions/ibc.core.connection.v1.ConnectionEnd"},"proof":{"type":"string","format":"byte","title":"merkle proof of existence"},"proof_height":{"title":"height at which the proof was retrieved","$ref":"#/definitions/ibc.core.client.v1.Height"}}},"ibc.core.connection.v1.QueryConnectionsResponse":{"description":"QueryConnectionsResponse is the response type for the Query/Connections RPC\nmethod.","type":"object","properties":{"connections":{"description":"list of stored connections of the chain.","type":"array","items":{"type":"object","$ref":"#/definitions/ibc.core.connection.v1.IdentifiedConnection"}},"height":{"title":"query block height","$ref":"#/definitions/ibc.core.client.v1.Height"},"pagination":{"title":"pagination response","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.core.connection.v1.State":{"description":"State defines if a connection is in one of the following states:\nINIT, TRYOPEN, OPEN or UNINITIALIZED.\n\n - STATE_UNINITIALIZED_UNSPECIFIED: Default State\n - STATE_INIT: A connection end has just started the opening handshake.\n - STATE_TRYOPEN: A connection end has acknowledged the handshake step on the counterparty\nchain.\n - STATE_OPEN: A connection end has completed the handshake.","type":"string","default":"STATE_UNINITIALIZED_UNSPECIFIED","enum":["STATE_UNINITIALIZED_UNSPECIFIED","STATE_INIT","STATE_TRYOPEN","STATE_OPEN"]},"ibc.core.connection.v1.Version":{"description":"Version defines the versioning scheme used to negotiate the IBC version in\nthe connection handshake.","type":"object","properties":{"features":{"type":"array","title":"list of features compatible with the specified identifier","items":{"type":"string"}},"identifier":{"type":"string","title":"unique version identifier"}}},"ibc.lightclients.wasm.v1.MsgMigrateContract":{"description":"MsgMigrateContract defines the request type for the MigrateContract rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the new wasm byte code for the contract"},"client_id":{"type":"string","title":"the client id of the contract"},"msg":{"type":"string","format":"byte","title":"the json encoded message to be passed to the contract on migration"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgMigrateContractResponse":{"type":"object","title":"MsgMigrateContractResponse defines the response type for the MigrateContract rpc"},"ibc.lightclients.wasm.v1.MsgRemoveChecksum":{"description":"MsgRemoveChecksum defines the request type for the MsgRemoveChecksum rpc.","type":"object","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash to be removed from the store"},"signer":{"type":"string","title":"signer address"}}},"ibc.lightclients.wasm.v1.MsgRemoveChecksumResponse":{"type":"object","title":"MsgStoreChecksumResponse defines the response type for the StoreCode rpc"},"ibc.lightclients.wasm.v1.MsgStoreCode":{"description":"MsgStoreCode defines the request type for the StoreCode rpc.","type":"object","properties":{"signer":{"type":"string","title":"signer address"},"wasm_byte_code":{"type":"string","format":"byte","title":"wasm byte code of light client contract. It can be raw or gzip compressed"}}},"ibc.lightclients.wasm.v1.MsgStoreCodeResponse":{"type":"object","title":"MsgStoreCodeResponse defines the response type for the StoreCode rpc","properties":{"checksum":{"type":"string","format":"byte","title":"checksum is the sha256 hash of the stored code"}}},"ibc.lightclients.wasm.v1.QueryChecksumsResponse":{"description":"QueryChecksumsResponse is the response type for the Query/Checksums RPC method.","type":"object","properties":{"checksums":{"description":"checksums is a list of the hex encoded checksums of all wasm codes stored.","type":"array","items":{"type":"string"}},"pagination":{"description":"pagination defines the pagination in the response.","$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"ibc.lightclients.wasm.v1.QueryCodeResponse":{"description":"QueryCodeResponse is the response type for the Query/Code RPC method.","type":"object","properties":{"data":{"type":"string","format":"byte"}}},"ibcratelimit.AddressLimit":{"type":"object","title":"AddressLimit defines limits per address","properties":{"max_amount":{"type":"string","title":"max_amount is the maximum total amount allowed per address in the timeframe\nValue is represented as an integer (e.g., \"1000000\" = 1,000,000 tokens)\nIf set to 0, amount limit is disabled"},"max_transfers":{"type":"string","format":"int64","title":"max_transfers is the maximum number of transfers allowed per address in the timeframe\nIf set to 0, transfer count limit is disabled"},"timeframe_duration":{"type":"string","format":"int64","title":"timeframe_duration is the duration of the timeframe"},"timeframe_type":{"title":"timeframe_type defines the type of timeframe (block, hour, day)","$ref":"#/definitions/ibcratelimit.TimeframeType"}}},"ibcratelimit.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/ibcratelimit.Params"}}},"ibcratelimit.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"ibcratelimit.MsgUpdateRateLimit":{"description":"MsgUpdateRateLimit is the Msg/UpdateRateLimit request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"rate_limit":{"description":"rate_limit defines the rate limit configuration to update or add.\nIf a rate limit with the same channel_id and denom exists, it will be updated.\nOtherwise, it will be appended to the list.","$ref":"#/definitions/ibcratelimit.RateLimitConfig"}}},"ibcratelimit.MsgUpdateRateLimitResponse":{"description":"MsgUpdateRateLimitResponse defines the response structure for executing a\nMsgUpdateRateLimit message.","type":"object"},"ibcratelimit.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"rate_limits":{"type":"array","title":"rate_limits is an array of rate limit configurations\nEach configuration can specify channel_id, denom, and various limit types (supply_shift_limits, unique_sender_limits, address_limits)\nConfigurations are checked in order, and the first matching config is used\nIf no config matches, the transfer is allowed (no rate limit)","items":{"type":"object","$ref":"#/definitions/ibcratelimit.RateLimitConfig"}}}},"ibcratelimit.RateLimitConfig":{"type":"object","title":"RateLimitConfig defines a rate limit configuration for a specific channel and denom","properties":{"address_limits":{"type":"array","title":"address_limits defines per-address transfer limits\nAll limits are checked, and the transfer is rejected if any limit would be exceeded","items":{"type":"object","$ref":"#/definitions/ibcratelimit.AddressLimit"}},"channel_id":{"type":"string","title":"channel_id is the IBC channel ID this rate limit applies to\nIf empty, applies to all channels"},"denom":{"type":"string","title":"denom is the denomination this rate limit applies to\nMust be specified (empty denoms are not allowed)"},"supply_shift_limits":{"type":"array","title":"supply_shift_limits defines multiple timeframe limits for supply shift\nAll limits are checked, and the transfer is rejected if any limit would be exceeded","items":{"type":"object","$ref":"#/definitions/ibcratelimit.TimeframeLimit"}},"unique_sender_limits":{"type":"array","title":"unique_sender_limits defines limits on unique senders per channel\nAll limits are checked, and the transfer is rejected if any limit would be exceeded","items":{"type":"object","$ref":"#/definitions/ibcratelimit.UniqueSenderLimit"}}}},"ibcratelimit.TimeframeLimit":{"type":"object","title":"TimeframeLimit defines a limit for a specific timeframe","properties":{"max_amount":{"type":"string","title":"max_amount is the maximum absolute amount of supply change allowed in this timeframe\nValue is represented as an integer (e.g., \"1000000\" = 1,000,000 tokens)\nIf set to 0, this limit is disabled"},"timeframe_duration":{"type":"string","format":"int64","title":"timeframe_duration is the duration of the timeframe\nFor BLOCK: number of blocks\nFor HOUR: number of hours (will be converted to blocks using block time)\nFor DAY: number of days (will be converted to blocks using block time)"},"timeframe_type":{"title":"timeframe_type defines the type of timeframe (block, hour, day)","$ref":"#/definitions/ibcratelimit.TimeframeType"}}},"ibcratelimit.TimeframeType":{"description":"- TIMEFRAME_TYPE_BLOCK: Duration in blocks\n - TIMEFRAME_TYPE_HOUR: Duration in hours (converted to blocks using block time)\n - TIMEFRAME_TYPE_DAY: Duration in days (converted to blocks using block time)","type":"string","title":"TimeframeType defines the type of timeframe","default":"TIMEFRAME_TYPE_UNSPECIFIED","enum":["TIMEFRAME_TYPE_UNSPECIFIED","TIMEFRAME_TYPE_BLOCK","TIMEFRAME_TYPE_HOUR","TIMEFRAME_TYPE_DAY"]},"ibcratelimit.UniqueSenderLimit":{"type":"object","title":"UniqueSenderLimit defines limits on unique senders per channel","properties":{"max_unique_senders":{"type":"string","format":"int64","title":"max_unique_senders is the maximum number of unique senders allowed in the timeframe\nIf set to 0, this limit is disabled"},"timeframe_duration":{"type":"string","format":"int64","title":"timeframe_duration is the duration of the timeframe"},"timeframe_type":{"title":"timeframe_type defines the type of timeframe (block, hour, day)","$ref":"#/definitions/ibcratelimit.TimeframeType"}}},"managersplitter.ManagerSplitter":{"description":"ManagerSplitter defines the manager splitter entity.","type":"object","properties":{"address":{"description":"The module address of this manager splitter (derived from module name + ID).","type":"string"},"admin":{"description":"Permanent and static admin address. Has full control and can always execute all permissions.","type":"string"},"permissions":{"description":"Permissions mapping each CollectionPermission field to execution criteria.","$ref":"#/definitions/managersplitter.ManagerSplitterPermissions"}}},"managersplitter.ManagerSplitterPermissions":{"description":"ManagerSplitterPermissions mirrors the CollectionPermissions structure\nbut maps each permission to criteria for execution.","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","$ref":"#/definitions/managersplitter.PermissionCriteria"},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","$ref":"#/definitions/managersplitter.PermissionCriteria"}}},"managersplitter.MsgCreateManagerSplitter":{"description":"MsgCreateManagerSplitter creates a new manager splitter entity.","type":"object","properties":{"admin":{"description":"Admin address creating the entity.","type":"string"},"permissions":{"description":"Permissions mapping each CollectionPermission field to execution criteria.","$ref":"#/definitions/managersplitter.ManagerSplitterPermissions"}}},"managersplitter.MsgCreateManagerSplitterResponse":{"description":"MsgCreateManagerSplitterResponse is the response to MsgCreateManagerSplitter.","type":"object","properties":{"address":{"description":"The address of the created manager splitter.","type":"string"}}},"managersplitter.MsgDeleteManagerSplitter":{"description":"MsgDeleteManagerSplitter deletes a manager splitter entity.","type":"object","properties":{"address":{"description":"Address of the manager splitter to delete.","type":"string"},"admin":{"description":"Admin address deleting the entity.","type":"string"}}},"managersplitter.MsgDeleteManagerSplitterResponse":{"description":"MsgDeleteManagerSplitterResponse is the response to MsgDeleteManagerSplitter.","type":"object"},"managersplitter.MsgExecuteUniversalUpdateCollection":{"description":"MsgExecuteUniversalUpdateCollection executes a UniversalUpdateCollection message\nthrough the manager splitter, checking permissions before execution.","type":"object","properties":{"executor":{"description":"Address executing the message (must be approved or admin).","type":"string"},"managerSplitterAddress":{"description":"Address of the manager splitter to execute through.","type":"string"},"universalUpdateCollectionMsg":{"description":"The UniversalUpdateCollection message to execute.","$ref":"#/definitions/tokenization.MsgUniversalUpdateCollection"}}},"managersplitter.MsgExecuteUniversalUpdateCollectionResponse":{"description":"MsgExecuteUniversalUpdateCollectionResponse is the response to MsgExecuteUniversalUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection that was updated.","type":"string"}}},"managersplitter.MsgUpdateManagerSplitter":{"description":"MsgUpdateManagerSplitter updates an existing manager splitter entity.","type":"object","properties":{"address":{"description":"Address of the manager splitter to update.","type":"string"},"admin":{"description":"Admin address updating the entity.","type":"string"},"permissions":{"description":"New permissions to set.","$ref":"#/definitions/managersplitter.ManagerSplitterPermissions"}}},"managersplitter.MsgUpdateManagerSplitterResponse":{"description":"MsgUpdateManagerSplitterResponse is the response to MsgUpdateManagerSplitter.","type":"object"},"managersplitter.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/managersplitter.Params"}}},"managersplitter.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"managersplitter.Params":{"description":"Params defines the parameters for the module.","type":"object"},"managersplitter.PermissionCriteria":{"description":"PermissionCriteria defines the criteria for executing a permission.\nCurrently supports approved addresses (whitelist).","type":"object","properties":{"approvedAddresses":{"description":"List of approved addresses that can execute this permission.","type":"array","items":{"type":"string"}}}},"managersplitter.QueryAllManagerSplittersResponse":{"description":"QueryAllManagerSplittersResponse is response type for the Query/AllManagerSplitters RPC method.","type":"object","properties":{"managerSplitters":{"type":"array","items":{"type":"object","$ref":"#/definitions/managersplitter.ManagerSplitter"}},"pagination":{"$ref":"#/definitions/cosmos.base.query.v1beta1.PageResponse"}}},"managersplitter.QueryGetManagerSplitterResponse":{"description":"QueryGetManagerSplitterResponse is response type for the Query/ManagerSplitter RPC method.","type":"object","properties":{"managerSplitter":{"$ref":"#/definitions/managersplitter.ManagerSplitter"}}},"managersplitter.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/managersplitter.Params"}}},"poolmanager.v1beta1.Affiliate":{"type":"object","title":"===================== Affiliate\nAffiliate represents an affiliate fee recipient","properties":{"address":{"type":"string","title":"address is the affiliate recipient address"},"basis_points_fee":{"type":"string","title":"basis_points_fee is the fee in basis points (1/10000, e.g., 100 = 1%)"}}},"poolmanager.v1beta1.AllPoolsResponse":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"poolmanager.v1beta1.AllRegisteredAlloyedPoolsResponse":{"type":"object","properties":{"contract_states":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.AlloyContractTakerFeeShareState"}}}},"poolmanager.v1beta1.AllTakerFeeShareAccumulatorsResponse":{"type":"object","properties":{"taker_fee_skim_accumulators":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeSkimAccumulator"}}}},"poolmanager.v1beta1.AllTakerFeeShareAgreementsResponse":{"type":"object","properties":{"taker_fee_share_agreements":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareAgreement"}}}},"poolmanager.v1beta1.AlloyContractTakerFeeShareState":{"description":"AlloyContractTakerFeeShareState contains the contract address of the alloyed\nasset pool, along with the adjusted taker fee share agreements for any asset\nwithin the alloyed asset pool that has a taker fee share agreement. If for\ninstance there are two denoms, and denomA makes up 50 percent and denomB\nmakes up 50 percent, and denom A has a taker fee share agreement with a skim\npercent of 10%, then the adjusted taker fee share agreement for denomA will\nbe 5%.","type":"object","properties":{"contract_address":{"description":"contract_address is the address of the alloyed asset pool contract.","type":"string"},"taker_fee_share_agreements":{"description":"taker_fee_share_agreements is the adjusted taker fee share agreements for\nany asset within the alloyed asset pool that has a taker fee share\nagreement.","type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareAgreement"}}}},"poolmanager.v1beta1.DenomPairTakerFee":{"type":"object","properties":{"denom0":{"description":"DEPRECATED: Now that we are using uni-directional trading pairs, we are\nusing tokenInDenom and tokenOutDenom instead of denom0 and denom1 to\nprevent confusion.","type":"string"},"denom1":{"type":"string"},"taker_fee":{"type":"string"},"tokenInDenom":{"type":"string"},"tokenOutDenom":{"type":"string"}}},"poolmanager.v1beta1.EstimateSwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"poolmanager.v1beta1.EstimateSwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"poolmanager.v1beta1.EstimateTradeBasedOnPriceImpactResponse":{"description":"EstimateTradeBasedOnPriceImpactResponse represents the response data\nfor an estimated trade based on price impact. If a trade fails to be\nestimated the response would be 0,0 for input_coin and output_coin and will\nnot error.","type":"object","properties":{"input_coin":{"description":"input_coin is the actual input amount that would be tradeable\nunder the specified price impact.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"output_coin":{"description":"output_coin is the amount of tokens of the ToCoinDenom type\nthat will be received for the actual InputCoin trade.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"poolmanager.v1beta1.ListPoolsByDenomResponse":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/google.protobuf.Any"}}}},"poolmanager.v1beta1.MsgSetDenomPairTakerFee":{"type":"object","title":"===================== MsgSetDenomPairTakerFee","properties":{"denom_pair_taker_fee":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.DenomPairTakerFee"}},"sender":{"type":"string"}}},"poolmanager.v1beta1.MsgSetDenomPairTakerFeeResponse":{"type":"object","properties":{"success":{"type":"boolean"}}},"poolmanager.v1beta1.MsgSetTakerFeeShareAgreementForDenom":{"type":"object","title":"===================== MsgSetTakerFeeShareAgreementForDenom","properties":{"denom":{"description":"denom is the denom that the taker fee share agreement is being set for.\nEx. If this is set to \"nBTC\", then any trade route that includes \"nBTC\"\nwill have the skim_percent skimmed from the taker fees and sent to the\nskim_address.","type":"string"},"sender":{"type":"string"},"skim_address":{"description":"skim_address is the address belonging to the respective bridge provider\nthat the skimmed taker fees will be sent to at the end of each epoch.","type":"string"},"skim_percent":{"description":"skim_percent is the percentage of taker fees that will be skimmed for the\nbridge provider, in the event that the bridge provider's denom is included\nin the swap route.","type":"string"}}},"poolmanager.v1beta1.MsgSetTakerFeeShareAgreementForDenomResponse":{"type":"object"},"poolmanager.v1beta1.MsgSplitRouteSwapExactAmountIn":{"type":"object","title":"===================== MsgSplitRouteSwapExactAmountIn","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInSplitRoute"}},"sender":{"type":"string"},"token_in_denom":{"type":"string"},"token_out_min_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSplitRouteSwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSplitRouteSwapExactAmountOut":{"type":"object","title":"===================== MsgSplitRouteSwapExactAmountOut","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountOutSplitRoute"}},"sender":{"type":"string"},"token_in_max_amount":{"type":"string"},"token_out_denom":{"type":"string"}}},"poolmanager.v1beta1.MsgSplitRouteSwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSwapExactAmountIn":{"type":"object","title":"===================== MsgSwapExactAmountIn","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInRoute"}},"sender":{"type":"string"},"token_in":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"},"token_out_min_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSwapExactAmountInResponse":{"type":"object","properties":{"token_out_amount":{"type":"string"}}},"poolmanager.v1beta1.MsgSwapExactAmountOut":{"type":"object","title":"===================== MsgSwapExactAmountOut","properties":{"routes":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountOutRoute"}},"sender":{"type":"string"},"token_in_max_amount":{"type":"string"},"token_out":{"$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"poolmanager.v1beta1.MsgSwapExactAmountOutResponse":{"type":"object","properties":{"token_in_amount":{"type":"string"}}},"poolmanager.v1beta1.NumPoolsResponse":{"type":"object","properties":{"num_pools":{"type":"string","format":"uint64"}}},"poolmanager.v1beta1.Params":{"type":"object","title":"Params holds parameters for the poolmanager module","properties":{"taker_fee_params":{"description":"taker_fee_params is the container of taker fee parameters.","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeParams"}}},"poolmanager.v1beta1.ParamsResponse":{"type":"object","properties":{"params":{"$ref":"#/definitions/poolmanager.v1beta1.Params"}}},"poolmanager.v1beta1.PoolResponse":{"type":"object","properties":{"pool":{"$ref":"#/definitions/google.protobuf.Any"}}},"poolmanager.v1beta1.RegisteredAlloyedPoolFromDenomResponse":{"type":"object","properties":{"contract_state":{"$ref":"#/definitions/poolmanager.v1beta1.AlloyContractTakerFeeShareState"}}},"poolmanager.v1beta1.RegisteredAlloyedPoolFromPoolIdResponse":{"type":"object","properties":{"contract_state":{"$ref":"#/definitions/poolmanager.v1beta1.AlloyContractTakerFeeShareState"}}},"poolmanager.v1beta1.SpotPriceResponse":{"description":"SpotPriceResponse defines the gRPC response structure for a SpotPrice\nquery.","type":"object","properties":{"spot_price":{"type":"string","title":"String of the Dec. Ex) 10.203uatom"}}},"poolmanager.v1beta1.SwapAmountInRoute":{"type":"object","properties":{"pool_id":{"type":"string","format":"uint64"},"token_out_denom":{"type":"string"}}},"poolmanager.v1beta1.SwapAmountInSplitRoute":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountInRoute"}},"token_in_amount":{"type":"string"}}},"poolmanager.v1beta1.SwapAmountOutRoute":{"type":"object","properties":{"pool_id":{"type":"string","format":"uint64"},"token_in_denom":{"type":"string"}}},"poolmanager.v1beta1.SwapAmountOutSplitRoute":{"type":"object","properties":{"pools":{"type":"array","items":{"type":"object","$ref":"#/definitions/poolmanager.v1beta1.SwapAmountOutRoute"}},"token_out_amount":{"type":"string"}}},"poolmanager.v1beta1.TakerFeeDistributionPercentage":{"description":"TakerFeeDistributionPercentage defines what percent of the taker fee category\ngets distributed to the available categories.","type":"object","properties":{"community_pool":{"type":"string"},"staking_rewards":{"type":"string"}}},"poolmanager.v1beta1.TakerFeeParams":{"description":"TakerFeeParams consolidates the taker fee parameters for the poolmanager.","type":"object","properties":{"admin_addresses":{"description":"admin_addresses is a list of addresses that are allowed to set and remove\ncustom taker fees for denom pairs. Governance also has the ability to set\nand remove custom taker fees for denom pairs, but with the normal\ngovernance delay.","type":"array","items":{"type":"string"}},"community_pool_denom_to_swap_non_whitelisted_assets_to":{"description":"community_pool_denom_to_swap_non_whitelisted_assets_to is the denom that\nnon-whitelisted taker fees will be swapped to before being sent to\nthe community pool.","type":"string"},"community_pool_denom_whitelist":{"description":"community_pool_denom_whitelist is a list of denoms that should be sent\ndirectly to the community pool instead of being swapped to the\n`community_pool_denom_to_swap_non_whitelisted_assets_to`.","type":"array","items":{"type":"string"}},"default_taker_fee":{"description":"default_taker_fee is the fee used when creating a new pool that doesn't\nfall under a custom pool taker fee or stableswap taker fee category.","type":"string"},"non_osmo_taker_fee_distribution":{"description":"non_osmo_taker_fee_distribution defines the distribution of taker fees\ngenerated in non-OSMO. As of this writing, it has two categories:\n- staking_rewards: the percent of the taker fee that gets swapped to OSMO\n and then distributed to stakers.\n- community_pool: the percent of the taker fee that gets sent to the\n community pool. Note: If the non-OSMO asset is an authorized_quote_denom,\n that denom is sent directly to the community pool. Otherwise, it is\n swapped to the community_pool_denom_to_swap_non_whitelisted_assets_to and\n then sent to the community pool as that denom.","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeDistributionPercentage"},"osmo_taker_fee_distribution":{"description":"osmo_taker_fee_distribution defines the distribution of taker fees\ngenerated in OSMO. As of this writing, it has two categories:\n- staking_rewards: the percent of the taker fee that gets distributed to\n stakers.\n- community_pool: the percent of the taker fee that gets sent to the\n community pool.","$ref":"#/definitions/poolmanager.v1beta1.TakerFeeDistributionPercentage"},"reduced_fee_whitelist":{"description":"reduced_fee_whitelist is a list of addresses that are\nallowed to pay a reduce taker fee when performing a swap\n(i.e. swap without paying the taker fee).\nIt is intended to be used for integrators who meet qualifying factors\nthat are approved by governance.\nInitially, the taker fee is allowed to be bypassed completely. However\nIn the future, we will charge a reduced taker fee instead of no fee at all.","type":"array","items":{"type":"string"}}}},"poolmanager.v1beta1.TakerFeeShareAgreement":{"description":"TakerFeeShareAgreement represents the agreement between the Osmosis protocol\nand a specific denom to share a certain percent of taker fees generated in\nany route that contains said denom. For example, if the agreement specifies a\n10% skim_percent, this means 10% of the taker fees generated in a swap route\ncontaining the specified denom will be sent to the address specified\nin the skim_address field at the end of each epoch. These skim_percents are\nadditive, so if three taker fee agreements have skim percents of 10%, 20%,\nand 30%, the total skim percent for the route will be 60%.","type":"object","properties":{"denom":{"description":"denom is the denom that has the taker fee share agreement.","type":"string"},"skim_address":{"description":"skim_address is the address belonging to the respective denom\nthat the skimmed taker fees will be sent to at the end of each epoch.","type":"string"},"skim_percent":{"description":"skim_percent is the percentage of taker fees that will be skimmed for the\ndenom, in the event that the denom is included in the swap route.","type":"string"}}},"poolmanager.v1beta1.TakerFeeShareAgreementFromDenomResponse":{"type":"object","properties":{"taker_fee_share_agreement":{"$ref":"#/definitions/poolmanager.v1beta1.TakerFeeShareAgreement"}}},"poolmanager.v1beta1.TakerFeeShareDenomsToAccruedValueResponse":{"type":"object","properties":{"amount":{"type":"string"}}},"poolmanager.v1beta1.TakerFeeSkimAccumulator":{"description":"TakerFeeSkimAccumulator accumulates the total skimmed taker fees for each\ndenom that has a taker fee share agreement.","type":"object","properties":{"denom":{"description":"denom is the denom that has the taker fee share agreement.","type":"string"},"skimmed_taker_fees":{"description":"skimmed_taker_fees is the total skimmed taker fees for the denom.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"poolmanager.v1beta1.TotalLiquidityResponse":{"type":"object","properties":{"liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"poolmanager.v1beta1.TotalPoolLiquidityResponse":{"type":"object","properties":{"liquidity":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"poolmanager.v1beta1.TotalVolumeForPoolResponse":{"type":"object","properties":{"volume":{"type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}}},"poolmanager.v1beta1.TradingPairTakerFeeResponse":{"type":"object","properties":{"taker_fee":{"type":"string"}}},"poolmanager.v2.SpotPriceResponse":{"description":"SpotPriceResponse defines the gRPC response structure for a SpotPrice\nquery.","type":"object","properties":{"spot_price":{"type":"string","title":"String of the BigDec. Ex) 10.203uatom"}}},"sendmanager.MsgSendWithAliasRouting":{"description":"MsgSendWithAliasRouting defines a message for sending coins with alias denom routing.\nThis message mirrors cosmos bank MsgSend but routes through sendmanager to handle\nboth standard coins and alias denoms (e.g., badgeslp:).","type":"object","properties":{"amount":{"description":"amount is the list of coins to send.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"from_address":{"description":"from_address is the address of the account sending the coins.","type":"string"},"to_address":{"description":"to_address is the address of the account receiving the coins.","type":"string"}}},"sendmanager.MsgSendWithAliasRoutingResponse":{"description":"MsgSendWithAliasRoutingResponse defines the response structure for executing a\nMsgSendWithAliasRouting message.","type":"object"},"sendmanager.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/sendmanager.Params"}}},"sendmanager.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"sendmanager.Params":{"description":"Params defines the parameters for the module.","type":"object"},"sendmanager.QueryBalanceResponse":{"description":"QueryBalanceResponse is response type for the Query/Balance RPC method.","type":"object","properties":{"balance":{"description":"balance is the balance of the specified denom for the address.","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}}},"sendmanager.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/sendmanager.Params"}}},"tendermint.abci.CheckTxType":{"type":"string","default":"NEW","enum":["NEW","RECHECK"]},"tendermint.abci.CommitInfo":{"type":"object","properties":{"round":{"type":"integer","format":"int32"},"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.VoteInfo"}}}},"tendermint.abci.Event":{"description":"Event allows application developers to attach additional information to\nResponseFinalizeBlock and ResponseCheckTx.\nLater, transactions may be queried using these events.","type":"object","properties":{"attributes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.EventAttribute"}},"type":{"type":"string"}}},"tendermint.abci.EventAttribute":{"description":"EventAttribute is a single key-value pair, associated with an event.","type":"object","properties":{"index":{"type":"boolean","title":"nondeterministic"},"key":{"type":"string"},"value":{"type":"string"}}},"tendermint.abci.ExecTxResult":{"description":"ExecTxResult contains results of executing one individual transaction.\n\n* Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted","type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","title":"nondeterministic","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ExtendedCommitInfo":{"description":"ExtendedCommitInfo is similar to CommitInfo except that it is only used in\nthe PrepareProposal request such that CometBFT can provide vote extensions\nto the application.","type":"object","properties":{"round":{"description":"The round at which the block proposer decided in the previous height.","type":"integer","format":"int32"},"votes":{"description":"List of validators' addresses in the last validator set with their voting\ninformation, including vote extensions.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExtendedVoteInfo"}}}},"tendermint.abci.ExtendedVoteInfo":{"type":"object","properties":{"block_id_flag":{"title":"block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all","$ref":"#/definitions/tendermint.types.BlockIDFlag"},"extension_signature":{"type":"string","format":"byte","title":"Vote extension signature created by CometBFT"},"validator":{"description":"The validator that sent the vote.","$ref":"#/definitions/tendermint.abci.Validator"},"vote_extension":{"description":"Non-deterministic extension provided by the sending validator's application.","type":"string","format":"byte"}}},"tendermint.abci.Misbehavior":{"type":"object","properties":{"height":{"type":"string","format":"int64","title":"The height when the offense occurred"},"time":{"type":"string","format":"date-time","title":"The corresponding time where the offense occurred"},"total_voting_power":{"type":"string","format":"int64","title":"Total voting power of the validator set in case the ABCI application does\nnot store historical validators.\nhttps://github.com/tendermint/tendermint/issues/4581"},"type":{"$ref":"#/definitions/tendermint.abci.MisbehaviorType"},"validator":{"title":"The offending validator","$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.abci.MisbehaviorType":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","DUPLICATE_VOTE","LIGHT_CLIENT_ATTACK"]},"tendermint.abci.RequestApplySnapshotChunk":{"type":"object","title":"Applies a snapshot chunk","properties":{"chunk":{"type":"string","format":"byte"},"index":{"type":"integer","format":"int64"},"sender":{"type":"string"}}},"tendermint.abci.RequestCheckTx":{"type":"object","properties":{"tx":{"type":"string","format":"byte"},"type":{"$ref":"#/definitions/tendermint.abci.CheckTxType"}}},"tendermint.abci.RequestCommit":{"type":"object"},"tendermint.abci.RequestEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.RequestExtendVote":{"type":"object","title":"Extends a vote with application-injected data","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this vote may be referring to"},"height":{"type":"string","format":"int64","title":"the height of the extended vote"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time","title":"info of the block that this vote may be referring to"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFinalizeBlock":{"type":"object","properties":{"decided_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"hash":{"description":"hash is the merkle root hash of the fields of the decided block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"proposer_address is the address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestFlush":{"type":"object"},"tendermint.abci.RequestInfo":{"type":"object","properties":{"abci_version":{"type":"string"},"block_version":{"type":"string","format":"uint64"},"p2p_version":{"type":"string","format":"uint64"},"version":{"type":"string"}}},"tendermint.abci.RequestInitChain":{"type":"object","properties":{"app_state_bytes":{"type":"string","format":"byte"},"chain_id":{"type":"string"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"initial_height":{"type":"string","format":"int64"},"time":{"type":"string","format":"date-time"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.RequestListSnapshots":{"type":"object","title":"lists available snapshots"},"tendermint.abci.RequestLoadSnapshotChunk":{"type":"object","title":"loads a snapshot chunk","properties":{"chunk":{"type":"integer","format":"int64"},"format":{"type":"integer","format":"int64"},"height":{"type":"string","format":"uint64"}}},"tendermint.abci.RequestOfferSnapshot":{"type":"object","title":"offers a snapshot to the application","properties":{"app_hash":{"type":"string","format":"byte","title":"light client-verified app hash for snapshot height"},"snapshot":{"title":"snapshot offered by peers","$ref":"#/definitions/tendermint.abci.Snapshot"}}},"tendermint.abci.RequestPrepareProposal":{"type":"object","properties":{"height":{"type":"string","format":"int64"},"local_last_commit":{"$ref":"#/definitions/tendermint.abci.ExtendedCommitInfo"},"max_tx_bytes":{"description":"the modified transactions cannot exceed this size.","type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposer_address":{"description":"address of the public key of the validator proposing the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"description":"txs is an array of transactions that will be included in a block,\nsent to the app for possible modifications.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestProcessProposal":{"type":"object","properties":{"hash":{"description":"hash is the merkle root hash of the fields of the proposed block.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"misbehavior":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Misbehavior"}},"next_validators_hash":{"type":"string","format":"byte"},"proposed_last_commit":{"$ref":"#/definitions/tendermint.abci.CommitInfo"},"proposer_address":{"description":"address of the public key of the original proposer of the block.","type":"string","format":"byte"},"time":{"type":"string","format":"date-time"},"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.RequestQuery":{"type":"object","properties":{"data":{"type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"path":{"type":"string"},"prove":{"type":"boolean"}}},"tendermint.abci.RequestVerifyVoteExtension":{"type":"object","title":"Verify the vote extension","properties":{"hash":{"type":"string","format":"byte","title":"the hash of the block that this received vote corresponds to"},"height":{"type":"string","format":"int64"},"validator_address":{"type":"string","format":"byte","title":"the validator that signed the vote extension"},"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseApplySnapshotChunk":{"type":"object","properties":{"refetch_chunks":{"type":"array","title":"Chunks to refetch and reapply","items":{"type":"integer","format":"int64"}},"reject_senders":{"type":"array","title":"Chunk senders to reject and ban","items":{"type":"string"}},"result":{"$ref":"#/definitions/tendermint.abci.ResponseApplySnapshotChunk.Result"}}},"tendermint.abci.ResponseApplySnapshotChunk.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Chunk successfully accepted\n - ABORT: Abort all snapshot restoration\n - RETRY: Retry chunk (combine with refetch and reject)\n - RETRY_SNAPSHOT: Retry snapshot (combine with refetch and reject)\n - REJECT_SNAPSHOT: Reject this snapshot, try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","RETRY","RETRY_SNAPSHOT","REJECT_SNAPSHOT"]},"tendermint.abci.ResponseCheckTx":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"data":{"type":"string","format":"byte"},"events":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"gas_used":{"type":"string","format":"int64"},"gas_wanted":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"log":{"type":"string","title":"nondeterministic"}}},"tendermint.abci.ResponseCommit":{"type":"object","properties":{"retain_height":{"type":"string","format":"int64"}}},"tendermint.abci.ResponseEcho":{"type":"object","properties":{"message":{"type":"string"}}},"tendermint.abci.ResponseExtendVote":{"type":"object","properties":{"vote_extension":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseFinalizeBlock":{"type":"object","properties":{"app_hash":{"description":"app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was\ndeterministic. It is up to the application to decide which algorithm to use.","type":"string","format":"byte"},"consensus_param_updates":{"description":"updates to the consensus params, if any.","$ref":"#/definitions/tendermint.types.ConsensusParams"},"events":{"type":"array","title":"set of block events emmitted as part of executing the block","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Event"}},"tx_results":{"type":"array","title":"the result of executing each transaction including the events\nthe particular transction emitted. This should match the order\nof the transactions delivered in the block itself","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ExecTxResult"}},"validator_updates":{"description":"a list of updates to the validator set. These will reflect the validator set at current height + 2.","type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseFlush":{"type":"object"},"tendermint.abci.ResponseInfo":{"type":"object","properties":{"app_version":{"type":"string","format":"uint64"},"data":{"type":"string"},"last_block_app_hash":{"type":"string","format":"byte"},"last_block_height":{"type":"string","format":"int64"},"version":{"type":"string"}}},"tendermint.abci.ResponseInitChain":{"type":"object","properties":{"app_hash":{"type":"string","format":"byte"},"consensus_params":{"$ref":"#/definitions/tendermint.types.ConsensusParams"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.ValidatorUpdate"}}}},"tendermint.abci.ResponseListSnapshots":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.abci.Snapshot"}}}},"tendermint.abci.ResponseLoadSnapshotChunk":{"type":"object","properties":{"chunk":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseOfferSnapshot":{"type":"object","properties":{"result":{"$ref":"#/definitions/tendermint.abci.ResponseOfferSnapshot.Result"}}},"tendermint.abci.ResponseOfferSnapshot.Result":{"type":"string","title":"- UNKNOWN: Unknown result, abort all snapshot restoration\n - ACCEPT: Snapshot accepted, apply chunks\n - ABORT: Abort all snapshot restoration\n - REJECT: Reject this specific snapshot, try others\n - REJECT_FORMAT: Reject all snapshots of this format, try others\n - REJECT_SENDER: Reject all snapshots from the sender(s), try others","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","ABORT","REJECT","REJECT_FORMAT","REJECT_SENDER"]},"tendermint.abci.ResponsePrepareProposal":{"type":"object","properties":{"txs":{"type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.abci.ResponseProcessProposal":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseProcessProposal.ProposalStatus"}}},"tendermint.abci.ResponseProcessProposal.ProposalStatus":{"type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.ResponseQuery":{"type":"object","properties":{"code":{"type":"integer","format":"int64"},"codespace":{"type":"string"},"height":{"type":"string","format":"int64"},"index":{"type":"string","format":"int64"},"info":{"type":"string","title":"nondeterministic"},"key":{"type":"string","format":"byte"},"log":{"description":"bytes data = 2; // use \"value\" instead.\n\nnondeterministic","type":"string"},"proof_ops":{"$ref":"#/definitions/tendermint.crypto.ProofOps"},"value":{"type":"string","format":"byte"}}},"tendermint.abci.ResponseVerifyVoteExtension":{"type":"object","properties":{"status":{"$ref":"#/definitions/tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus"}}},"tendermint.abci.ResponseVerifyVoteExtension.VerifyStatus":{"description":" - REJECT: Rejecting the vote extension will reject the entire precommit by the sender.\nIncorrectly implementing this thus has liveness implications as it may affect\nCometBFT's ability to receive 2/3+ valid votes to finalize the block.\nHonest nodes should never be rejected.","type":"string","default":"UNKNOWN","enum":["UNKNOWN","ACCEPT","REJECT"]},"tendermint.abci.Snapshot":{"type":"object","properties":{"chunks":{"type":"integer","format":"int64","title":"Number of chunks in the snapshot"},"format":{"type":"integer","format":"int64","title":"The application-specific snapshot format"},"hash":{"type":"string","format":"byte","title":"Arbitrary snapshot hash, equal only if identical"},"height":{"type":"string","format":"uint64","title":"The height at which the snapshot was taken"},"metadata":{"type":"string","format":"byte","title":"Arbitrary application metadata"}}},"tendermint.abci.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte","title":"The first 20 bytes of SHA256(public key)"},"power":{"description":"The voting power","type":"string","format":"int64","title":"PubKey pub_key = 2 [(gogoproto.nullable)=false];"}}},"tendermint.abci.ValidatorUpdate":{"type":"object","properties":{"power":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"}}},"tendermint.abci.VoteInfo":{"type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"validator":{"$ref":"#/definitions/tendermint.abci.Validator"}}},"tendermint.crypto.ProofOp":{"type":"object","title":"ProofOp defines an operation used for calculating Merkle root\nThe data could be arbitrary format, providing nessecary data\nfor example neighbouring node hash","properties":{"data":{"type":"string","format":"byte"},"key":{"type":"string","format":"byte"},"type":{"type":"string"}}},"tendermint.crypto.ProofOps":{"type":"object","title":"ProofOps is Merkle proof defined by the list of ProofOps","properties":{"ops":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.crypto.ProofOp"}}}},"tendermint.crypto.PublicKey":{"type":"object","title":"PublicKey defines the keys available for use with Validators","properties":{"ed25519":{"type":"string","format":"byte"},"secp256k1":{"type":"string","format":"byte"}}},"tendermint.p2p.DefaultNodeInfo":{"type":"object","properties":{"channels":{"type":"string","format":"byte"},"default_node_id":{"type":"string"},"listen_addr":{"type":"string"},"moniker":{"type":"string"},"network":{"type":"string"},"other":{"$ref":"#/definitions/tendermint.p2p.DefaultNodeInfoOther"},"protocol_version":{"$ref":"#/definitions/tendermint.p2p.ProtocolVersion"},"version":{"type":"string"}}},"tendermint.p2p.DefaultNodeInfoOther":{"type":"object","properties":{"rpc_address":{"type":"string"},"tx_index":{"type":"string"}}},"tendermint.p2p.ProtocolVersion":{"type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"},"p2p":{"type":"string","format":"uint64"}}},"tendermint.types.ABCIParams":{"description":"ABCIParams configure functionality specific to the Application Blockchain Interface.","type":"object","properties":{"vote_extensions_enable_height":{"description":"vote_extensions_enable_height configures the first height during which\nvote extensions will be enabled. During this specified height, and for all\nsubsequent heights, precommit messages that do not contain valid extension data\nwill be considered invalid. Prior to this height, vote extensions will not\nbe used or accepted by validators on the network.\n\nOnce enabled, vote extensions will be created by the application in ExtendVote,\npassed to the application for validation in VerifyVoteExtension and given\nto the application to use when proposing a block during PrepareProposal.","type":"string","format":"int64"}}},"tendermint.types.Block":{"type":"object","properties":{"data":{"$ref":"#/definitions/tendermint.types.Data"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceList"},"header":{"$ref":"#/definitions/tendermint.types.Header"},"last_commit":{"$ref":"#/definitions/tendermint.types.Commit"}}},"tendermint.types.BlockID":{"type":"object","title":"BlockID","properties":{"hash":{"type":"string","format":"byte"},"part_set_header":{"$ref":"#/definitions/tendermint.types.PartSetHeader"}}},"tendermint.types.BlockIDFlag":{"description":"- BLOCK_ID_FLAG_UNKNOWN: indicates an error condition\n - BLOCK_ID_FLAG_ABSENT: the vote was not received\n - BLOCK_ID_FLAG_COMMIT: voted for the block that received the majority\n - BLOCK_ID_FLAG_NIL: voted for nil","type":"string","title":"BlockIdFlag indicates which BlockID the signature is for","default":"BLOCK_ID_FLAG_UNKNOWN","enum":["BLOCK_ID_FLAG_UNKNOWN","BLOCK_ID_FLAG_ABSENT","BLOCK_ID_FLAG_COMMIT","BLOCK_ID_FLAG_NIL"]},"tendermint.types.BlockParams":{"description":"BlockParams contains limits on the block size.","type":"object","properties":{"max_bytes":{"type":"string","format":"int64","title":"Max block size, in bytes.\nNote: must be greater than 0"},"max_gas":{"type":"string","format":"int64","title":"Max gas per block.\nNote: must be greater or equal to -1"}}},"tendermint.types.Commit":{"description":"Commit contains the evidence that a block was committed by a set of validators.","type":"object","properties":{"block_id":{"$ref":"#/definitions/tendermint.types.BlockID"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signatures":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.CommitSig"}}}},"tendermint.types.CommitSig":{"description":"CommitSig is a part of the Vote included in a Commit.","type":"object","properties":{"block_id_flag":{"$ref":"#/definitions/tendermint.types.BlockIDFlag"},"signature":{"type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"validator_address":{"type":"string","format":"byte"}}},"tendermint.types.ConsensusParams":{"description":"ConsensusParams contains consensus critical parameters that determine the\nvalidity of blocks.","type":"object","properties":{"abci":{"$ref":"#/definitions/tendermint.types.ABCIParams"},"block":{"$ref":"#/definitions/tendermint.types.BlockParams"},"evidence":{"$ref":"#/definitions/tendermint.types.EvidenceParams"},"validator":{"$ref":"#/definitions/tendermint.types.ValidatorParams"},"version":{"$ref":"#/definitions/tendermint.types.VersionParams"}}},"tendermint.types.Data":{"type":"object","title":"Data contains the set of transactions included in the block","properties":{"txs":{"description":"Txs that will be applied by state @ block.Height+1.\nNOTE: not all txs here are valid. We're just agreeing on the order first.\nThis means that block.AppHash does not include these txs.","type":"array","items":{"type":"string","format":"byte"}}}},"tendermint.types.DuplicateVoteEvidence":{"description":"DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes.","type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"},"validator_power":{"type":"string","format":"int64"},"vote_a":{"$ref":"#/definitions/tendermint.types.Vote"},"vote_b":{"$ref":"#/definitions/tendermint.types.Vote"}}},"tendermint.types.Evidence":{"type":"object","properties":{"duplicate_vote_evidence":{"$ref":"#/definitions/tendermint.types.DuplicateVoteEvidence"},"light_client_attack_evidence":{"$ref":"#/definitions/tendermint.types.LightClientAttackEvidence"}}},"tendermint.types.EvidenceList":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Evidence"}}}},"tendermint.types.EvidenceParams":{"description":"EvidenceParams determine how we handle evidence of malfeasance.","type":"object","properties":{"max_age_duration":{"description":"Max age of evidence, in time.\n\nIt should correspond with an app's \"unbonding period\" or other similar\nmechanism for handling [Nothing-At-Stake\nattacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed).","type":"string"},"max_age_num_blocks":{"description":"Max age of evidence, in blocks.\n\nThe basic formula for calculating this is: MaxAgeDuration / {average block\ntime}.","type":"string","format":"int64"},"max_bytes":{"type":"string","format":"int64","title":"This sets the maximum size of total evidence in bytes that can be committed in a single block.\nand should fall comfortably under the max block bytes.\nDefault is 1048576 or 1MB"}}},"tendermint.types.Header":{"description":"Header defines the structure of a block header.","type":"object","properties":{"app_hash":{"type":"string","format":"byte","title":"state after txs from the previous block"},"chain_id":{"type":"string"},"consensus_hash":{"type":"string","format":"byte","title":"consensus params for current block"},"data_hash":{"type":"string","format":"byte","title":"transactions"},"evidence_hash":{"description":"evidence included in the block","type":"string","format":"byte","title":"consensus info"},"height":{"type":"string","format":"int64"},"last_block_id":{"title":"prev block info","$ref":"#/definitions/tendermint.types.BlockID"},"last_commit_hash":{"description":"commit from validators from the last block","type":"string","format":"byte","title":"hashes of block data"},"last_results_hash":{"type":"string","format":"byte","title":"root hash of all results from the txs from the previous block"},"next_validators_hash":{"type":"string","format":"byte","title":"validators for the next block"},"proposer_address":{"type":"string","format":"byte","title":"original proposer of the block"},"time":{"type":"string","format":"date-time"},"validators_hash":{"description":"validators for the current block","type":"string","format":"byte","title":"hashes from the app output from the prev block"},"version":{"title":"basic block info","$ref":"#/definitions/tendermint.version.Consensus"}}},"tendermint.types.LightBlock":{"type":"object","properties":{"signed_header":{"$ref":"#/definitions/tendermint.types.SignedHeader"},"validator_set":{"$ref":"#/definitions/tendermint.types.ValidatorSet"}}},"tendermint.types.LightClientAttackEvidence":{"description":"LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client.","type":"object","properties":{"byzantine_validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}},"common_height":{"type":"string","format":"int64"},"conflicting_block":{"$ref":"#/definitions/tendermint.types.LightBlock"},"timestamp":{"type":"string","format":"date-time"},"total_voting_power":{"type":"string","format":"int64"}}},"tendermint.types.PartSetHeader":{"type":"object","title":"PartsetHeader","properties":{"hash":{"type":"string","format":"byte"},"total":{"type":"integer","format":"int64"}}},"tendermint.types.SignedHeader":{"type":"object","properties":{"commit":{"$ref":"#/definitions/tendermint.types.Commit"},"header":{"$ref":"#/definitions/tendermint.types.Header"}}},"tendermint.types.SignedMsgType":{"description":"SignedMsgType is a type of signed message in the consensus.\n\n - SIGNED_MSG_TYPE_PREVOTE: Votes\n - SIGNED_MSG_TYPE_PROPOSAL: Proposals","type":"string","default":"SIGNED_MSG_TYPE_UNKNOWN","enum":["SIGNED_MSG_TYPE_UNKNOWN","SIGNED_MSG_TYPE_PREVOTE","SIGNED_MSG_TYPE_PRECOMMIT","SIGNED_MSG_TYPE_PROPOSAL"]},"tendermint.types.Validator":{"type":"object","properties":{"address":{"type":"string","format":"byte"},"proposer_priority":{"type":"string","format":"int64"},"pub_key":{"$ref":"#/definitions/tendermint.crypto.PublicKey"},"voting_power":{"type":"string","format":"int64"}}},"tendermint.types.ValidatorParams":{"description":"ValidatorParams restrict the public key types validators can use.\nNOTE: uses ABCI pubkey naming, not Amino names.","type":"object","properties":{"pub_key_types":{"type":"array","items":{"type":"string"}}}},"tendermint.types.ValidatorSet":{"type":"object","properties":{"proposer":{"$ref":"#/definitions/tendermint.types.Validator"},"total_voting_power":{"type":"string","format":"int64"},"validators":{"type":"array","items":{"type":"object","$ref":"#/definitions/tendermint.types.Validator"}}}},"tendermint.types.VersionParams":{"description":"VersionParams contains the ABCI application version.","type":"object","properties":{"app":{"type":"string","format":"uint64"}}},"tendermint.types.Vote":{"description":"Vote represents a prevote or precommit vote from validators for\nconsensus.","type":"object","properties":{"block_id":{"description":"zero if vote is nil.","$ref":"#/definitions/tendermint.types.BlockID"},"extension":{"description":"Vote extension provided by the application. Only valid for precommit\nmessages.","type":"string","format":"byte"},"extension_signature":{"description":"Vote extension signature by the validator if they participated in\nconsensus for the associated block.\nOnly valid for precommit messages.","type":"string","format":"byte"},"height":{"type":"string","format":"int64"},"round":{"type":"integer","format":"int32"},"signature":{"description":"Vote signature by the validator if they participated in consensus for the\nassociated block.","type":"string","format":"byte"},"timestamp":{"type":"string","format":"date-time"},"type":{"$ref":"#/definitions/tendermint.types.SignedMsgType"},"validator_address":{"type":"string","format":"byte"},"validator_index":{"type":"integer","format":"int32"}}},"tendermint.version.Consensus":{"description":"Consensus captures the consensus rules for processing a block in the blockchain,\nincluding all blockchain data structures and the rules of the application's\nstate transition machine.","type":"object","properties":{"app":{"type":"string","format":"uint64"},"block":{"type":"string","format":"uint64"}}},"tokenization.ActionPermission":{"description":"ActionPermission defines the permissions for performing an action.\n\nThis is simple and straightforward as the only thing we need to check is the permitted/forbidden times.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.AddressChecks":{"type":"object","title":"AddressChecks defines checks for address types (EVM contract, liquidity pool, etc.)","properties":{"mustBeEvmContract":{"description":"Require the address to be an EVM contract (has code).","type":"boolean"},"mustBeLiquidityPool":{"description":"Require the address to be a liquidity pool.","type":"boolean"},"mustNotBeEvmContract":{"description":"Require the address to not be an EVM contract (no code).","type":"boolean"},"mustNotBeLiquidityPool":{"description":"Require the address to not be a liquidity pool.","type":"boolean"}}},"tokenization.AddressList":{"type":"object","title":"An AddressList is a list of addresses that are referenced by an ID.\nAddressLists are used in defining approvals ia a reusbale identifier. \nNote: We also support a reserved ID system by string ID; \"Mint\", \"!Mint\"","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"createdBy":{"description":"The user or entity who created the address list.","type":"string"},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.AddressListInput":{"description":"AddressListInput is used for creating address lists via MsgCreateAddressLists.\nIt contains all fields from AddressList except createdBy, which is automatically set from the message creator.","type":"object","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.AliasPath":{"type":"object","properties":{"conversion":{"description":"The conversion between cosmos coin and token balances.","$ref":"#/definitions/tokenization.ConversionWithoutDenom"},"denom":{"description":"The denomination (denom) to be used for the alias.","type":"string"},"denomUnits":{"description":"Denomination units for the alias. Defines how the coin can be displayed with different decimal places and symbols.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"description":"The symbol for the alias (e.g., \"BADGE\", \"NFT\"). Used for display purposes. Note that this may not be the default.","type":"string"}}},"tokenization.AliasPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.AltTimeChecks":{"type":"object","title":"AltTimeChecks defines alternative time-based checks for approval denial.\nIf the transfer time falls within any of the specified offline hours or days, the approval is denied.\nUses UTC timezone for neutral timezone approach.\nofflineHours: ranges of hours (0-23) when transfers should be denied\nofflineDays: ranges of days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied","properties":{"offlineDays":{"description":"Days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"offlineDaysOfMonth":{"description":"Days of month (1-31) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"offlineHours":{"description":"Hours (0-23) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"offlineMonths":{"description":"Months (1-12, where 1=January, 12=December) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"offlineWeeksOfYear":{"description":"Weeks of year (1-52) when transfers should be denied. Uses ISO 8601 week numbering.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"timezoneOffsetMinutes":{"description":"Timezone offset magnitude in minutes from UTC. Default 0 = UTC. Examples: 300 for EST (UTC-5), 330 for IST (UTC+5:30).\nAll time checks are evaluated after applying this offset to the block time.","type":"string"},"timezoneOffsetNegative":{"type":"boolean","title":"If true, the timezone offset is subtracted (west of UTC). If false, it is added (east of UTC).\nExample: EST (UTC-5) = timezoneOffsetMinutes: 300, timezoneOffsetNegative: true"}}},"tokenization.ApprovalAmounts":{"description":"ApprovalAmounts defines approval amounts per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the amounts transferred for the specified token IDs and ownership times \nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallApprovalAmount":{"description":"Overall approval amount.","type":"string"},"perFromAddressApprovalAmount":{"description":"Approval amount per \"from\" address.","type":"string"},"perInitiatedByAddressApprovalAmount":{"description":"Approval amount per \"initiated by\" address.","type":"string"},"perToAddressApprovalAmount":{"description":"Approval amount per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.ResetTimeIntervals"}}},"tokenization.ApprovalChange":{"description":"ApprovalChange represents a change to an approval (created, edited, or deleted).","type":"object","properties":{"action":{"type":"string"},"approvalId":{"type":"string"},"approvalLevel":{"type":"string"},"version":{"type":"string"}}},"tokenization.ApprovalCriteria":{"description":"ApprovalCriteria defines the criteria for approving transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"allowBackedMinting":{"description":"If true, this collection approval allows backed minting operations (CosmosCoinBackedPath).\nWhen false, this approval cannot be used for transfers involving backed minting addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"allowSpecialWrapping":{"description":"If true, this collection approval allows special wrapping operations (CosmosCoinWrapperPath).\nWhen false, this approval cannot be used for transfers involving wrapping addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"overridesFromOutgoingApprovals":{"description":"Overrides the user's outgoing approvals for approval. If true, this collection-level approval\ntakes precedence over any outgoing approvals defined by the sender, allowing the collection to\ncontrol outgoing transfer behavior.","type":"boolean"},"overridesToIncomingApprovals":{"description":"Overrides the user's incoming approvals for approval. If true, this collection-level approval\ntakes precedence over any incoming approvals defined by the recipient, allowing the collection to\ncontrol incoming transfer behavior.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"userApprovalSettings":{"description":"Issuer-imposed constraints on user-level coin transfers. Propagated to user-level approvals\nduring greedy transfer matching (same pattern as userRoyalties). Only applicable on collection-level approvals.\nIf conflicting settings across multiple matched approvals, the transfer is rejected (like royalties).","$ref":"#/definitions/tokenization.UserApprovalSettings"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.VotingChallenge"}}}},"tokenization.ApprovalIdentifierDetails":{"description":"ApprovalIdentifierDetails defines the details to identify a specific approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.ApprovalTracker":{"description":"ApprovalTracker defines the tracker for approvals. This tracks the cumulative number of transfers and associated balances transferred.","type":"object","properties":{"amounts":{"description":"Cumulative balances associated with the transfers that have been processed.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"lastUpdatedAt":{"description":"Last updated at time.","type":"string"},"numTransfers":{"description":"The number of transfers that have been processed.","type":"string"}}},"tokenization.ApprovalUsed":{"description":"ApprovalUsed represents an approval that was consumed during a transfer.","type":"object","properties":{"approvalId":{"type":"string"},"approvalLevel":{"type":"string"},"approverAddress":{"type":"string"},"version":{"type":"string"}}},"tokenization.AutoDeletionOptions":{"description":"AutoDeletionOptions defines the options for auto-deletion of approvals.","type":"object","properties":{"afterOneUse":{"type":"boolean","title":"After one use?"},"afterOverallMaxNumTransfers":{"type":"boolean","title":"After overall max number of uses threshold is met?"},"allowCounterpartyPurge":{"type":"boolean","title":"Allow counterparty to purge this approval if they are the only initiator"},"allowPurgeIfExpired":{"type":"boolean","title":"Allow others to call PurgeApprovals on behalf of this approval owner"}}},"tokenization.Balance":{"description":"Balance represents the balance of a token for a specific user.\nThe user amounts xAmount of a token specified for the time ranges specified.\n\nExample: User A owns x10 of token IDs 1-10 from 1/1/2020 to 1/1/2021.\n\nIf times or tokenIDs have len \u003e 1, then the user owns all token IDs specified for all time ranges specified.","type":"object","properties":{"amount":{"description":"The amount of the token owned by the user.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"The token IDs for which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.CoinTransfer":{"type":"object","properties":{"coins":{"description":"The sdk.Coins to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"overrideFromWithApproverAddress":{"description":"By default, the from address is the initiator of the transaction.\nIf this is set to true, we will override the from address with the approver address.\nNote: This is not applicable for collection approvals (since approverAddress == '').","type":"boolean"},"overrideToWithInitiator":{"description":"By default, the to address is what is specified in the coin transfer.\nIf this is set to true, we will override the to address with the initiator of the transaction.","type":"boolean"},"to":{"description":"The address of the recipient of the transfer.","type":"string"}}},"tokenization.CoinTransferProto":{"description":"CoinTransferProto represents a coin transfer that occurred during a transaction.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"},"from":{"type":"string"},"isProtocolFee":{"type":"boolean"},"to":{"type":"string"}}},"tokenization.CollectionApproval":{"type":"object","title":"CollectionApproval defines the rules for the approval of a transfer on the collection level","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.ApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.CollectionApprovalPermission":{"description":"CollectionApprovalPermission defines what collection approved transfers can be updated vs. are locked.\n\nEach transfer is broken down to a (from, to, initiatedBy, transferTime, tokenId) tuple.\nFor a transfer to match, we need to match ALL of the fields in the combination. \nThese are determined by the fromListId, toListId, initiatedByListId, transferTimes, tokenIds fields.\nAddressLists are used for (from, to, initiatedBy) which are a permanent list of addresses identified by an ID (see AddressLists). \n\npermanentlyPermitted/ForbiddenTimes: when can the manager execute this permission?\n\nEx: Let's say we are updating the transferability for the transfer tuple (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", 10, 1000).\nWe would check to find the FIRST CollectionApprovalPermission that matches this combination.\nIf we find a match, we would check the permitted/forbidden times to see if we can execute this permission (default is ALLOWED).\n\nEx: So if you wanted to freeze the transferability to enforce that token ID 1 will always be transferable, you could set\nthe combination (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", \"All Transfer Times\", 1) to always be forbidden.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.CollectionInvariants":{"description":"CollectionInvariants defines the invariants that apply to a collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.","$ref":"#/definitions/tokenization.CosmosCoinBackedPath"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.CollectionMetadata":{"description":"This message defines the metadata for the collection.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the collection metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the collection metadata.","type":"string"}}},"tokenization.CollectionPermissions":{"description":"CollectionPermissions defines the permissions for the collection (i.e., what the manager can and cannot do).\n\nThere are three types of permissions for a collection: ActionPermission, TokenIdsActionPermission, and CollectionApprovalPermission.\n\nThe permission type allows fine-grained access control for each action.\n- ActionPermission: defines when the manager can perform an action or update a field.\n- TokenIdsActionPermission: defines when the manager can perform an action for specific tokens\n- CollectionApprovalPermission: defines when the manager can update the transferability of the collection and what transfers can be updated vs. locked.\n\nNote there are a few different times here which could get confusing:\n- permanentlyPermitted/ForbiddenTimes - the times that a permission can be performed\n- transferTimes - the times that a transfer occurs\n- ownershipTimes - the times when a token is owned by a user\n\nThe permitted/permanentlyForbiddenTimes are used to determine when a permission can be executed.\nOnce a time is set to be permitted or forbidden, it is PERMANENT and cannot be changed.\nIf a time is not set to be permitted or forbidden, it is considered NEUTRAL and can be updated but is ALLOWED by default.\n\nIMPORTANT: We take first-match only for the permissions. This means that if you forbid time T in array index 0 and permit time T in index 1, \nwe will only check the first permission (forbid time T) and not the second permission (permit time T).","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApprovalPermission"}},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenIdsActionPermission"}},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenIdsActionPermission"}}}},"tokenization.CollectionStats":{"description":"CollectionStats tracks aggregated statistics for a collection.","type":"object","properties":{"balances":{"type":"array","title":"Tracks circulating supply as Balance[] for proper range handling","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"holderCount":{"type":"string"}}},"tokenization.Conversion":{"description":"Conversion defines a bidirectional conversion between a cosmos coin (with denom) and token balances.","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin side of the conversion (amount + denom).","$ref":"#/definitions/tokenization.ConversionSideAWithDenom"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}}}},"tokenization.ConversionSideA":{"description":"ConversionSideA represents the cosmos coin amount side of a conversion without denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"}}},"tokenization.ConversionSideAWithDenom":{"description":"ConversionSideAWithDenom represents the cosmos coin side of a conversion with denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"},"denom":{"description":"The denomination of the cosmos coin.","type":"string"}}},"tokenization.ConversionWithoutDenom":{"description":"ConversionWithoutDenom defines a bidirectional conversion between a cosmos coin amount (without denom) and token balances.\nThe denom is stored at the base level (e.g., in AliasPath or CosmosCoinWrapperPath).","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin amount side of the conversion (amount only, denom stored separately).","$ref":"#/definitions/tokenization.ConversionSideA"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}}}},"tokenization.CosmosCoinBackedPath":{"type":"object","properties":{"address":{"description":"The address associated with this backed path. Used for routing and escrowing IBC tokens.","type":"string"},"conversion":{"description":"The conversion between IBC cosmos coin and token balances.","$ref":"#/definitions/tokenization.Conversion"}}},"tokenization.CosmosCoinBackedPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.Conversion"}}},"tokenization.CosmosCoinWrapperPath":{"type":"object","properties":{"address":{"description":"The BitBadges address associated with this wrapper path. Used for routing and identifying the wrapper.","type":"string"},"allowOverrideWithAnyValidToken":{"description":"If true, allows this wrapper path to be used with any valid token ID in the collection via an {id} placeholder.","type":"boolean"},"conversion":{"description":"The conversion between cosmos coin and token balances.","$ref":"#/definitions/tokenization.ConversionWithoutDenom"},"denom":{"description":"The denomination (denom) to be used for the wrapped coin or the alias denom.","type":"string"},"denomUnits":{"description":"Denomination units for the wrapped coin. Defines how the coin can be displayed with different\ndecimal places and symbols (e.g., base unit, display unit). You can specify which is the default display unit (base level or one of these).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"description":"The symbol for the wrapped coin (e.g., \"BADGE\", \"NFT\"). Used for display purposes. Note that this may not be the default.","type":"string"}}},"tokenization.CosmosCoinWrapperPathAddObject":{"type":"object","properties":{"allowOverrideWithAnyValidToken":{"type":"boolean"},"conversion":{"$ref":"#/definitions/tokenization.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.DenomUnit":{"type":"object","properties":{"decimals":{"description":"The number of decimal places for this unit. Defines the precision of the unit.","type":"string"},"isDefaultDisplay":{"description":"If true, this is the default display unit. Only one unit should be marked as the default display unit.\nThis unit will be used by default when displaying the coin amount. If none are marked default, we use the base level.","type":"boolean"},"metadata":{"description":"The metadata for this denomination unit.","$ref":"#/definitions/tokenization.PathMetadata"},"symbol":{"description":"The symbol for this unit (e.g., \"BADGE\", \"nBADGE\"). Used for display purposes.","type":"string"}}},"tokenization.DynamicStore":{"description":"A DynamicStore is a flexible storage object that can store arbitrary data.\nIt is identified by a unique ID assigned by the blockchain, which is a uint64 that increments.\nDynamic stores are created by users and can only be updated or deleted by their creator.\nThey provide a way to store custom data on-chain with proper access control.","type":"object","properties":{"createdBy":{"description":"The address of the creator of this dynamic store.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"Global kill switch state (defaults to true on creation, can be toggled via UpdateDynamicStore).\nWhen false, all approvals using this store via DynamicStoreChallenge will fail immediately.","type":"boolean"},"storeId":{"description":"The unique identifier for this dynamic store. This is assigned by the blockchain.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.DynamicStoreChallenge":{"description":"DynamicStoreChallenge defines a challenge that requires the initiator to pass a dynamic store check.","type":"object","properties":{"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"storeId":{"description":"The ID of the dynamic store to check.","type":"string"}}},"tokenization.DynamicStoreValue":{"description":"A DynamicStoreValue stores a boolean value for a specific address in a dynamic store.\nThis allows the creator to set true/false values per address that can be checked during approval.","type":"object","properties":{"address":{"description":"The address for which this value is stored.","type":"string"},"storeId":{"description":"The unique identifier for this dynamic store.","type":"string"},"value":{"description":"The boolean value (true/false).","type":"boolean"}}},"tokenization.ETHSignatureChallenge":{"description":"ETHSignatureChallenge defines a rule for the approval in the form of an Ethereum signature challenge.\n\nAn ETH signature challenge is a challenge where the user must provide a valid Ethereum signature for a specific nonce.\nThe signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId) and each signature can only be used once.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: We track the usage of each signature to prevent replay attacks. Each signature can only be used once.\nIf you update the challenge ID, then the used signatures tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this ETH signature challenge for tracking the number of uses per signature.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this ETH signature challenge.","type":"string"},"signer":{"description":"The Ethereum address that must sign the nonce for verification.","type":"string"},"uri":{"description":"The URI associated with this ETH signature challenge, optionally providing metadata about the challenge.","type":"string"}}},"tokenization.ETHSignatureProof":{"description":"ETHSignatureProof represents an Ethereum signature proof for a challenge.","type":"object","properties":{"nonce":{"description":"The nonce that was signed. The signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId).","type":"string"},"signature":{"description":"The Ethereum signature of the nonce.","type":"string"}}},"tokenization.EVMQueryChallenge":{"description":"EVMQueryChallenge defines a rule for approval via read-only EVM contract query.\n\nThe challenge executes a staticcall to the specified contract with the given calldata.\nThe result is compared against the expected result (if provided) or checked for non-zero return.\n\nIMPORTANT: This is read-only and cannot modify state. The query is executed with a gas limit\nto prevent DoS attacks. All results are deterministic since EVM state is consistent within a block.","type":"object","properties":{"calldata":{"type":"string","title":"ABI-encoded function selector + arguments (hex string without 0x prefix)\nExample: \"70a08231000000000000000000000000{address}\" for balanceOf(address)\nCan use placeholders: $initiator, $sender, $recipient (replaced at runtime)"},"comparisonOperator":{"description":"Comparison operator: \"eq\" (equals), \"ne\" (not equals), \"gt\" (greater than), \"gte\", \"lt\", \"lte\"\nOnly \"eq\" and \"ne\" work for non-numeric types. Default is \"eq\".","type":"string"},"contractAddress":{"type":"string","title":"The EVM contract address to query (0x format or bb1 format)"},"customData":{"type":"string","title":"Arbitrary custom data"},"expectedResult":{"description":"Expected return value (hex string without 0x prefix). If empty, any non-error result passes.\nFor boolean checks, use \"0000...0001\" for true.","type":"string"},"gasLimit":{"type":"string","title":"Gas limit for the query (default 100000, max 500000)"},"uri":{"type":"string","title":"The URI associated with this challenge (metadata)"}}},"tokenization.IncomingApprovalCriteria":{"description":"IncomingApprovalCriteria defines the criteria for approving incoming transfers.\nThis is used for user-level incoming approvals and only includes fields relevant to incoming transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.PredeterminedBalances"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No recipient checks are included for incoming approvals since the recipient is the user themselves.","$ref":"#/definitions/tokenization.AddressChecks"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.VotingChallenge"}}}},"tokenization.IncrementedBalances":{"description":"IncrementedBalances represents balances that are incremented by specific amounts, according to the order calculation method.","type":"object","properties":{"allowAmountScaling":{"description":"When true, the actual transfer can be any evenly divisible integer multiple (\u003e=1x) of startBalances.\napprovalCriteria.coinTransfers are scaled by the same multiplier.\nAll other IncrementedBalances fields must be zero/false/nil when this is true.","type":"boolean"},"allowOverrideTimestamp":{"description":"Whether to allow overriding the timestamp for the balances (only applicable with durationFromTimestamp set).","type":"boolean"},"allowOverrideWithAnyValidToken":{"type":"boolean","title":"Allow override of any valid ID"},"durationFromTimestamp":{"description":"The amount of unix milliseconds to approve starting from now. Incompatible with incrementOwnershipTimesBy.","type":"string"},"incrementOwnershipTimesBy":{"description":"The amount by which to increment ownership times. Incompatible with approveStartingFromNowBy.","type":"string"},"incrementTokenIdsBy":{"description":"The amount by which to increment token IDs.","type":"string"},"maxScalingMultiplier":{"description":"Maximum allowed scaling multiplier. Must be \u003e 0 when allowAmountScaling is true.\nThe chain rejects transfers where the computed multiplier exceeds this cap.\nIgnored (set to \"0\") when allowAmountScaling is false.","type":"string"},"recurringOwnershipTimes":{"description":"Recurring ownership times.","$ref":"#/definitions/tokenization.RecurringOwnershipTimes"},"startBalances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}}}},"tokenization.InvariantsAddObject":{"description":"InvariantsAddObject is used for adding invariants without specifying addresses.\nAddresses are generated by the keeper and stored in the collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.\nAddress will be generated by the keeper.","$ref":"#/definitions/tokenization.CosmosCoinBackedPathAddObject"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.ManualBalances":{"description":"ManualBalances represents a list of manual balances entered for the predetermined balances criteria. Order is calculated according to the calculation method set.","type":"object","properties":{"balances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}}}},"tokenization.MaxNumTransfers":{"description":"MaxNumTransfers defines the maximum number of transfers per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the number of transfers for the specified token IDs and ownership times\nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallMaxNumTransfers":{"description":"Overall maximum number of transfers.","type":"string"},"perFromAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"from\" address.","type":"string"},"perInitiatedByAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"initiated by\" address.","type":"string"},"perToAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.ResetTimeIntervals"}}},"tokenization.MerkleChallenge":{"description":"Challenges define a rule for the approval in the form of a Merkle challenge.\n\nA Merkle challenge is a challenge where the user must provide a Merkle proof to a Merkle tree. If they provide a valid proof,\nthen the challenge is met. All challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Merkle challenges currently are limited to SHA256 hashes. See documentation for MerkleChallenge for more details and tutorials.\n\nIMPORTANT: We track the number of uses per leaf according to the challengeTrackerId specified by the parent approval of this challenge.\nIf you update the challenge ID, then the used leaves tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this Merkle challenge for tracking the number of uses per leaf.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this Merkle challenge.","type":"string"},"expectedProofLength":{"description":"The expected length of the Merkle path for verification. Used to prevent Merkle path truncation attacks.","type":"string"},"leafSigner":{"description":"Ethereum address that must sign the leaf. Used to protect against man-in-the-middle attacks.\nSignature scheme: sign(leaf + \"-\" + creatorAddress), verified using elliptic curve signature verification.","type":"string"},"maxUsesPerLeaf":{"description":"The maximum number of times each leaf can be used. Must be 1 if useCreatorAddressAsLeaf is false to prevent replay attacks.","type":"string"},"root":{"description":"The root hash of the Merkle tree to which the Merkle path must lead for verification.","type":"string"},"uri":{"description":"The URI associated with this Merkle challenge, optionally providing metadata about the challenge.","type":"string"},"useCreatorAddressAsLeaf":{"description":"If true, we will override the user's leaf for their proof with their creator address. Used for whitelist trees where all leaves are valid BitBadges addresses.","type":"boolean"}}},"tokenization.MerklePathItem":{"description":"MerklePathItem represents an item in a Merkle path.","type":"object","properties":{"aunt":{"description":"The hash of the sibling node (aunt) in the Merkle path.","type":"string"},"onRight":{"description":"Indicates whether the aunt node is on the right side of the path.","type":"boolean"}}},"tokenization.MerkleProof":{"description":"MerkleProof represents a Merkle proof, consistent with Tendermint/Crypto Merkle tree.","type":"object","properties":{"aunts":{"description":"List of Merkle path items (aunts) that make up the proof.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerklePathItem"}},"leaf":{"description":"The hash of the leaf node for which the proof is generated.","type":"string"},"leafSignature":{"description":"The signature of the leaf node tying the address to the leaf node.","type":"string"}}},"tokenization.MsgCastVote":{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","type":"object","properties":{"approvalId":{"description":"The approval ID.","type":"string"},"approvalLevel":{"description":"The approval level (\"collection\", \"incoming\", or \"outgoing\").","type":"string"},"approverAddress":{"description":"The approver address (empty string for collection-level approvals).","type":"string"},"collectionId":{"description":"The collection ID for the voting challenge.","type":"string"},"creator":{"description":"The address of the voter casting the vote.","type":"string"},"proposalId":{"description":"The proposal ID (challenge ID) from the VotingChallenge.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.MsgCastVoteResponse":{"type":"object"},"tokenization.MsgCreateAddressLists":{"description":"MsgCreateAddressLists is used to create address lists.","type":"object","properties":{"addressLists":{"description":"Address lists to create. The createdBy field will be automatically set to the creator address.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AddressListInput"}},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgCreateAddressListsResponse":{"description":"MsgCreateAddressListsResponse is the response to MsgCreateAddressLists.","type":"object"},"tokenization.MsgCreateCollection":{"description":"MsgCreateCollection is used to create a new collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AliasPathAddObject"}},"collectionApprovals":{"description":"Collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionMetadata":{"description":"Collection metadata.","$ref":"#/definitions/tokenization.CollectionMetadata"},"collectionPermissions":{"description":"Collection permissions.","$ref":"#/definitions/tokenization.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.InvariantsAddObject"},"isArchived":{"description":"isArchived flag.","type":"boolean"},"manager":{"description":"Manager address.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"Standards entries.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"Token metadata entries.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.MsgCreateCollectionResponse":{"description":"MsgCreateCollectionResponse is the response to MsgCreateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgCreateDynamicStore":{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.MsgCreateDynamicStoreResponse":{"description":"MsgCreateDynamicStoreResponse is the response to MsgCreateDynamicStore.","type":"object","properties":{"reviewItems":{"type":"array","items":{"type":"string"}},"storeId":{"description":"ID of the dynamic store.","type":"string"}}},"tokenization.MsgDeleteCollection":{"description":"MsgDeleteCollection is used to delete a collection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgDeleteCollectionResponse":{"description":"MsgDeleteCollectionResponse is the response to MsgDeleteCollection.","type":"object"},"tokenization.MsgDeleteDynamicStore":{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store to delete.","type":"string"}}},"tokenization.MsgDeleteDynamicStoreResponse":{"description":"MsgDeleteDynamicStoreResponse is the response to MsgDeleteDynamicStore.","type":"object"},"tokenization.MsgDeleteIncomingApproval":{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgDeleteIncomingApprovalResponse":{"description":"MsgDeleteIncomingApprovalResponse is the response to MsgDeleteIncomingApproval.","type":"object","properties":{"found":{"type":"boolean"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.MsgDeleteOutgoingApproval":{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgDeleteOutgoingApprovalResponse":{"description":"MsgDeleteOutgoingApprovalResponse is the response to MsgDeleteOutgoingApproval.","type":"object","properties":{"found":{"type":"boolean"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.MsgPurgeApprovals":{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","type":"object","properties":{"approvalsToPurge":{"description":"Specific approvals to purge. If empty, purges all applicable approvals based on other flags.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalIdentifierDetails"}},"approverAddress":{"description":"Address of the user whose approvals to purge. If empty, defaults to creator.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"purgeCounterpartyApprovals":{"description":"Whether to purge counterparty approvals (approvals where the creator is the only initiator).","type":"boolean"},"purgeExpired":{"description":"Whether to purge expired approvals (approvals with no future valid transfer times).","type":"boolean"}}},"tokenization.MsgPurgeApprovalsResponse":{"description":"MsgPurgeApprovalsResponse is the response to MsgPurgeApprovals.","type":"object","properties":{"numPurged":{"description":"Number of approvals purged.","type":"string"},"purgedApprovalIds":{"type":"array","items":{"type":"string"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgSetCollectionApprovals":{"type":"object","title":"MsgSetCollectionApprovals sets the collection approvals and canUpdateCollectionApprovals permission","properties":{"canUpdateCollectionApprovals":{"type":"array","title":"Permission to update collection approvals","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApprovalPermission"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgSetCollectionApprovalsResponse":{"description":"MsgSetCollectionApprovalsResponse is the response to MsgSetCollectionApprovals.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgSetCollectionMetadata":{"type":"object","title":"MsgSetCollectionMetadata sets the collection metadata and canUpdateCollectionMetadata permission","properties":{"canUpdateCollectionMetadata":{"type":"array","title":"Permission to update collection metadata","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.CollectionMetadata"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgSetCollectionMetadataResponse":{"description":"MsgSetCollectionMetadataResponse is the response to MsgSetCollectionMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetCustomData":{"type":"object","title":"MsgSetCustomData sets the custom data and canUpdateCustomData permission","properties":{"canUpdateCustomData":{"type":"array","title":"Permission to update custom data","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"}}},"tokenization.MsgSetCustomDataResponse":{"description":"MsgSetCustomDataResponse is the response to MsgSetCustomData.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetDynamicStoreValue":{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","type":"object","properties":{"address":{"description":"The address for which to set the value.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store.","type":"string"},"value":{"description":"The boolean value to set (true/false).","type":"boolean"}}},"tokenization.MsgSetDynamicStoreValueResponse":{"description":"MsgSetDynamicStoreValueResponse is the response to MsgSetDynamicStoreValue.","type":"object","properties":{"previousValue":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgSetIncomingApproval":{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","type":"object","properties":{"approval":{"description":"The incoming approval to set.","$ref":"#/definitions/tokenization.UserIncomingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgSetIncomingApprovalResponse":{"description":"MsgSetIncomingApprovalResponse is the response to MsgSetIncomingApproval.","type":"object","properties":{"action":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.MsgSetIsArchived":{"type":"object","title":"MsgSetIsArchived sets the isArchived and canArchiveCollection permission","properties":{"canArchiveCollection":{"type":"array","title":"Permission to archive collection","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"isArchived":{"description":"New isArchived to set.","type":"boolean"}}},"tokenization.MsgSetIsArchivedResponse":{"description":"MsgSetIsArchivedResponse is the response to MsgSetIsArchived.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetManager":{"type":"object","title":"MsgSetManager sets the manager and canUpdateManager permission","properties":{"canUpdateManager":{"type":"array","title":"Permission to update manager","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"manager":{"description":"New manager to set.","type":"string"}}},"tokenization.MsgSetManagerResponse":{"description":"MsgSetManagerResponse is the response to MsgSetManager.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetOutgoingApproval":{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","type":"object","properties":{"approval":{"description":"The outgoing approval to set.","$ref":"#/definitions/tokenization.UserOutgoingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.MsgSetOutgoingApprovalResponse":{"description":"MsgSetOutgoingApprovalResponse is the response to MsgSetOutgoingApproval.","type":"object","properties":{"action":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.MsgSetReservedProtocolAddress":{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","type":"object","properties":{"address":{"description":"Address to set or unset as reserved protocol address.","type":"string"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"isReservedProtocol":{"description":"Whether the address should be a reserved protocol address (true) or not (false).","type":"boolean"}}},"tokenization.MsgSetReservedProtocolAddressResponse":{"description":"MsgSetReservedProtocolAddressResponse is the response to MsgSetReservedProtocolAddress.","type":"object"},"tokenization.MsgSetStandards":{"type":"object","title":"MsgSetStandards sets the standards and canUpdateStandards permission","properties":{"canUpdateStandards":{"type":"array","title":"Permission to update standards","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}}}},"tokenization.MsgSetStandardsResponse":{"description":"MsgSetStandardsResponse is the response to MsgSetStandards.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetTokenMetadata":{"type":"object","title":"MsgSetTokenMetadata sets the token metadata and canUpdateTokenMetadata permission","properties":{"canUpdateTokenMetadata":{"type":"array","title":"Permission to update token metadata","items":{"type":"object","$ref":"#/definitions/tokenization.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}}}},"tokenization.MsgSetTokenMetadataResponse":{"description":"MsgSetTokenMetadataResponse is the response to MsgSetTokenMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgSetValidTokenIds":{"type":"object","title":"MsgSetValidTokenIds sets the validTokenIds and canUpdateValidTokenIds permission","properties":{"canUpdateValidTokenIds":{"type":"array","title":"Permission to update valid token IDs","items":{"type":"object","$ref":"#/definitions/tokenization.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.MsgSetValidTokenIdsResponse":{"description":"MsgSetValidTokenIdsResponse is the response to MsgSetValidTokenIds.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.MsgTransferTokens":{"description":"MsgTransferTokens is used to transfer tokens.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"transfers":{"description":"Transfers to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Transfer"}}}},"tokenization.MsgTransferTokensResponse":{"description":"MsgTransferTokensResponse is the response to MsgTransferTokens.","type":"object","properties":{"approvalsUsed":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalUsed"}},"balancesTransferred":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"coinTransfers":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CoinTransferProto"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgUniversalUpdateCollection":{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.MsgUniversalUpdateCollectionResponse":{"description":"MsgUniversalUpdateCollectionResponse is the response to MsgUniversalUpdateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgUpdateCollection":{"description":"MsgUpdateCollection is used to update a collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.MsgUpdateCollectionResponse":{"description":"MsgUpdateCollectionResponse is the response to MsgUpdateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MsgUpdateDynamicStore":{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The new default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"The global kill switch state (true = enabled, false = disabled/halted).\nCallers should query the current value first if they want to keep it unchanged.","type":"boolean"},"storeId":{"description":"ID of the dynamic store to update.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.MsgUpdateDynamicStoreResponse":{"description":"MsgUpdateDynamicStoreResponse is the response to MsgUpdateDynamicStore.","type":"object"},"tokenization.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tokenization.Params"}}},"tokenization.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"tokenization.MsgUpdateUserApprovals":{"description":"MsgUpdateUserApprovals is used to update user approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Auto-approve setting for all incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Auto-approve setting for self-initiated incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Auto-approve setting for self-initiated outgoing transfers.","type":"boolean"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"incomingApprovals":{"description":"New incoming approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserIncomingApproval"}},"outgoingApprovals":{"description":"New outgoing approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserOutgoingApproval"}},"updateAutoApproveAllIncomingTransfers":{"description":"Indicates if auto-approve settings for all incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Indicates if auto-approve settings for self-initiated incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Indicates if auto-approve settings for self-initiated outgoing transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIncomingApprovals":{"description":"Indicates if incoming approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateOutgoingApprovals":{"description":"Indicates if outgoing approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateUserPermissions":{"description":"Indicates if user permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"userPermissions":{"description":"New user permissions to set.","$ref":"#/definitions/tokenization.UserPermissions"}}},"tokenization.MsgUpdateUserApprovalsResponse":{"description":"MsgUpdateUserApprovalsResponse is the response to MsgUpdateUserApprovals.","type":"object","properties":{"incomingChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"outgoingChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalChange"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.MustOwnTokens":{"description":"MustOwnTokens represents a condition where a user must own specific tokens\nto be approved to transfer.\n\n- collectionId: The ID of the collection for the tokens that must be owned\n- amountRange: The range of amounts the user must own (min to max)\n- ownershipTimes: The time ranges during which the user must own the tokens.\n- tokenIds: The token IDs the user must own.\n- overrideWithCurrentTime: If true, auto override ownershipTimes with the current time.\n- mustSatisfyForAllAssets: If true, the user must own all specified tokens; otherwise, owning any one for \u003e= 1 millisecond is sufficient.","type":"object","properties":{"amountRange":{"description":"The range of amounts the user must own (min to max).","$ref":"#/definitions/tokenization.UintRange"},"collectionId":{"description":"The ID of the collection.","type":"string"},"mustSatisfyForAllAssets":{"description":"If true, the user must meet ownership requirements for all specified tokens; else, must meet requirements for any single token.","type":"boolean"},"overrideWithCurrentTime":{"description":"If true, override ownershipTimes with the current time.","type":"boolean"},"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user must own the tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"The token IDs the user must own.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.OutgoingApprovalCriteria":{"description":"OutgoingApprovalCriteria defines the criteria for approving outgoing transfers.\nThis is used for user-level outgoing approvals and only includes fields relevant to outgoing transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No sender checks are included for outgoing approvals since the sender is the user themselves.","$ref":"#/definitions/tokenization.AddressChecks"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.VotingChallenge"}}}},"tokenization.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"affiliate_percentage":{"type":"string","title":"affiliate_percentage defines the percentage of the transfer amount that goes to the affiliate"},"allowed_denoms":{"type":"array","title":"allowed_denoms defines the list of denoms that are allowed to be used in coin_transfers","items":{"type":"string"}}}},"tokenization.PathMetadata":{"description":"This message defines the metadata for paths (alias paths and cosmos coin wrapper paths).\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the path metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the path metadata.","type":"string"}}},"tokenization.PrecalculateBalancesFromApprovalDetails":{"description":"PrecalculateBalancesFromApprovalDetails defines the details for precalculating balances from an approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"precalculationOptions":{"description":"The options for precalculating the balances.","$ref":"#/definitions/tokenization.PrecalculationOptions"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.PrecalculationOptions":{"description":"PrecalculationOptions defines the options for precalculating the balances.","type":"object","properties":{"overrideTimestamp":{"description":"The timestamp to override with when calculating the balances.","type":"string"},"scalingMultiplier":{"description":"When \u003e 0 and allowAmountScaling is true on the approval, all precalculated balance amounts\nare multiplied by this value. Must be \u003c= maxScalingMultiplier. 0 means no scaling (returns 1x base).","type":"string"},"tokenIdsOverride":{"description":"The IDs to override for the transfer. Only applicable if using this option in precalculation.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.PredeterminedBalances":{"description":"PredeterminedBalances represents balances with predetermined order calculation.","type":"object","properties":{"incrementedBalances":{"description":"Balances that have a starting amount and increment. If this is nil, then we use the manual balances.","$ref":"#/definitions/tokenization.IncrementedBalances"},"manualBalances":{"description":"Manual balances that can be entered. If this is nil, then we use the incremented balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ManualBalances"}},"orderCalculationMethod":{"description":"The method to calculate the order of predetermined balances.","$ref":"#/definitions/tokenization.PredeterminedOrderCalculationMethod"}}},"tokenization.PredeterminedOrderCalculationMethod":{"description":"PredeterminedOrderCalculationMethod defines the method to calculate predetermined balances order.","type":"object","properties":{"challengeTrackerId":{"description":"If useMerkleChallengeLeafIndex is set, then this is the ID of the challenge tracker associated with this calculation method.","type":"string"},"useMerkleChallengeLeafIndex":{"description":"Use the Merkle challenge leaf index to calculate the order. Ex: Transfer that uses leaf index 0 gets the first balance, transfer that uses leaf index 1 gets the second balance, etc.","type":"boolean"},"useOverallNumTransfers":{"description":"Use the overall number of transfers to calculate the order. Ex: First transfer gets the first balance, second transfer gets the second balance, etc.","type":"boolean"},"usePerFromAddressNumTransfers":{"description":"Use the number of transfers per \"from\" address to calculate the order. Ex: First transfer from address A gets the first balance, second transfer from address A gets the second balance, etc.","type":"boolean"},"usePerInitiatedByAddressNumTransfers":{"description":"Use the number of transfers per \"initiated by\" address to calculate the order. Ex: First transfer initiated by address A gets the first balance, second transfer initiated by address A gets the second balance, etc.","type":"boolean"},"usePerToAddressNumTransfers":{"description":"Use the number of transfers per \"to\" address to calculate the order. Ex: First transfer to address A gets the first balance, second transfer to address A gets the second balance, etc.","type":"boolean"}}},"tokenization.QueryGetAddressListResponse":{"type":"object","properties":{"list":{"$ref":"#/definitions/tokenization.AddressList"}}},"tokenization.QueryGetAllReservedProtocolAddressesResponse":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}}}},"tokenization.QueryGetApprovalTrackerResponse":{"type":"object","properties":{"tracker":{"$ref":"#/definitions/tokenization.ApprovalTracker"}}},"tokenization.QueryGetBalanceForTokenResponse":{"type":"object","properties":{"balance":{"type":"string"}}},"tokenization.QueryGetBalanceResponse":{"type":"object","properties":{"balance":{"$ref":"#/definitions/tokenization.UserBalanceStore"}}},"tokenization.QueryGetChallengeTrackerResponse":{"type":"object","properties":{"numUsed":{"type":"string"}}},"tokenization.QueryGetCollectionResponse":{"type":"object","properties":{"collection":{"$ref":"#/definitions/tokenization.TokenCollection"}}},"tokenization.QueryGetCollectionStatsResponse":{"type":"object","properties":{"stats":{"$ref":"#/definitions/tokenization.CollectionStats"}}},"tokenization.QueryGetDynamicStoreResponse":{"type":"object","properties":{"store":{"$ref":"#/definitions/tokenization.DynamicStore"}}},"tokenization.QueryGetDynamicStoreValueResponse":{"type":"object","properties":{"value":{"$ref":"#/definitions/tokenization.DynamicStoreValue"}}},"tokenization.QueryGetETHSignatureTrackerResponse":{"type":"object","properties":{"numUsed":{"type":"string"}}},"tokenization.QueryGetVoteResponse":{"type":"object","properties":{"vote":{"$ref":"#/definitions/tokenization.VoteProof"}}},"tokenization.QueryGetVotesResponse":{"type":"object","properties":{"votes":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.VoteProof"}}}},"tokenization.QueryGetWrappableBalancesResponse":{"type":"object","properties":{"amount":{"type":"string"}}},"tokenization.QueryIsAddressReservedProtocolResponse":{"type":"object","properties":{"isReservedProtocol":{"type":"boolean"}}},"tokenization.QueryParamsResponse":{"description":"QueryParamsResponse is response type for the Query/Params RPC method.","type":"object","properties":{"params":{"description":"params holds all the parameters of this module.","$ref":"#/definitions/tokenization.Params"}}},"tokenization.RecurringOwnershipTimes":{"description":"RecurringOwnershipTimes represents a list of recurring ownership times.","type":"object","properties":{"chargePeriodLength":{"type":"string","title":"Grace period length where you can charge the next interval (nextStartTime - chargePeriodLength) until (nextStartTime) = charge period"},"intervalLength":{"description":"The interval length in unix milliseconds.","type":"string"},"startTime":{"description":"The original start time of the first interval.","type":"string"}}},"tokenization.ResetTimeIntervals":{"description":"Time intervals to reset the trackers at.","type":"object","properties":{"intervalLength":{"description":"Interval length in unix milliseconds.","type":"string"},"startTime":{"description":"Original start time of the first interval.","type":"string"}}},"tokenization.TokenCollection":{"description":"A TokenCollection is the top-level object for a collection of tokens. \nIt defines everything about the collection, such as the manager, metadata, etc.\n\nAll collections are identified by a collectionId assigned by the blockchain, which is a uint64 that increments (i.e. the first collection has ID 1).\n\nAll collections can have a manager who is responsible for managing the collection and can be granted certain admin\npermissions, such as the ability to mint new tokens.\n\nCollections may have different balance types: standard vs. off-chain - indexed vs. inherited.vs off-chain - non-indexed vs non-public.\n\nSee documentation for more details.","type":"object","properties":{"aliasPaths":{"description":"The alias (non-wrapping) paths for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.AliasPath"}},"collectionApprovals":{"description":"Transferability of the collection for collections with standard balances, subject to changes over time.\nOverrides user approvals for a transfer if specified.\nTransfer must satisfy both user and collection-level approvals.\nOnly applicable to on-chain balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CollectionApproval"}},"collectionId":{"description":"The unique identifier for this collection. This is assigned by the blockchain. First collection has ID 1.","type":"string"},"collectionMetadata":{"description":"The metadata for the collection itself.","$ref":"#/definitions/tokenization.CollectionMetadata"},"collectionPermissions":{"description":"Permissions that define what the manager of the collection can do or not do.","$ref":"#/definitions/tokenization.CollectionPermissions"},"cosmosCoinWrapperPaths":{"description":"The IBC wrapper (sdk.coin) paths for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.CosmosCoinWrapperPath"}},"createdBy":{"description":"The user or entity who created the collection.","type":"string"},"customData":{"description":"An arbitrary field that can store any data.","type":"string"},"defaultBalances":{"description":"The default store of a balance / approvals for a user, upon genesis.","$ref":"#/definitions/tokenization.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.","$ref":"#/definitions/tokenization.CollectionInvariants"},"isArchived":{"description":"Whether the collection is archived or not.\nWhen archived, it becomes read-only, and no transactions can be processed until it is unarchived.","type":"boolean"},"manager":{"description":"The address of the manager of this collection.","type":"string"},"mintEscrowAddress":{"description":"The generated address of the collection. Also used to escrow Mint balances.","type":"string"},"standards":{"description":"Standards that define how to interpret the fields of the collection.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"The metadata for each token in the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.TokenMetadata"}},"validTokenIds":{"description":"The valid token IDs for this collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.TokenIdsActionPermission":{"description":"TokenIdsActionPermission defines the permissions for performing an action for specific tokens.\nCurrently, this is only used for creating new tokens.\n\nEx: If you want to lock the ability to create new tokens for tokenIds [1,2] at ownershipTimes 1/1/2020 - 1/1/2021, \nyou could set the combination (tokenIds: [1,2], ownershipTimes: [1/1/2020 - 1/1/2021]) to always be forbidden.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.TokenMetadata":{"description":"This message defines the metadata for specific token IDs.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the token metadata.","type":"string"},"tokenIds":{"description":"The token IDs to which this metadata applies.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the token metadata.","type":"string"}}},"tokenization.Transfer":{"description":"Transfer defines the details of a transfer of tokens.","type":"object","properties":{"balances":{"description":"The balances to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"ethSignatureProofs":{"description":"The ETH signature proofs / solutions for all ETH signature challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ETHSignatureProof"}},"from":{"description":"The address of the sender of the transfer.","type":"string"},"memo":{"description":"The memo for the transfer.","type":"string"},"merkleProofs":{"description":"The Merkle proofs / solutions for all Merkle challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.MerkleProof"}},"onlyCheckPrioritizedCollectionApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedIncomingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedOutgoingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"precalculateBalancesFromApproval":{"description":"If defined, we will use the predeterminedBalances from the specified approval to calculate the balances at execution time.\nWe will override the balances field with the precalculated balances. Only applicable for approvals with predeterminedBalances set.","$ref":"#/definitions/tokenization.PrecalculateBalancesFromApprovalDetails"},"prioritizedApprovals":{"description":"The prioritized approvals for the transfer. By default, we scan linearly through the approvals and use the first match.\nThis field can be used to prioritize specific approvals and scan through them first.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ApprovalIdentifierDetails"}},"toAddresses":{"description":"The addresses of the recipients of the transfer.","type":"array","items":{"type":"string"}}}},"tokenization.UintRange":{"description":"The UintRange is a range of IDs from some start to some end (inclusive).\nuintRanges are one of the core types used.\n\nThey are used for everything from token IDs to time ranges to min/max balance amounts.\n\nSee the BitBadges documentation for more information.","type":"object","properties":{"end":{"description":"The ending value of the range (inclusive).","type":"string"},"start":{"description":"The starting value of the range (inclusive).","type":"string"}}},"tokenization.UserApprovalSettings":{"description":"UserApprovalSettings defines issuer-imposed constraints on user-level approvals.\nSet on collection-level ApprovalCriteria and propagated to user-level approvals\nduring greedy transfer matching. Each balance slice carries its own settings.","type":"object","properties":{"allowedDenoms":{"description":"Restricts which denoms user-level coinTransfers can reference (beyond params-level AllowedDenoms).\nIf empty, all params-allowed denoms are permitted.","type":"array","items":{"type":"string"}},"disableUserCoinTransfers":{"description":"If true, user-level approvals cannot trigger coinTransfers at all for transfers matched by this collection approval.","type":"boolean"},"userRoyalties":{"description":"User-level royalties to enforce for transfers matched by this collection approval.","$ref":"#/definitions/tokenization.UserRoyalties"}}},"tokenization.UserBalanceStore":{"description":"UserBalanceStore is the store for the user balances for a collection.\n\nIt consists of a list of balances, a list of approved outgoing transfers, and a list of approved incoming transfers,\nas well as the permissions for updating the approved incoming/outgoing transfers.\n\nUpon initialization, all fields (minus the balances) are set to the defaults specified by the collection.\n\nThe outgoing transfers can be used to allow / disallow transfers which are sent from this user.\nIf a transfer has no match, then it is disallowed by default, unless from == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedOutgoingTransfers is set to true.\n\nThe incoming transfers can be used to allow / disallow transfers which are sent to this user.\nIf a transfer has no match, then it is disallowed by default, unless to == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedIncomingTransfers is set to true.\n\nNote that the user approved transfers are only checked if the collection approved transfers do not specify to override\nthe user approved transfers. \n\nThe permissions are used to determine whether the user can update the approved incoming/outgoing transfers and auto approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Whether to auto-approve all incoming transfers by default. \nThis is just shorthand for adding an accept everything incoming approval\nwith no restrictions.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Whether to auto-approve self-initiated incoming transfers for this user (i.e. to == initiatedBy).","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Whether to auto-approve self-initiated outgoing transfers for this user (i.e. from == initiatedBy).","type":"boolean"},"balances":{"description":"The list of balances associated with this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Balance"}},"incomingApprovals":{"description":"The list of approved incoming transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserIncomingApproval"}},"outgoingApprovals":{"description":"The list of approved outgoing transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserOutgoingApproval"}},"userPermissions":{"description":"The permissions for this user's actions and transfers.","$ref":"#/definitions/tokenization.UserPermissions"}}},"tokenization.UserIncomingApproval":{"description":"UserIncomingApproval defines the rules for the approval of an incoming transfer to a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.IncomingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.UserIncomingApprovalPermission":{"description":"UserIncomingApprovalPermission defines the permissions for updating the user's approved incoming transfers.\n\nSee CollectionApprovalPermission for more details. This is equivalent without the toListId field because that is always the user.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.UserOutgoingApproval":{"description":"UserOutgoingApproval defines the rules for the approval of an outgoing transfer from a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.OutgoingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.UserOutgoingApprovalPermission":{"description":"UserOutgoingApprovalPermission defines the permissions for updating the user's approved outgoing transfers.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UintRange"}}}},"tokenization.UserPermissions":{"description":"UserPermissions defines the permissions for the user about their approvals (i.e., what the user can and cannot do).\n\nSee CollectionPermissions for more details on the different types of permissions.\n\ncanUpdateOutgoingApprovals and canUpdateOutgoingApprovals follow the same as the canUpdateCollectionApprovals in CollectionPermissions,\nbut certain fields are removed because they are not relevant to the user.","type":"object","properties":{"canUpdateAutoApproveAllIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for all incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated outgoing transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.ActionPermission"}},"canUpdateIncomingApprovals":{"description":"Permissions related to updating the user's approved incoming transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserIncomingApprovalPermission"}},"canUpdateOutgoingApprovals":{"description":"Permissions related to updating the user's approved outgoing transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.UserOutgoingApprovalPermission"}}}},"tokenization.UserRoyalties":{"description":"UserRoyalties defines the royalties for a user.","type":"object","properties":{"payoutAddress":{"description":"Payout address for the royalties.","type":"string"},"percentage":{"description":"Percentage of the transfer amount to apply as royalties. 1 to 10000 represents basis points.","type":"string"}}},"tokenization.VoteProof":{"description":"VoteProof represents a vote cast for a voting challenge.","type":"object","properties":{"proposalId":{"description":"The proposal ID this vote is for.","type":"string"},"votedAt":{"description":"Timestamp (unix ms) when this vote was cast. Set automatically by the chain.","type":"string"},"voter":{"description":"The address of the voter casting the vote.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.Voter":{"description":"Voter defines a voter with their address and weight.","type":"object","properties":{"address":{"description":"The address of the voter.","type":"string"},"weight":{"description":"The weight of this voter's vote.","type":"string"}}},"tokenization.VotingChallenge":{"description":"VotingChallenge defines a rule for approval in the form of a voting/multi-sig challenge.\nRequires a weighted quorum threshold to be met through votes from specified voters.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Votes are stored separately and can be updated. The threshold is calculated as a percentage\nof total possible weight (all voters), not just voted weight. If you update the proposal ID, then the\nvote tracker will reset and start a new tally. We recommend using a unique proposal ID for each challenge\nto prevent overlap and unexpected behavior.","type":"object","properties":{"customData":{"description":"Arbitrary custom data associated with this voting challenge.","type":"string"},"delayAfterQuorum":{"description":"Mandatory delay in milliseconds after quorum is reached before the transfer can execute.\nIf set, the transfer will fail until: now \u003e= quorumReachedTimestamp + delayAfterQuorum.\nDuring the delay, signers can remove their votes to cancel (quorum drops = delay resets).","type":"string"},"proposalId":{"type":"string","title":"The ID of this voting challenge for tracking votes (scoped like challengeTrackerId).\nFormat: collectionId-approverAddress-approvalLevel-approvalId-challengeId"},"quorumThreshold":{"description":"The quorum threshold as a percentage (0-100) of total possible weight that must vote \"yes\".\nExample: 50 means 50% of total voter weight must vote yes for approval.","type":"string"},"resetAfterExecution":{"description":"If true, all votes for this challenge are cleared after a successful transfer execution.\nThis makes the challenge reusable (e.g., for vault withdrawals that need fresh approval each time).","type":"boolean"},"uri":{"description":"The URI associated with this voting challenge.","type":"string"},"voters":{"description":"List of voters with their weights. Each voter can cast a weighted vote.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.Voter"}}}},"tokenization.v27.ActionPermission":{"description":"ActionPermission defines the permissions for performing an action.\n\nThis is simple and straightforward as the only thing we need to check is the permitted/forbidden times.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.AddressChecks":{"type":"object","title":"AddressChecks defines checks for address types (EVM contract, liquidity pool, etc.)","properties":{"mustBeEvmContract":{"description":"Require the address to be an EVM contract (has code).","type":"boolean"},"mustBeLiquidityPool":{"description":"Require the address to be a liquidity pool.","type":"boolean"},"mustNotBeEvmContract":{"description":"Require the address to not be an EVM contract (no code).","type":"boolean"},"mustNotBeLiquidityPool":{"description":"Require the address to not be a liquidity pool.","type":"boolean"}}},"tokenization.v27.AddressListInput":{"description":"AddressListInput is used for creating address lists via MsgCreateAddressLists.\nIt contains all fields from AddressList except createdBy, which is automatically set from the message creator.","type":"object","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.v27.AliasPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v27.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.v27.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v27.AltTimeChecks":{"type":"object","title":"AltTimeChecks defines alternative time-based checks for approval denial.\nIf the transfer time falls within any of the specified offline hours or days, the approval is denied.\nUses UTC timezone for neutral timezone approach.\nofflineHours: ranges of hours (0-23) when transfers should be denied\nofflineDays: ranges of days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied","properties":{"offlineDays":{"description":"Days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied. Uses UTC timezone.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"offlineHours":{"description":"Hours (0-23) when transfers should be denied. Uses UTC timezone.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.ApprovalAmounts":{"description":"ApprovalAmounts defines approval amounts per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the amounts transferred for the specified token IDs and ownership times \nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallApprovalAmount":{"description":"Overall approval amount.","type":"string"},"perFromAddressApprovalAmount":{"description":"Approval amount per \"from\" address.","type":"string"},"perInitiatedByAddressApprovalAmount":{"description":"Approval amount per \"initiated by\" address.","type":"string"},"perToAddressApprovalAmount":{"description":"Approval amount per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v27.ResetTimeIntervals"}}},"tokenization.v27.ApprovalCriteria":{"description":"ApprovalCriteria defines the criteria for approving transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"allowBackedMinting":{"description":"If true, this collection approval allows backed minting operations (CosmosCoinBackedPath).\nWhen false, this approval cannot be used for transfers involving backed minting addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"allowSpecialWrapping":{"description":"If true, this collection approval allows special wrapping operations (CosmosCoinWrapperPath).\nWhen false, this approval cannot be used for transfers involving wrapping addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v27.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v27.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v27.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v27.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"overridesFromOutgoingApprovals":{"description":"Overrides the user's outgoing approvals for approval. If true, this collection-level approval\ntakes precedence over any outgoing approvals defined by the sender, allowing the collection to\ncontrol outgoing transfer behavior.","type":"boolean"},"overridesToIncomingApprovals":{"description":"Overrides the user's incoming approvals for approval. If true, this collection-level approval\ntakes precedence over any incoming approvals defined by the recipient, allowing the collection to\ncontrol incoming transfer behavior.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v27.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"userRoyalties":{"description":"User level royalties to apply to the transfer. Defines the percentage and payout address for\nroyalties that should be collected when this approval is used for a transfer.","$ref":"#/definitions/tokenization.v27.UserRoyalties"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.VotingChallenge"}}}},"tokenization.v27.ApprovalIdentifierDetails":{"description":"ApprovalIdentifierDetails defines the details to identify a specific approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v27.AutoDeletionOptions":{"description":"AutoDeletionOptions defines the options for auto-deletion of approvals.","type":"object","properties":{"afterOneUse":{"type":"boolean","title":"After one use?"},"afterOverallMaxNumTransfers":{"type":"boolean","title":"After overall max number of uses threshold is met?"},"allowCounterpartyPurge":{"type":"boolean","title":"Allow counterparty to purge this approval if they are the only initiator"},"allowPurgeIfExpired":{"type":"boolean","title":"Allow others to call PurgeApprovals on behalf of this approval owner"}}},"tokenization.v27.Balance":{"description":"Balance represents the balance of a token for a specific user.\nThe user amounts xAmount of a token specified for the time ranges specified.\n\nExample: User A owns x10 of token IDs 1-10 from 1/1/2020 to 1/1/2021.\n\nIf times or tokenIDs have len \u003e 1, then the user owns all token IDs specified for all time ranges specified.","type":"object","properties":{"amount":{"description":"The amount of the token owned by the user.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"The token IDs for which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.CoinTransfer":{"type":"object","properties":{"coins":{"description":"The sdk.Coins to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"overrideFromWithApproverAddress":{"description":"By default, the from address is the initiator of the transaction.\nIf this is set to true, we will override the from address with the approver address.\nNote: This is not applicable for collection approvals (since approverAddress == '').","type":"boolean"},"overrideToWithInitiator":{"description":"By default, the to address is what is specified in the coin transfer.\nIf this is set to true, we will override the to address with the initiator of the transaction.","type":"boolean"},"to":{"description":"The address of the recipient of the transfer.","type":"string"}}},"tokenization.v27.CollectionApproval":{"type":"object","title":"CollectionApproval defines the rules for the approval of a transfer on the collection level","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v27.ApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v27.CollectionApprovalPermission":{"description":"CollectionApprovalPermission defines what collection approved transfers can be updated vs. are locked.\n\nEach transfer is broken down to a (from, to, initiatedBy, transferTime, tokenId) tuple.\nFor a transfer to match, we need to match ALL of the fields in the combination. \nThese are determined by the fromListId, toListId, initiatedByListId, transferTimes, tokenIds fields.\nAddressLists are used for (from, to, initiatedBy) which are a permanent list of addresses identified by an ID (see AddressLists). \n\npermanentlyPermitted/ForbiddenTimes: when can the manager execute this permission?\n\nEx: Let's say we are updating the transferability for the transfer tuple (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", 10, 1000).\nWe would check to find the FIRST CollectionApprovalPermission that matches this combination.\nIf we find a match, we would check the permitted/forbidden times to see if we can execute this permission (default is ALLOWED).\n\nEx: So if you wanted to freeze the transferability to enforce that token ID 1 will always be transferable, you could set\nthe combination (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", \"All Transfer Times\", 1) to always be forbidden.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.CollectionMetadata":{"description":"This message defines the metadata for the collection.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the collection metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the collection metadata.","type":"string"}}},"tokenization.v27.CollectionPermissions":{"description":"CollectionPermissions defines the permissions for the collection (i.e., what the manager can and cannot do).\n\nThere are three types of permissions for a collection: ActionPermission, TokenIdsActionPermission, and CollectionApprovalPermission.\n\nThe permission type allows fine-grained access control for each action.\n- ActionPermission: defines when the manager can perform an action or update a field.\n- TokenIdsActionPermission: defines when the manager can perform an action for specific tokens\n- CollectionApprovalPermission: defines when the manager can update the transferability of the collection and what transfers can be updated vs. locked.\n\nNote there are a few different times here which could get confusing:\n- permanentlyPermitted/ForbiddenTimes - the times that a permission can be performed\n- transferTimes - the times that a transfer occurs\n- ownershipTimes - the times when a token is owned by a user\n\nThe permitted/permanentlyForbiddenTimes are used to determine when a permission can be executed.\nOnce a time is set to be permitted or forbidden, it is PERMANENT and cannot be changed.\nIf a time is not set to be permitted or forbidden, it is considered NEUTRAL and can be updated but is ALLOWED by default.\n\nIMPORTANT: We take first-match only for the permissions. This means that if you forbid time T in array index 0 and permit time T in index 1, \nwe will only check the first permission (forbid time T) and not the second permission (permit time T).","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApprovalPermission"}},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenIdsActionPermission"}},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenIdsActionPermission"}}}},"tokenization.v27.Conversion":{"description":"Conversion defines a bidirectional conversion between a cosmos coin (with denom) and token balances.","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin side of the conversion (amount + denom).","$ref":"#/definitions/tokenization.v27.ConversionSideAWithDenom"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}}}},"tokenization.v27.ConversionSideA":{"description":"ConversionSideA represents the cosmos coin amount side of a conversion without denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"}}},"tokenization.v27.ConversionSideAWithDenom":{"description":"ConversionSideAWithDenom represents the cosmos coin side of a conversion with denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"},"denom":{"description":"The denomination of the cosmos coin.","type":"string"}}},"tokenization.v27.ConversionWithoutDenom":{"description":"ConversionWithoutDenom defines a bidirectional conversion between a cosmos coin amount (without denom) and token balances.\nThe denom is stored at the base level (e.g., in AliasPath or CosmosCoinWrapperPath).","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin amount side of the conversion (amount only, denom stored separately).","$ref":"#/definitions/tokenization.v27.ConversionSideA"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}}}},"tokenization.v27.CosmosCoinBackedPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v27.Conversion"}}},"tokenization.v27.CosmosCoinWrapperPathAddObject":{"type":"object","properties":{"allowOverrideWithAnyValidToken":{"type":"boolean"},"conversion":{"$ref":"#/definitions/tokenization.v27.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.v27.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v27.DenomUnit":{"type":"object","properties":{"decimals":{"description":"The number of decimal places for this unit. Defines the precision of the unit.","type":"string"},"isDefaultDisplay":{"description":"If true, this is the default display unit. Only one unit should be marked as the default display unit.\nThis unit will be used by default when displaying the coin amount. If none are marked default, we use the base level.","type":"boolean"},"metadata":{"description":"The metadata for this denomination unit.","$ref":"#/definitions/tokenization.v27.PathMetadata"},"symbol":{"description":"The symbol for this unit (e.g., \"BADGE\", \"nBADGE\"). Used for display purposes.","type":"string"}}},"tokenization.v27.DynamicStoreChallenge":{"description":"DynamicStoreChallenge defines a challenge that requires the initiator to pass a dynamic store check.","type":"object","properties":{"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"storeId":{"description":"The ID of the dynamic store to check.","type":"string"}}},"tokenization.v27.ETHSignatureChallenge":{"description":"ETHSignatureChallenge defines a rule for the approval in the form of an Ethereum signature challenge.\n\nAn ETH signature challenge is a challenge where the user must provide a valid Ethereum signature for a specific nonce.\nThe signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId) and each signature can only be used once.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: We track the usage of each signature to prevent replay attacks. Each signature can only be used once.\nIf you update the challenge ID, then the used signatures tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this ETH signature challenge for tracking the number of uses per signature.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this ETH signature challenge.","type":"string"},"signer":{"description":"The Ethereum address that must sign the nonce for verification.","type":"string"},"uri":{"description":"The URI associated with this ETH signature challenge, optionally providing metadata about the challenge.","type":"string"}}},"tokenization.v27.ETHSignatureProof":{"description":"ETHSignatureProof represents an Ethereum signature proof for a challenge.","type":"object","properties":{"nonce":{"description":"The nonce that was signed. The signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId).","type":"string"},"signature":{"description":"The Ethereum signature of the nonce.","type":"string"}}},"tokenization.v27.EVMQueryChallenge":{"description":"EVMQueryChallenge defines a rule for approval via read-only EVM contract query.\n\nThe challenge executes a staticcall to the specified contract with the given calldata.\nThe result is compared against the expected result (if provided) or checked for non-zero return.\n\nIMPORTANT: This is read-only and cannot modify state. The query is executed with a gas limit\nto prevent DoS attacks. All results are deterministic since EVM state is consistent within a block.","type":"object","properties":{"calldata":{"type":"string","title":"ABI-encoded function selector + arguments (hex string without 0x prefix)\nExample: \"70a08231000000000000000000000000{address}\" for balanceOf(address)\nCan use placeholders: $initiator, $sender, $recipient (replaced at runtime)"},"comparisonOperator":{"description":"Comparison operator: \"eq\" (equals), \"ne\" (not equals), \"gt\" (greater than), \"gte\", \"lt\", \"lte\"\nOnly \"eq\" and \"ne\" work for non-numeric types. Default is \"eq\".","type":"string"},"contractAddress":{"type":"string","title":"The EVM contract address to query (0x format or bb1 format)"},"customData":{"type":"string","title":"Arbitrary custom data"},"expectedResult":{"description":"Expected return value (hex string without 0x prefix). If empty, any non-error result passes.\nFor boolean checks, use \"0000...0001\" for true.","type":"string"},"gasLimit":{"type":"string","title":"Gas limit for the query (default 100000, max 500000)"},"uri":{"type":"string","title":"The URI associated with this challenge (metadata)"}}},"tokenization.v27.IncomingApprovalCriteria":{"description":"IncomingApprovalCriteria defines the criteria for approving incoming transfers.\nThis is used for user-level incoming approvals and only includes fields relevant to incoming transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v27.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v27.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v27.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v27.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v27.PredeterminedBalances"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No recipient checks are included for incoming approvals since the recipient is the user themselves.","$ref":"#/definitions/tokenization.v27.AddressChecks"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.VotingChallenge"}}}},"tokenization.v27.IncrementedBalances":{"description":"IncrementedBalances represents balances that are incremented by specific amounts, according to the order calculation method.","type":"object","properties":{"allowOverrideTimestamp":{"description":"Whether to allow overriding the timestamp for the balances (only applicable with durationFromTimestamp set).","type":"boolean"},"allowOverrideWithAnyValidToken":{"type":"boolean","title":"Allow override of any valid ID"},"durationFromTimestamp":{"description":"The amount of unix milliseconds to approve starting from now. Incompatible with incrementOwnershipTimesBy.","type":"string"},"incrementOwnershipTimesBy":{"description":"The amount by which to increment ownership times. Incompatible with approveStartingFromNowBy.","type":"string"},"incrementTokenIdsBy":{"description":"The amount by which to increment token IDs.","type":"string"},"recurringOwnershipTimes":{"description":"Recurring ownership times.","$ref":"#/definitions/tokenization.v27.RecurringOwnershipTimes"},"startBalances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}}}},"tokenization.v27.InvariantsAddObject":{"description":"InvariantsAddObject is used for adding invariants without specifying addresses.\nAddresses are generated by the keeper and stored in the collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.\nAddress will be generated by the keeper.","$ref":"#/definitions/tokenization.v27.CosmosCoinBackedPathAddObject"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.v27.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.v27.ManualBalances":{"description":"ManualBalances represents a list of manual balances entered for the predetermined balances criteria. Order is calculated according to the calculation method set.","type":"object","properties":{"balances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}}}},"tokenization.v27.MaxNumTransfers":{"description":"MaxNumTransfers defines the maximum number of transfers per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the number of transfers for the specified token IDs and ownership times\nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallMaxNumTransfers":{"description":"Overall maximum number of transfers.","type":"string"},"perFromAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"from\" address.","type":"string"},"perInitiatedByAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"initiated by\" address.","type":"string"},"perToAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v27.ResetTimeIntervals"}}},"tokenization.v27.MerkleChallenge":{"description":"Challenges define a rule for the approval in the form of a Merkle challenge.\n\nA Merkle challenge is a challenge where the user must provide a Merkle proof to a Merkle tree. If they provide a valid proof,\nthen the challenge is met. All challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Merkle challenges currently are limited to SHA256 hashes. See documentation for MerkleChallenge for more details and tutorials.\n\nIMPORTANT: We track the number of uses per leaf according to the challengeTrackerId specified by the parent approval of this challenge.\nIf you update the challenge ID, then the used leaves tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this Merkle challenge for tracking the number of uses per leaf.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this Merkle challenge.","type":"string"},"expectedProofLength":{"description":"The expected length of the Merkle path for verification. Used to prevent Merkle path truncation attacks.","type":"string"},"leafSigner":{"description":"Ethereum address that must sign the leaf. Used to protect against man-in-the-middle attacks.\nSignature scheme: sign(leaf + \"-\" + creatorAddress), verified using elliptic curve signature verification.","type":"string"},"maxUsesPerLeaf":{"description":"The maximum number of times each leaf can be used. Must be 1 if useCreatorAddressAsLeaf is false to prevent replay attacks.","type":"string"},"root":{"description":"The root hash of the Merkle tree to which the Merkle path must lead for verification.","type":"string"},"uri":{"description":"The URI associated with this Merkle challenge, optionally providing metadata about the challenge.","type":"string"},"useCreatorAddressAsLeaf":{"description":"If true, we will override the user's leaf for their proof with their creator address. Used for whitelist trees where all leaves are valid BitBadges addresses.","type":"boolean"}}},"tokenization.v27.MerklePathItem":{"description":"MerklePathItem represents an item in a Merkle path.","type":"object","properties":{"aunt":{"description":"The hash of the sibling node (aunt) in the Merkle path.","type":"string"},"onRight":{"description":"Indicates whether the aunt node is on the right side of the path.","type":"boolean"}}},"tokenization.v27.MerkleProof":{"description":"MerkleProof represents a Merkle proof, consistent with Tendermint/Crypto Merkle tree.","type":"object","properties":{"aunts":{"description":"List of Merkle path items (aunts) that make up the proof.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerklePathItem"}},"leaf":{"description":"The hash of the leaf node for which the proof is generated.","type":"string"},"leafSignature":{"description":"The signature of the leaf node tying the address to the leaf node.","type":"string"}}},"tokenization.v27.MsgCastVote":{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","type":"object","properties":{"approvalId":{"description":"The approval ID.","type":"string"},"approvalLevel":{"description":"The approval level (\"collection\", \"incoming\", or \"outgoing\").","type":"string"},"approverAddress":{"description":"The approver address (empty string for collection-level approvals).","type":"string"},"collectionId":{"description":"The collection ID for the voting challenge.","type":"string"},"creator":{"description":"The address of the voter casting the vote.","type":"string"},"proposalId":{"description":"The proposal ID (challenge ID) from the VotingChallenge.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.v27.MsgCastVoteResponse":{"type":"object"},"tokenization.v27.MsgCreateAddressLists":{"description":"MsgCreateAddressLists is used to create address lists.","type":"object","properties":{"addressLists":{"description":"Address lists to create. The createdBy field will be automatically set to the creator address.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.AddressListInput"}},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgCreateAddressListsResponse":{"description":"MsgCreateAddressListsResponse is the response to MsgCreateAddressLists.","type":"object"},"tokenization.v27.MsgCreateCollection":{"description":"MsgCreateCollection is used to create a new collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.AliasPathAddObject"}},"collectionApprovals":{"description":"Collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApproval"}},"collectionMetadata":{"description":"Collection metadata.","$ref":"#/definitions/tokenization.v27.CollectionMetadata"},"collectionPermissions":{"description":"Collection permissions.","$ref":"#/definitions/tokenization.v27.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v27.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v27.InvariantsAddObject"},"isArchived":{"description":"isArchived flag.","type":"boolean"},"manager":{"description":"Manager address.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"Standards entries.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"Token metadata entries.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenMetadata"}},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.MsgCreateCollectionResponse":{"description":"MsgCreateCollectionResponse is the response to MsgCreateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgCreateDynamicStore":{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v27.MsgCreateDynamicStoreResponse":{"description":"MsgCreateDynamicStoreResponse is the response to MsgCreateDynamicStore.","type":"object","properties":{"storeId":{"description":"ID of the dynamic store.","type":"string"}}},"tokenization.v27.MsgDeleteCollection":{"description":"MsgDeleteCollection is used to delete a collection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgDeleteCollectionResponse":{"description":"MsgDeleteCollectionResponse is the response to MsgDeleteCollection.","type":"object"},"tokenization.v27.MsgDeleteDynamicStore":{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store to delete.","type":"string"}}},"tokenization.v27.MsgDeleteDynamicStoreResponse":{"description":"MsgDeleteDynamicStoreResponse is the response to MsgDeleteDynamicStore.","type":"object"},"tokenization.v27.MsgDeleteIncomingApproval":{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgDeleteIncomingApprovalResponse":{"description":"MsgDeleteIncomingApprovalResponse is the response to MsgDeleteIncomingApproval.","type":"object"},"tokenization.v27.MsgDeleteOutgoingApproval":{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgDeleteOutgoingApprovalResponse":{"description":"MsgDeleteOutgoingApprovalResponse is the response to MsgDeleteOutgoingApproval.","type":"object"},"tokenization.v27.MsgPurgeApprovals":{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","type":"object","properties":{"approvalsToPurge":{"description":"Specific approvals to purge. If empty, purges all applicable approvals based on other flags.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ApprovalIdentifierDetails"}},"approverAddress":{"description":"Address of the user whose approvals to purge. If empty, defaults to creator.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"purgeCounterpartyApprovals":{"description":"Whether to purge counterparty approvals (approvals where the creator is the only initiator).","type":"boolean"},"purgeExpired":{"description":"Whether to purge expired approvals (approvals with no future valid transfer times).","type":"boolean"}}},"tokenization.v27.MsgPurgeApprovalsResponse":{"description":"MsgPurgeApprovalsResponse is the response to MsgPurgeApprovals.","type":"object","properties":{"numPurged":{"description":"Number of approvals purged.","type":"string"}}},"tokenization.v27.MsgSetCollectionApprovals":{"type":"object","title":"MsgSetCollectionApprovals sets the collection approvals and canUpdateCollectionApprovals permission","properties":{"canUpdateCollectionApprovals":{"type":"array","title":"Permission to update collection approvals","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApprovalPermission"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApproval"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgSetCollectionApprovalsResponse":{"description":"MsgSetCollectionApprovalsResponse is the response to MsgSetCollectionApprovals.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetCollectionMetadata":{"type":"object","title":"MsgSetCollectionMetadata sets the collection metadata and canUpdateCollectionMetadata permission","properties":{"canUpdateCollectionMetadata":{"type":"array","title":"Permission to update collection metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v27.CollectionMetadata"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgSetCollectionMetadataResponse":{"description":"MsgSetCollectionMetadataResponse is the response to MsgSetCollectionMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetCustomData":{"type":"object","title":"MsgSetCustomData sets the custom data and canUpdateCustomData permission","properties":{"canUpdateCustomData":{"type":"array","title":"Permission to update custom data","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"}}},"tokenization.v27.MsgSetCustomDataResponse":{"description":"MsgSetCustomDataResponse is the response to MsgSetCustomData.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetDynamicStoreValue":{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","type":"object","properties":{"address":{"description":"The address for which to set the value.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store.","type":"string"},"value":{"description":"The boolean value to set (true/false).","type":"boolean"}}},"tokenization.v27.MsgSetDynamicStoreValueResponse":{"description":"MsgSetDynamicStoreValueResponse is the response to MsgSetDynamicStoreValue.","type":"object"},"tokenization.v27.MsgSetIncomingApproval":{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","type":"object","properties":{"approval":{"description":"The incoming approval to set.","$ref":"#/definitions/tokenization.v27.UserIncomingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgSetIncomingApprovalResponse":{"description":"MsgSetIncomingApprovalResponse is the response to MsgSetIncomingApproval.","type":"object"},"tokenization.v27.MsgSetIsArchived":{"type":"object","title":"MsgSetIsArchived sets the isArchived and canArchiveCollection permission","properties":{"canArchiveCollection":{"type":"array","title":"Permission to archive collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"isArchived":{"description":"New isArchived to set.","type":"boolean"}}},"tokenization.v27.MsgSetIsArchivedResponse":{"description":"MsgSetIsArchivedResponse is the response to MsgSetIsArchived.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetManager":{"type":"object","title":"MsgSetManager sets the manager and canUpdateManager permission","properties":{"canUpdateManager":{"type":"array","title":"Permission to update manager","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"manager":{"description":"New manager to set.","type":"string"}}},"tokenization.v27.MsgSetManagerResponse":{"description":"MsgSetManagerResponse is the response to MsgSetManager.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetOutgoingApproval":{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","type":"object","properties":{"approval":{"description":"The outgoing approval to set.","$ref":"#/definitions/tokenization.v27.UserOutgoingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v27.MsgSetOutgoingApprovalResponse":{"description":"MsgSetOutgoingApprovalResponse is the response to MsgSetOutgoingApproval.","type":"object"},"tokenization.v27.MsgSetReservedProtocolAddress":{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","type":"object","properties":{"address":{"description":"Address to set or unset as reserved protocol address.","type":"string"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"isReservedProtocol":{"description":"Whether the address should be a reserved protocol address (true) or not (false).","type":"boolean"}}},"tokenization.v27.MsgSetReservedProtocolAddressResponse":{"description":"MsgSetReservedProtocolAddressResponse is the response to MsgSetReservedProtocolAddress.","type":"object"},"tokenization.v27.MsgSetStandards":{"type":"object","title":"MsgSetStandards sets the standards and canUpdateStandards permission","properties":{"canUpdateStandards":{"type":"array","title":"Permission to update standards","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}}}},"tokenization.v27.MsgSetStandardsResponse":{"description":"MsgSetStandardsResponse is the response to MsgSetStandards.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetTokenMetadata":{"type":"object","title":"MsgSetTokenMetadata sets the token metadata and canUpdateTokenMetadata permission","properties":{"canUpdateTokenMetadata":{"type":"array","title":"Permission to update token metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenMetadata"}}}},"tokenization.v27.MsgSetTokenMetadataResponse":{"description":"MsgSetTokenMetadataResponse is the response to MsgSetTokenMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgSetValidTokenIds":{"type":"object","title":"MsgSetValidTokenIds sets the validTokenIds and canUpdateValidTokenIds permission","properties":{"canUpdateValidTokenIds":{"type":"array","title":"Permission to update valid token IDs","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.MsgSetValidTokenIdsResponse":{"description":"MsgSetValidTokenIdsResponse is the response to MsgSetValidTokenIds.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgTransferTokens":{"description":"MsgTransferTokens is used to transfer tokens.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"transfers":{"description":"Transfers to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Transfer"}}}},"tokenization.v27.MsgTransferTokensResponse":{"description":"MsgTransferTokensResponse is the response to MsgTransferTokens.","type":"object"},"tokenization.v27.MsgUniversalUpdateCollection":{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v27.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v27.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v27.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v27.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.MsgUniversalUpdateCollectionResponse":{"description":"MsgUniversalUpdateCollectionResponse is the response to MsgUniversalUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgUpdateCollection":{"description":"MsgUpdateCollection is used to update a collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v27.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v27.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v27.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.MsgUpdateCollectionResponse":{"description":"MsgUpdateCollectionResponse is the response to MsgUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v27.MsgUpdateDynamicStore":{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The new default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"The global kill switch state (true = enabled, false = disabled/halted).\nCallers should query the current value first if they want to keep it unchanged.","type":"boolean"},"storeId":{"description":"ID of the dynamic store to update.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v27.MsgUpdateDynamicStoreResponse":{"description":"MsgUpdateDynamicStoreResponse is the response to MsgUpdateDynamicStore.","type":"object"},"tokenization.v27.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tokenization.v27.Params"}}},"tokenization.v27.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"tokenization.v27.MsgUpdateUserApprovals":{"description":"MsgUpdateUserApprovals is used to update user approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Auto-approve setting for all incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Auto-approve setting for self-initiated incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Auto-approve setting for self-initiated outgoing transfers.","type":"boolean"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"incomingApprovals":{"description":"New incoming approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserIncomingApproval"}},"outgoingApprovals":{"description":"New outgoing approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserOutgoingApproval"}},"updateAutoApproveAllIncomingTransfers":{"description":"Indicates if auto-approve settings for all incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Indicates if auto-approve settings for self-initiated incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Indicates if auto-approve settings for self-initiated outgoing transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIncomingApprovals":{"description":"Indicates if incoming approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateOutgoingApprovals":{"description":"Indicates if outgoing approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateUserPermissions":{"description":"Indicates if user permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"userPermissions":{"description":"New user permissions to set.","$ref":"#/definitions/tokenization.v27.UserPermissions"}}},"tokenization.v27.MsgUpdateUserApprovalsResponse":{"description":"MsgUpdateUserApprovalsResponse is the response to MsgUpdateUserApprovals.","type":"object"},"tokenization.v27.MustOwnTokens":{"description":"MustOwnTokens represents a condition where a user must own specific tokens\nto be approved to transfer.\n\n- collectionId: The ID of the collection for the tokens that must be owned\n- amountRange: The range of amounts the user must own (min to max)\n- ownershipTimes: The time ranges during which the user must own the tokens.\n- tokenIds: The token IDs the user must own.\n- overrideWithCurrentTime: If true, auto override ownershipTimes with the current time.\n- mustSatisfyForAllAssets: If true, the user must own all specified tokens; otherwise, owning any one for \u003e= 1 millisecond is sufficient.","type":"object","properties":{"amountRange":{"description":"The range of amounts the user must own (min to max).","$ref":"#/definitions/tokenization.v27.UintRange"},"collectionId":{"description":"The ID of the collection.","type":"string"},"mustSatisfyForAllAssets":{"description":"If true, the user must meet ownership requirements for all specified tokens; else, must meet requirements for any single token.","type":"boolean"},"overrideWithCurrentTime":{"description":"If true, override ownershipTimes with the current time.","type":"boolean"},"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user must own the tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"The token IDs the user must own.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.OutgoingApprovalCriteria":{"description":"OutgoingApprovalCriteria defines the criteria for approving outgoing transfers.\nThis is used for user-level outgoing approvals and only includes fields relevant to outgoing transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v27.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v27.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v27.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v27.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v27.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v27.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No sender checks are included for outgoing approvals since the sender is the user themselves.","$ref":"#/definitions/tokenization.v27.AddressChecks"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.VotingChallenge"}}}},"tokenization.v27.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"affiliate_percentage":{"type":"string","title":"affiliate_percentage defines the percentage of the transfer amount that goes to the affiliate"},"allowed_denoms":{"type":"array","title":"allowed_denoms defines the list of denoms that are allowed to be used in coin_transfers","items":{"type":"string"}}}},"tokenization.v27.PathMetadata":{"description":"This message defines the metadata for paths (alias paths and cosmos coin wrapper paths).\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the path metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the path metadata.","type":"string"}}},"tokenization.v27.PrecalculateBalancesFromApprovalDetails":{"description":"PrecalculateBalancesFromApprovalDetails defines the details for precalculating balances from an approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"precalculationOptions":{"description":"The options for precalculating the balances.","$ref":"#/definitions/tokenization.v27.PrecalculationOptions"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v27.PrecalculationOptions":{"description":"PrecalculationOptions defines the options for precalculating the balances.","type":"object","properties":{"overrideTimestamp":{"description":"The timestamp to override with when calculating the balances.","type":"string"},"tokenIdsOverride":{"description":"The IDs to override for the transfer. Only applicable if using this option in precalculation.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.PredeterminedBalances":{"description":"PredeterminedBalances represents balances with predetermined order calculation.","type":"object","properties":{"incrementedBalances":{"description":"Balances that have a starting amount and increment. If this is nil, then we use the manual balances.","$ref":"#/definitions/tokenization.v27.IncrementedBalances"},"manualBalances":{"description":"Manual balances that can be entered. If this is nil, then we use the incremented balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ManualBalances"}},"orderCalculationMethod":{"description":"The method to calculate the order of predetermined balances.","$ref":"#/definitions/tokenization.v27.PredeterminedOrderCalculationMethod"}}},"tokenization.v27.PredeterminedOrderCalculationMethod":{"description":"PredeterminedOrderCalculationMethod defines the method to calculate predetermined balances order.","type":"object","properties":{"challengeTrackerId":{"description":"If useMerkleChallengeLeafIndex is set, then this is the ID of the challenge tracker associated with this calculation method.","type":"string"},"useMerkleChallengeLeafIndex":{"description":"Use the Merkle challenge leaf index to calculate the order. Ex: Transfer that uses leaf index 0 gets the first balance, transfer that uses leaf index 1 gets the second balance, etc.","type":"boolean"},"useOverallNumTransfers":{"description":"Use the overall number of transfers to calculate the order. Ex: First transfer gets the first balance, second transfer gets the second balance, etc.","type":"boolean"},"usePerFromAddressNumTransfers":{"description":"Use the number of transfers per \"from\" address to calculate the order. Ex: First transfer from address A gets the first balance, second transfer from address A gets the second balance, etc.","type":"boolean"},"usePerInitiatedByAddressNumTransfers":{"description":"Use the number of transfers per \"initiated by\" address to calculate the order. Ex: First transfer initiated by address A gets the first balance, second transfer initiated by address A gets the second balance, etc.","type":"boolean"},"usePerToAddressNumTransfers":{"description":"Use the number of transfers per \"to\" address to calculate the order. Ex: First transfer to address A gets the first balance, second transfer to address A gets the second balance, etc.","type":"boolean"}}},"tokenization.v27.RecurringOwnershipTimes":{"description":"RecurringOwnershipTimes represents a list of recurring ownership times.","type":"object","properties":{"chargePeriodLength":{"type":"string","title":"Grace period length where you can charge the next interval (nextStartTime - chargePeriodLength) until (nextStartTime) = charge period"},"intervalLength":{"description":"The interval length in unix milliseconds.","type":"string"},"startTime":{"description":"The original start time of the first interval.","type":"string"}}},"tokenization.v27.ResetTimeIntervals":{"description":"Time intervals to reset the trackers at.","type":"object","properties":{"intervalLength":{"description":"Interval length in unix milliseconds.","type":"string"},"startTime":{"description":"Original start time of the first interval.","type":"string"}}},"tokenization.v27.TokenIdsActionPermission":{"description":"TokenIdsActionPermission defines the permissions for performing an action for specific tokens.\nCurrently, this is only used for creating new tokens.\n\nEx: If you want to lock the ability to create new tokens for tokenIds [1,2] at ownershipTimes 1/1/2020 - 1/1/2021, \nyou could set the combination (tokenIds: [1,2], ownershipTimes: [1/1/2020 - 1/1/2021]) to always be forbidden.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.TokenMetadata":{"description":"This message defines the metadata for specific token IDs.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the token metadata.","type":"string"},"tokenIds":{"description":"The token IDs to which this metadata applies.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the token metadata.","type":"string"}}},"tokenization.v27.Transfer":{"description":"Transfer defines the details of a transfer of tokens.","type":"object","properties":{"balances":{"description":"The balances to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}},"ethSignatureProofs":{"description":"The ETH signature proofs / solutions for all ETH signature challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ETHSignatureProof"}},"from":{"description":"The address of the sender of the transfer.","type":"string"},"memo":{"description":"The memo for the transfer.","type":"string"},"merkleProofs":{"description":"The Merkle proofs / solutions for all Merkle challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.MerkleProof"}},"onlyCheckPrioritizedCollectionApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedIncomingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedOutgoingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"precalculateBalancesFromApproval":{"description":"If defined, we will use the predeterminedBalances from the specified approval to calculate the balances at execution time.\nWe will override the balances field with the precalculated balances. Only applicable for approvals with predeterminedBalances set.","$ref":"#/definitions/tokenization.v27.PrecalculateBalancesFromApprovalDetails"},"prioritizedApprovals":{"description":"The prioritized approvals for the transfer. By default, we scan linearly through the approvals and use the first match.\nThis field can be used to prioritize specific approvals and scan through them first.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ApprovalIdentifierDetails"}},"toAddresses":{"description":"The addresses of the recipients of the transfer.","type":"array","items":{"type":"string"}}}},"tokenization.v27.UintRange":{"description":"The UintRange is a range of IDs from some start to some end (inclusive).\nuintRanges are one of the core types used.\n\nThey are used for everything from token IDs to time ranges to min/max balance amounts.\n\nSee the BitBadges documentation for more information.","type":"object","properties":{"end":{"description":"The ending value of the range (inclusive).","type":"string"},"start":{"description":"The starting value of the range (inclusive).","type":"string"}}},"tokenization.v27.UserBalanceStore":{"description":"UserBalanceStore is the store for the user balances for a collection.\n\nIt consists of a list of balances, a list of approved outgoing transfers, and a list of approved incoming transfers,\nas well as the permissions for updating the approved incoming/outgoing transfers.\n\nUpon initialization, all fields (minus the balances) are set to the defaults specified by the collection.\n\nThe outgoing transfers can be used to allow / disallow transfers which are sent from this user.\nIf a transfer has no match, then it is disallowed by default, unless from == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedOutgoingTransfers is set to true.\n\nThe incoming transfers can be used to allow / disallow transfers which are sent to this user.\nIf a transfer has no match, then it is disallowed by default, unless to == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedIncomingTransfers is set to true.\n\nNote that the user approved transfers are only checked if the collection approved transfers do not specify to override\nthe user approved transfers. \n\nThe permissions are used to determine whether the user can update the approved incoming/outgoing transfers and auto approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Whether to auto-approve all incoming transfers by default. \nThis is just shorthand for adding an accept everything incoming approval\nwith no restrictions.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Whether to auto-approve self-initiated incoming transfers for this user (i.e. to == initiatedBy).","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Whether to auto-approve self-initiated outgoing transfers for this user (i.e. from == initiatedBy).","type":"boolean"},"balances":{"description":"The list of balances associated with this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Balance"}},"incomingApprovals":{"description":"The list of approved incoming transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserIncomingApproval"}},"outgoingApprovals":{"description":"The list of approved outgoing transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserOutgoingApproval"}},"userPermissions":{"description":"The permissions for this user's actions and transfers.","$ref":"#/definitions/tokenization.v27.UserPermissions"}}},"tokenization.v27.UserIncomingApproval":{"description":"UserIncomingApproval defines the rules for the approval of an incoming transfer to a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v27.IncomingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v27.UserIncomingApprovalPermission":{"description":"UserIncomingApprovalPermission defines the permissions for updating the user's approved incoming transfers.\n\nSee CollectionApprovalPermission for more details. This is equivalent without the toListId field because that is always the user.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.UserOutgoingApproval":{"description":"UserOutgoingApproval defines the rules for the approval of an outgoing transfer from a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v27.OutgoingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v27.UserOutgoingApprovalPermission":{"description":"UserOutgoingApprovalPermission defines the permissions for updating the user's approved outgoing transfers.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UintRange"}}}},"tokenization.v27.UserPermissions":{"description":"UserPermissions defines the permissions for the user about their approvals (i.e., what the user can and cannot do).\n\nSee CollectionPermissions for more details on the different types of permissions.\n\ncanUpdateOutgoingApprovals and canUpdateOutgoingApprovals follow the same as the canUpdateCollectionApprovals in CollectionPermissions,\nbut certain fields are removed because they are not relevant to the user.","type":"object","properties":{"canUpdateAutoApproveAllIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for all incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated outgoing transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.ActionPermission"}},"canUpdateIncomingApprovals":{"description":"Permissions related to updating the user's approved incoming transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserIncomingApprovalPermission"}},"canUpdateOutgoingApprovals":{"description":"Permissions related to updating the user's approved outgoing transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.UserOutgoingApprovalPermission"}}}},"tokenization.v27.UserRoyalties":{"description":"UserRoyalties defines the royalties for a user.","type":"object","properties":{"payoutAddress":{"description":"Payout address for the royalties.","type":"string"},"percentage":{"description":"Percentage of the transfer amount to apply as royalties. 1 to 10000 represents basis points.","type":"string"}}},"tokenization.v27.Voter":{"description":"Voter defines a voter with their address and weight.","type":"object","properties":{"address":{"description":"The address of the voter.","type":"string"},"weight":{"description":"The weight of this voter's vote.","type":"string"}}},"tokenization.v27.VotingChallenge":{"description":"VotingChallenge defines a rule for approval in the form of a voting/multi-sig challenge.\nRequires a weighted quorum threshold to be met through votes from specified voters.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Votes are stored separately and can be updated. The threshold is calculated as a percentage\nof total possible weight (all voters), not just voted weight. If you update the proposal ID, then the\nvote tracker will reset and start a new tally. We recommend using a unique proposal ID for each challenge\nto prevent overlap and unexpected behavior.","type":"object","properties":{"customData":{"description":"Arbitrary custom data associated with this voting challenge.","type":"string"},"proposalId":{"type":"string","title":"The ID of this voting challenge for tracking votes (scoped like challengeTrackerId).\nFormat: collectionId-approverAddress-approvalLevel-approvalId-challengeId"},"quorumThreshold":{"description":"The quorum threshold as a percentage (0-100) of total possible weight that must vote \"yes\".\nExample: 50 means 50% of total voter weight must vote yes for approval.","type":"string"},"uri":{"description":"The URI associated with this voting challenge.","type":"string"},"voters":{"description":"List of voters with their weights. Each voter can cast a weighted vote.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v27.Voter"}}}},"tokenization.v28.ActionPermission":{"description":"ActionPermission defines the permissions for performing an action.\n\nThis is simple and straightforward as the only thing we need to check is the permitted/forbidden times.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.AddressChecks":{"type":"object","title":"AddressChecks defines checks for address types (EVM contract, liquidity pool, etc.)","properties":{"mustBeEvmContract":{"description":"Require the address to be an EVM contract (has code).","type":"boolean"},"mustBeLiquidityPool":{"description":"Require the address to be a liquidity pool.","type":"boolean"},"mustNotBeEvmContract":{"description":"Require the address to not be an EVM contract (no code).","type":"boolean"},"mustNotBeLiquidityPool":{"description":"Require the address to not be a liquidity pool.","type":"boolean"}}},"tokenization.v28.AddressListInput":{"description":"AddressListInput is used for creating address lists via MsgCreateAddressLists.\nIt contains all fields from AddressList except createdBy, which is automatically set from the message creator.","type":"object","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.v28.AliasPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v28.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.v28.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v28.AltTimeChecks":{"type":"object","title":"AltTimeChecks defines alternative time-based checks for approval denial.\nIf the transfer time falls within any of the specified offline hours or days, the approval is denied.\nUses UTC timezone for neutral timezone approach.\nofflineHours: ranges of hours (0-23) when transfers should be denied\nofflineDays: ranges of days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied","properties":{"offlineDays":{"description":"Days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied. Uses UTC timezone.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"offlineHours":{"description":"Hours (0-23) when transfers should be denied. Uses UTC timezone.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.ApprovalAmounts":{"description":"ApprovalAmounts defines approval amounts per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the amounts transferred for the specified token IDs and ownership times \nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallApprovalAmount":{"description":"Overall approval amount.","type":"string"},"perFromAddressApprovalAmount":{"description":"Approval amount per \"from\" address.","type":"string"},"perInitiatedByAddressApprovalAmount":{"description":"Approval amount per \"initiated by\" address.","type":"string"},"perToAddressApprovalAmount":{"description":"Approval amount per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v28.ResetTimeIntervals"}}},"tokenization.v28.ApprovalCriteria":{"description":"ApprovalCriteria defines the criteria for approving transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"allowBackedMinting":{"description":"If true, this collection approval allows backed minting operations (CosmosCoinBackedPath).\nWhen false, this approval cannot be used for transfers involving backed minting addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"allowSpecialWrapping":{"description":"If true, this collection approval allows special wrapping operations (CosmosCoinWrapperPath).\nWhen false, this approval cannot be used for transfers involving wrapping addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v28.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v28.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v28.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v28.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"overridesFromOutgoingApprovals":{"description":"Overrides the user's outgoing approvals for approval. If true, this collection-level approval\ntakes precedence over any outgoing approvals defined by the sender, allowing the collection to\ncontrol outgoing transfer behavior.","type":"boolean"},"overridesToIncomingApprovals":{"description":"Overrides the user's incoming approvals for approval. If true, this collection-level approval\ntakes precedence over any incoming approvals defined by the recipient, allowing the collection to\ncontrol incoming transfer behavior.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v28.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"userRoyalties":{"description":"User level royalties to apply to the transfer. Defines the percentage and payout address for\nroyalties that should be collected when this approval is used for a transfer.","$ref":"#/definitions/tokenization.v28.UserRoyalties"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.VotingChallenge"}}}},"tokenization.v28.ApprovalIdentifierDetails":{"description":"ApprovalIdentifierDetails defines the details to identify a specific approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v28.AutoDeletionOptions":{"description":"AutoDeletionOptions defines the options for auto-deletion of approvals.","type":"object","properties":{"afterOneUse":{"type":"boolean","title":"After one use?"},"afterOverallMaxNumTransfers":{"type":"boolean","title":"After overall max number of uses threshold is met?"},"allowCounterpartyPurge":{"type":"boolean","title":"Allow counterparty to purge this approval if they are the only initiator"},"allowPurgeIfExpired":{"type":"boolean","title":"Allow others to call PurgeApprovals on behalf of this approval owner"}}},"tokenization.v28.Balance":{"description":"Balance represents the balance of a token for a specific user.\nThe user amounts xAmount of a token specified for the time ranges specified.\n\nExample: User A owns x10 of token IDs 1-10 from 1/1/2020 to 1/1/2021.\n\nIf times or tokenIDs have len \u003e 1, then the user owns all token IDs specified for all time ranges specified.","type":"object","properties":{"amount":{"description":"The amount of the token owned by the user.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"The token IDs for which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.CoinTransfer":{"type":"object","properties":{"coins":{"description":"The sdk.Coins to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"overrideFromWithApproverAddress":{"description":"By default, the from address is the initiator of the transaction.\nIf this is set to true, we will override the from address with the approver address.\nNote: This is not applicable for collection approvals (since approverAddress == '').","type":"boolean"},"overrideToWithInitiator":{"description":"By default, the to address is what is specified in the coin transfer.\nIf this is set to true, we will override the to address with the initiator of the transaction.","type":"boolean"},"to":{"description":"The address of the recipient of the transfer.","type":"string"}}},"tokenization.v28.CollectionApproval":{"type":"object","title":"CollectionApproval defines the rules for the approval of a transfer on the collection level","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v28.ApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v28.CollectionApprovalPermission":{"description":"CollectionApprovalPermission defines what collection approved transfers can be updated vs. are locked.\n\nEach transfer is broken down to a (from, to, initiatedBy, transferTime, tokenId) tuple.\nFor a transfer to match, we need to match ALL of the fields in the combination. \nThese are determined by the fromListId, toListId, initiatedByListId, transferTimes, tokenIds fields.\nAddressLists are used for (from, to, initiatedBy) which are a permanent list of addresses identified by an ID (see AddressLists). \n\npermanentlyPermitted/ForbiddenTimes: when can the manager execute this permission?\n\nEx: Let's say we are updating the transferability for the transfer tuple (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", 10, 1000).\nWe would check to find the FIRST CollectionApprovalPermission that matches this combination.\nIf we find a match, we would check the permitted/forbidden times to see if we can execute this permission (default is ALLOWED).\n\nEx: So if you wanted to freeze the transferability to enforce that token ID 1 will always be transferable, you could set\nthe combination (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", \"All Transfer Times\", 1) to always be forbidden.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.CollectionMetadata":{"description":"This message defines the metadata for the collection.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the collection metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the collection metadata.","type":"string"}}},"tokenization.v28.CollectionPermissions":{"description":"CollectionPermissions defines the permissions for the collection (i.e., what the manager can and cannot do).\n\nThere are three types of permissions for a collection: ActionPermission, TokenIdsActionPermission, and CollectionApprovalPermission.\n\nThe permission type allows fine-grained access control for each action.\n- ActionPermission: defines when the manager can perform an action or update a field.\n- TokenIdsActionPermission: defines when the manager can perform an action for specific tokens\n- CollectionApprovalPermission: defines when the manager can update the transferability of the collection and what transfers can be updated vs. locked.\n\nNote there are a few different times here which could get confusing:\n- permanentlyPermitted/ForbiddenTimes - the times that a permission can be performed\n- transferTimes - the times that a transfer occurs\n- ownershipTimes - the times when a token is owned by a user\n\nThe permitted/permanentlyForbiddenTimes are used to determine when a permission can be executed.\nOnce a time is set to be permitted or forbidden, it is PERMANENT and cannot be changed.\nIf a time is not set to be permitted or forbidden, it is considered NEUTRAL and can be updated but is ALLOWED by default.\n\nIMPORTANT: We take first-match only for the permissions. This means that if you forbid time T in array index 0 and permit time T in index 1, \nwe will only check the first permission (forbid time T) and not the second permission (permit time T).","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApprovalPermission"}},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenIdsActionPermission"}},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenIdsActionPermission"}}}},"tokenization.v28.Conversion":{"description":"Conversion defines a bidirectional conversion between a cosmos coin (with denom) and token balances.","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin side of the conversion (amount + denom).","$ref":"#/definitions/tokenization.v28.ConversionSideAWithDenom"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}}}},"tokenization.v28.ConversionSideA":{"description":"ConversionSideA represents the cosmos coin amount side of a conversion without denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"}}},"tokenization.v28.ConversionSideAWithDenom":{"description":"ConversionSideAWithDenom represents the cosmos coin side of a conversion with denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"},"denom":{"description":"The denomination of the cosmos coin.","type":"string"}}},"tokenization.v28.ConversionWithoutDenom":{"description":"ConversionWithoutDenom defines a bidirectional conversion between a cosmos coin amount (without denom) and token balances.\nThe denom is stored at the base level (e.g., in AliasPath or CosmosCoinWrapperPath).","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin amount side of the conversion (amount only, denom stored separately).","$ref":"#/definitions/tokenization.v28.ConversionSideA"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}}}},"tokenization.v28.CosmosCoinBackedPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v28.Conversion"}}},"tokenization.v28.CosmosCoinWrapperPathAddObject":{"type":"object","properties":{"allowOverrideWithAnyValidToken":{"type":"boolean"},"conversion":{"$ref":"#/definitions/tokenization.v28.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.v28.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v28.DenomUnit":{"type":"object","properties":{"decimals":{"description":"The number of decimal places for this unit. Defines the precision of the unit.","type":"string"},"isDefaultDisplay":{"description":"If true, this is the default display unit. Only one unit should be marked as the default display unit.\nThis unit will be used by default when displaying the coin amount. If none are marked default, we use the base level.","type":"boolean"},"metadata":{"description":"The metadata for this denomination unit.","$ref":"#/definitions/tokenization.v28.PathMetadata"},"symbol":{"description":"The symbol for this unit (e.g., \"BADGE\", \"nBADGE\"). Used for display purposes.","type":"string"}}},"tokenization.v28.DynamicStoreChallenge":{"description":"DynamicStoreChallenge defines a challenge that requires the initiator to pass a dynamic store check.","type":"object","properties":{"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"storeId":{"description":"The ID of the dynamic store to check.","type":"string"}}},"tokenization.v28.ETHSignatureChallenge":{"description":"ETHSignatureChallenge defines a rule for the approval in the form of an Ethereum signature challenge.\n\nAn ETH signature challenge is a challenge where the user must provide a valid Ethereum signature for a specific nonce.\nThe signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId) and each signature can only be used once.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: We track the usage of each signature to prevent replay attacks. Each signature can only be used once.\nIf you update the challenge ID, then the used signatures tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this ETH signature challenge for tracking the number of uses per signature.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this ETH signature challenge.","type":"string"},"signer":{"description":"The Ethereum address that must sign the nonce for verification.","type":"string"},"uri":{"description":"The URI associated with this ETH signature challenge, optionally providing metadata about the challenge.","type":"string"}}},"tokenization.v28.ETHSignatureProof":{"description":"ETHSignatureProof represents an Ethereum signature proof for a challenge.","type":"object","properties":{"nonce":{"description":"The nonce that was signed. The signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId).","type":"string"},"signature":{"description":"The Ethereum signature of the nonce.","type":"string"}}},"tokenization.v28.EVMQueryChallenge":{"description":"EVMQueryChallenge defines a rule for approval via read-only EVM contract query.\n\nThe challenge executes a staticcall to the specified contract with the given calldata.\nThe result is compared against the expected result (if provided) or checked for non-zero return.\n\nIMPORTANT: This is read-only and cannot modify state. The query is executed with a gas limit\nto prevent DoS attacks. All results are deterministic since EVM state is consistent within a block.","type":"object","properties":{"calldata":{"type":"string","title":"ABI-encoded function selector + arguments (hex string without 0x prefix)\nExample: \"70a08231000000000000000000000000{address}\" for balanceOf(address)\nCan use placeholders: $initiator, $sender, $recipient (replaced at runtime)"},"comparisonOperator":{"description":"Comparison operator: \"eq\" (equals), \"ne\" (not equals), \"gt\" (greater than), \"gte\", \"lt\", \"lte\"\nOnly \"eq\" and \"ne\" work for non-numeric types. Default is \"eq\".","type":"string"},"contractAddress":{"type":"string","title":"The EVM contract address to query (0x format or bb1 format)"},"customData":{"type":"string","title":"Arbitrary custom data"},"expectedResult":{"description":"Expected return value (hex string without 0x prefix). If empty, any non-error result passes.\nFor boolean checks, use \"0000...0001\" for true.","type":"string"},"gasLimit":{"type":"string","title":"Gas limit for the query (default 100000, max 500000)"},"uri":{"type":"string","title":"The URI associated with this challenge (metadata)"}}},"tokenization.v28.IncomingApprovalCriteria":{"description":"IncomingApprovalCriteria defines the criteria for approving incoming transfers.\nThis is used for user-level incoming approvals and only includes fields relevant to incoming transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v28.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v28.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v28.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v28.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v28.PredeterminedBalances"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No recipient checks are included for incoming approvals since the recipient is the user themselves.","$ref":"#/definitions/tokenization.v28.AddressChecks"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.VotingChallenge"}}}},"tokenization.v28.IncrementedBalances":{"description":"IncrementedBalances represents balances that are incremented by specific amounts, according to the order calculation method.","type":"object","properties":{"allowAmountScaling":{"description":"When true, the actual transfer can be any evenly divisible integer multiple (\u003e=1x) of startBalances.\napprovalCriteria.coinTransfers are scaled by the same multiplier.\nAll other IncrementedBalances fields must be zero/false/nil when this is true.","type":"boolean"},"allowOverrideTimestamp":{"description":"Whether to allow overriding the timestamp for the balances (only applicable with durationFromTimestamp set).","type":"boolean"},"allowOverrideWithAnyValidToken":{"type":"boolean","title":"Allow override of any valid ID"},"durationFromTimestamp":{"description":"The amount of unix milliseconds to approve starting from now. Incompatible with incrementOwnershipTimesBy.","type":"string"},"incrementOwnershipTimesBy":{"description":"The amount by which to increment ownership times. Incompatible with approveStartingFromNowBy.","type":"string"},"incrementTokenIdsBy":{"description":"The amount by which to increment token IDs.","type":"string"},"maxScalingMultiplier":{"description":"Maximum allowed scaling multiplier. Must be \u003e 0 when allowAmountScaling is true.\nThe chain rejects transfers where the computed multiplier exceeds this cap.\nIgnored (set to \"0\") when allowAmountScaling is false.","type":"string"},"recurringOwnershipTimes":{"description":"Recurring ownership times.","$ref":"#/definitions/tokenization.v28.RecurringOwnershipTimes"},"startBalances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}}}},"tokenization.v28.InvariantsAddObject":{"description":"InvariantsAddObject is used for adding invariants without specifying addresses.\nAddresses are generated by the keeper and stored in the collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.\nAddress will be generated by the keeper.","$ref":"#/definitions/tokenization.v28.CosmosCoinBackedPathAddObject"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.v28.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.v28.ManualBalances":{"description":"ManualBalances represents a list of manual balances entered for the predetermined balances criteria. Order is calculated according to the calculation method set.","type":"object","properties":{"balances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}}}},"tokenization.v28.MaxNumTransfers":{"description":"MaxNumTransfers defines the maximum number of transfers per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the number of transfers for the specified token IDs and ownership times\nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallMaxNumTransfers":{"description":"Overall maximum number of transfers.","type":"string"},"perFromAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"from\" address.","type":"string"},"perInitiatedByAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"initiated by\" address.","type":"string"},"perToAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v28.ResetTimeIntervals"}}},"tokenization.v28.MerkleChallenge":{"description":"Challenges define a rule for the approval in the form of a Merkle challenge.\n\nA Merkle challenge is a challenge where the user must provide a Merkle proof to a Merkle tree. If they provide a valid proof,\nthen the challenge is met. All challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Merkle challenges currently are limited to SHA256 hashes. See documentation for MerkleChallenge for more details and tutorials.\n\nIMPORTANT: We track the number of uses per leaf according to the challengeTrackerId specified by the parent approval of this challenge.\nIf you update the challenge ID, then the used leaves tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this Merkle challenge for tracking the number of uses per leaf.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this Merkle challenge.","type":"string"},"expectedProofLength":{"description":"The expected length of the Merkle path for verification. Used to prevent Merkle path truncation attacks.","type":"string"},"leafSigner":{"description":"Ethereum address that must sign the leaf. Used to protect against man-in-the-middle attacks.\nSignature scheme: sign(leaf + \"-\" + creatorAddress), verified using elliptic curve signature verification.","type":"string"},"maxUsesPerLeaf":{"description":"The maximum number of times each leaf can be used. Must be 1 if useCreatorAddressAsLeaf is false to prevent replay attacks.","type":"string"},"root":{"description":"The root hash of the Merkle tree to which the Merkle path must lead for verification.","type":"string"},"uri":{"description":"The URI associated with this Merkle challenge, optionally providing metadata about the challenge.","type":"string"},"useCreatorAddressAsLeaf":{"description":"If true, we will override the user's leaf for their proof with their creator address. Used for whitelist trees where all leaves are valid BitBadges addresses.","type":"boolean"}}},"tokenization.v28.MerklePathItem":{"description":"MerklePathItem represents an item in a Merkle path.","type":"object","properties":{"aunt":{"description":"The hash of the sibling node (aunt) in the Merkle path.","type":"string"},"onRight":{"description":"Indicates whether the aunt node is on the right side of the path.","type":"boolean"}}},"tokenization.v28.MerkleProof":{"description":"MerkleProof represents a Merkle proof, consistent with Tendermint/Crypto Merkle tree.","type":"object","properties":{"aunts":{"description":"List of Merkle path items (aunts) that make up the proof.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerklePathItem"}},"leaf":{"description":"The hash of the leaf node for which the proof is generated.","type":"string"},"leafSignature":{"description":"The signature of the leaf node tying the address to the leaf node.","type":"string"}}},"tokenization.v28.MsgCastVote":{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","type":"object","properties":{"approvalId":{"description":"The approval ID.","type":"string"},"approvalLevel":{"description":"The approval level (\"collection\", \"incoming\", or \"outgoing\").","type":"string"},"approverAddress":{"description":"The approver address (empty string for collection-level approvals).","type":"string"},"collectionId":{"description":"The collection ID for the voting challenge.","type":"string"},"creator":{"description":"The address of the voter casting the vote.","type":"string"},"proposalId":{"description":"The proposal ID (challenge ID) from the VotingChallenge.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.v28.MsgCastVoteResponse":{"type":"object"},"tokenization.v28.MsgCreateAddressLists":{"description":"MsgCreateAddressLists is used to create address lists.","type":"object","properties":{"addressLists":{"description":"Address lists to create. The createdBy field will be automatically set to the creator address.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.AddressListInput"}},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgCreateAddressListsResponse":{"description":"MsgCreateAddressListsResponse is the response to MsgCreateAddressLists.","type":"object"},"tokenization.v28.MsgCreateCollection":{"description":"MsgCreateCollection is used to create a new collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.AliasPathAddObject"}},"collectionApprovals":{"description":"Collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApproval"}},"collectionMetadata":{"description":"Collection metadata.","$ref":"#/definitions/tokenization.v28.CollectionMetadata"},"collectionPermissions":{"description":"Collection permissions.","$ref":"#/definitions/tokenization.v28.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v28.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v28.InvariantsAddObject"},"isArchived":{"description":"isArchived flag.","type":"boolean"},"manager":{"description":"Manager address.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"Standards entries.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"Token metadata entries.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenMetadata"}},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.MsgCreateCollectionResponse":{"description":"MsgCreateCollectionResponse is the response to MsgCreateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgCreateDynamicStore":{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v28.MsgCreateDynamicStoreResponse":{"description":"MsgCreateDynamicStoreResponse is the response to MsgCreateDynamicStore.","type":"object","properties":{"storeId":{"description":"ID of the dynamic store.","type":"string"}}},"tokenization.v28.MsgDeleteCollection":{"description":"MsgDeleteCollection is used to delete a collection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgDeleteCollectionResponse":{"description":"MsgDeleteCollectionResponse is the response to MsgDeleteCollection.","type":"object"},"tokenization.v28.MsgDeleteDynamicStore":{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store to delete.","type":"string"}}},"tokenization.v28.MsgDeleteDynamicStoreResponse":{"description":"MsgDeleteDynamicStoreResponse is the response to MsgDeleteDynamicStore.","type":"object"},"tokenization.v28.MsgDeleteIncomingApproval":{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgDeleteIncomingApprovalResponse":{"description":"MsgDeleteIncomingApprovalResponse is the response to MsgDeleteIncomingApproval.","type":"object"},"tokenization.v28.MsgDeleteOutgoingApproval":{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgDeleteOutgoingApprovalResponse":{"description":"MsgDeleteOutgoingApprovalResponse is the response to MsgDeleteOutgoingApproval.","type":"object"},"tokenization.v28.MsgPurgeApprovals":{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","type":"object","properties":{"approvalsToPurge":{"description":"Specific approvals to purge. If empty, purges all applicable approvals based on other flags.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ApprovalIdentifierDetails"}},"approverAddress":{"description":"Address of the user whose approvals to purge. If empty, defaults to creator.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"purgeCounterpartyApprovals":{"description":"Whether to purge counterparty approvals (approvals where the creator is the only initiator).","type":"boolean"},"purgeExpired":{"description":"Whether to purge expired approvals (approvals with no future valid transfer times).","type":"boolean"}}},"tokenization.v28.MsgPurgeApprovalsResponse":{"description":"MsgPurgeApprovalsResponse is the response to MsgPurgeApprovals.","type":"object","properties":{"numPurged":{"description":"Number of approvals purged.","type":"string"}}},"tokenization.v28.MsgSetCollectionApprovals":{"type":"object","title":"MsgSetCollectionApprovals sets the collection approvals and canUpdateCollectionApprovals permission","properties":{"canUpdateCollectionApprovals":{"type":"array","title":"Permission to update collection approvals","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApprovalPermission"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApproval"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgSetCollectionApprovalsResponse":{"description":"MsgSetCollectionApprovalsResponse is the response to MsgSetCollectionApprovals.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetCollectionMetadata":{"type":"object","title":"MsgSetCollectionMetadata sets the collection metadata and canUpdateCollectionMetadata permission","properties":{"canUpdateCollectionMetadata":{"type":"array","title":"Permission to update collection metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v28.CollectionMetadata"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgSetCollectionMetadataResponse":{"description":"MsgSetCollectionMetadataResponse is the response to MsgSetCollectionMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetCustomData":{"type":"object","title":"MsgSetCustomData sets the custom data and canUpdateCustomData permission","properties":{"canUpdateCustomData":{"type":"array","title":"Permission to update custom data","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"}}},"tokenization.v28.MsgSetCustomDataResponse":{"description":"MsgSetCustomDataResponse is the response to MsgSetCustomData.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetDynamicStoreValue":{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","type":"object","properties":{"address":{"description":"The address for which to set the value.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store.","type":"string"},"value":{"description":"The boolean value to set (true/false).","type":"boolean"}}},"tokenization.v28.MsgSetDynamicStoreValueResponse":{"description":"MsgSetDynamicStoreValueResponse is the response to MsgSetDynamicStoreValue.","type":"object"},"tokenization.v28.MsgSetIncomingApproval":{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","type":"object","properties":{"approval":{"description":"The incoming approval to set.","$ref":"#/definitions/tokenization.v28.UserIncomingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgSetIncomingApprovalResponse":{"description":"MsgSetIncomingApprovalResponse is the response to MsgSetIncomingApproval.","type":"object"},"tokenization.v28.MsgSetIsArchived":{"type":"object","title":"MsgSetIsArchived sets the isArchived and canArchiveCollection permission","properties":{"canArchiveCollection":{"type":"array","title":"Permission to archive collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"isArchived":{"description":"New isArchived to set.","type":"boolean"}}},"tokenization.v28.MsgSetIsArchivedResponse":{"description":"MsgSetIsArchivedResponse is the response to MsgSetIsArchived.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetManager":{"type":"object","title":"MsgSetManager sets the manager and canUpdateManager permission","properties":{"canUpdateManager":{"type":"array","title":"Permission to update manager","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"manager":{"description":"New manager to set.","type":"string"}}},"tokenization.v28.MsgSetManagerResponse":{"description":"MsgSetManagerResponse is the response to MsgSetManager.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetOutgoingApproval":{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","type":"object","properties":{"approval":{"description":"The outgoing approval to set.","$ref":"#/definitions/tokenization.v28.UserOutgoingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v28.MsgSetOutgoingApprovalResponse":{"description":"MsgSetOutgoingApprovalResponse is the response to MsgSetOutgoingApproval.","type":"object"},"tokenization.v28.MsgSetReservedProtocolAddress":{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","type":"object","properties":{"address":{"description":"Address to set or unset as reserved protocol address.","type":"string"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"isReservedProtocol":{"description":"Whether the address should be a reserved protocol address (true) or not (false).","type":"boolean"}}},"tokenization.v28.MsgSetReservedProtocolAddressResponse":{"description":"MsgSetReservedProtocolAddressResponse is the response to MsgSetReservedProtocolAddress.","type":"object"},"tokenization.v28.MsgSetStandards":{"type":"object","title":"MsgSetStandards sets the standards and canUpdateStandards permission","properties":{"canUpdateStandards":{"type":"array","title":"Permission to update standards","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}}}},"tokenization.v28.MsgSetStandardsResponse":{"description":"MsgSetStandardsResponse is the response to MsgSetStandards.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetTokenMetadata":{"type":"object","title":"MsgSetTokenMetadata sets the token metadata and canUpdateTokenMetadata permission","properties":{"canUpdateTokenMetadata":{"type":"array","title":"Permission to update token metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenMetadata"}}}},"tokenization.v28.MsgSetTokenMetadataResponse":{"description":"MsgSetTokenMetadataResponse is the response to MsgSetTokenMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgSetValidTokenIds":{"type":"object","title":"MsgSetValidTokenIds sets the validTokenIds and canUpdateValidTokenIds permission","properties":{"canUpdateValidTokenIds":{"type":"array","title":"Permission to update valid token IDs","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.MsgSetValidTokenIdsResponse":{"description":"MsgSetValidTokenIdsResponse is the response to MsgSetValidTokenIds.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgTransferTokens":{"description":"MsgTransferTokens is used to transfer tokens.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"transfers":{"description":"Transfers to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Transfer"}}}},"tokenization.v28.MsgTransferTokensResponse":{"description":"MsgTransferTokensResponse is the response to MsgTransferTokens.","type":"object"},"tokenization.v28.MsgUniversalUpdateCollection":{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v28.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v28.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v28.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v28.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.MsgUniversalUpdateCollectionResponse":{"description":"MsgUniversalUpdateCollectionResponse is the response to MsgUniversalUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgUpdateCollection":{"description":"MsgUpdateCollection is used to update a collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v28.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v28.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v28.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.MsgUpdateCollectionResponse":{"description":"MsgUpdateCollectionResponse is the response to MsgUpdateCollection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v28.MsgUpdateDynamicStore":{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The new default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"The global kill switch state (true = enabled, false = disabled/halted).\nCallers should query the current value first if they want to keep it unchanged.","type":"boolean"},"storeId":{"description":"ID of the dynamic store to update.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v28.MsgUpdateDynamicStoreResponse":{"description":"MsgUpdateDynamicStoreResponse is the response to MsgUpdateDynamicStore.","type":"object"},"tokenization.v28.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tokenization.v28.Params"}}},"tokenization.v28.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"tokenization.v28.MsgUpdateUserApprovals":{"description":"MsgUpdateUserApprovals is used to update user approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Auto-approve setting for all incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Auto-approve setting for self-initiated incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Auto-approve setting for self-initiated outgoing transfers.","type":"boolean"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"incomingApprovals":{"description":"New incoming approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserIncomingApproval"}},"outgoingApprovals":{"description":"New outgoing approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserOutgoingApproval"}},"updateAutoApproveAllIncomingTransfers":{"description":"Indicates if auto-approve settings for all incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Indicates if auto-approve settings for self-initiated incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Indicates if auto-approve settings for self-initiated outgoing transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIncomingApprovals":{"description":"Indicates if incoming approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateOutgoingApprovals":{"description":"Indicates if outgoing approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateUserPermissions":{"description":"Indicates if user permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"userPermissions":{"description":"New user permissions to set.","$ref":"#/definitions/tokenization.v28.UserPermissions"}}},"tokenization.v28.MsgUpdateUserApprovalsResponse":{"description":"MsgUpdateUserApprovalsResponse is the response to MsgUpdateUserApprovals.","type":"object"},"tokenization.v28.MustOwnTokens":{"description":"MustOwnTokens represents a condition where a user must own specific tokens\nto be approved to transfer.\n\n- collectionId: The ID of the collection for the tokens that must be owned\n- amountRange: The range of amounts the user must own (min to max)\n- ownershipTimes: The time ranges during which the user must own the tokens.\n- tokenIds: The token IDs the user must own.\n- overrideWithCurrentTime: If true, auto override ownershipTimes with the current time.\n- mustSatisfyForAllAssets: If true, the user must own all specified tokens; otherwise, owning any one for \u003e= 1 millisecond is sufficient.","type":"object","properties":{"amountRange":{"description":"The range of amounts the user must own (min to max).","$ref":"#/definitions/tokenization.v28.UintRange"},"collectionId":{"description":"The ID of the collection.","type":"string"},"mustSatisfyForAllAssets":{"description":"If true, the user must meet ownership requirements for all specified tokens; else, must meet requirements for any single token.","type":"boolean"},"overrideWithCurrentTime":{"description":"If true, override ownershipTimes with the current time.","type":"boolean"},"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user must own the tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"The token IDs the user must own.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.OutgoingApprovalCriteria":{"description":"OutgoingApprovalCriteria defines the criteria for approving outgoing transfers.\nThis is used for user-level outgoing approvals and only includes fields relevant to outgoing transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v28.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v28.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v28.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v28.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v28.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v28.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No sender checks are included for outgoing approvals since the sender is the user themselves.","$ref":"#/definitions/tokenization.v28.AddressChecks"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.VotingChallenge"}}}},"tokenization.v28.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"affiliate_percentage":{"type":"string","title":"affiliate_percentage defines the percentage of the transfer amount that goes to the affiliate"},"allowed_denoms":{"type":"array","title":"allowed_denoms defines the list of denoms that are allowed to be used in coin_transfers","items":{"type":"string"}}}},"tokenization.v28.PathMetadata":{"description":"This message defines the metadata for paths (alias paths and cosmos coin wrapper paths).\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the path metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the path metadata.","type":"string"}}},"tokenization.v28.PrecalculateBalancesFromApprovalDetails":{"description":"PrecalculateBalancesFromApprovalDetails defines the details for precalculating balances from an approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"precalculationOptions":{"description":"The options for precalculating the balances.","$ref":"#/definitions/tokenization.v28.PrecalculationOptions"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v28.PrecalculationOptions":{"description":"PrecalculationOptions defines the options for precalculating the balances.","type":"object","properties":{"overrideTimestamp":{"description":"The timestamp to override with when calculating the balances.","type":"string"},"scalingMultiplier":{"description":"When \u003e 0 and allowAmountScaling is true on the approval, all precalculated balance amounts\nare multiplied by this value. Must be \u003c= maxScalingMultiplier. 0 means no scaling (returns 1x base).","type":"string"},"tokenIdsOverride":{"description":"The IDs to override for the transfer. Only applicable if using this option in precalculation.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.PredeterminedBalances":{"description":"PredeterminedBalances represents balances with predetermined order calculation.","type":"object","properties":{"incrementedBalances":{"description":"Balances that have a starting amount and increment. If this is nil, then we use the manual balances.","$ref":"#/definitions/tokenization.v28.IncrementedBalances"},"manualBalances":{"description":"Manual balances that can be entered. If this is nil, then we use the incremented balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ManualBalances"}},"orderCalculationMethod":{"description":"The method to calculate the order of predetermined balances.","$ref":"#/definitions/tokenization.v28.PredeterminedOrderCalculationMethod"}}},"tokenization.v28.PredeterminedOrderCalculationMethod":{"description":"PredeterminedOrderCalculationMethod defines the method to calculate predetermined balances order.","type":"object","properties":{"challengeTrackerId":{"description":"If useMerkleChallengeLeafIndex is set, then this is the ID of the challenge tracker associated with this calculation method.","type":"string"},"useMerkleChallengeLeafIndex":{"description":"Use the Merkle challenge leaf index to calculate the order. Ex: Transfer that uses leaf index 0 gets the first balance, transfer that uses leaf index 1 gets the second balance, etc.","type":"boolean"},"useOverallNumTransfers":{"description":"Use the overall number of transfers to calculate the order. Ex: First transfer gets the first balance, second transfer gets the second balance, etc.","type":"boolean"},"usePerFromAddressNumTransfers":{"description":"Use the number of transfers per \"from\" address to calculate the order. Ex: First transfer from address A gets the first balance, second transfer from address A gets the second balance, etc.","type":"boolean"},"usePerInitiatedByAddressNumTransfers":{"description":"Use the number of transfers per \"initiated by\" address to calculate the order. Ex: First transfer initiated by address A gets the first balance, second transfer initiated by address A gets the second balance, etc.","type":"boolean"},"usePerToAddressNumTransfers":{"description":"Use the number of transfers per \"to\" address to calculate the order. Ex: First transfer to address A gets the first balance, second transfer to address A gets the second balance, etc.","type":"boolean"}}},"tokenization.v28.RecurringOwnershipTimes":{"description":"RecurringOwnershipTimes represents a list of recurring ownership times.","type":"object","properties":{"chargePeriodLength":{"type":"string","title":"Grace period length where you can charge the next interval (nextStartTime - chargePeriodLength) until (nextStartTime) = charge period"},"intervalLength":{"description":"The interval length in unix milliseconds.","type":"string"},"startTime":{"description":"The original start time of the first interval.","type":"string"}}},"tokenization.v28.ResetTimeIntervals":{"description":"Time intervals to reset the trackers at.","type":"object","properties":{"intervalLength":{"description":"Interval length in unix milliseconds.","type":"string"},"startTime":{"description":"Original start time of the first interval.","type":"string"}}},"tokenization.v28.TokenIdsActionPermission":{"description":"TokenIdsActionPermission defines the permissions for performing an action for specific tokens.\nCurrently, this is only used for creating new tokens.\n\nEx: If you want to lock the ability to create new tokens for tokenIds [1,2] at ownershipTimes 1/1/2020 - 1/1/2021, \nyou could set the combination (tokenIds: [1,2], ownershipTimes: [1/1/2020 - 1/1/2021]) to always be forbidden.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.TokenMetadata":{"description":"This message defines the metadata for specific token IDs.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the token metadata.","type":"string"},"tokenIds":{"description":"The token IDs to which this metadata applies.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the token metadata.","type":"string"}}},"tokenization.v28.Transfer":{"description":"Transfer defines the details of a transfer of tokens.","type":"object","properties":{"balances":{"description":"The balances to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}},"ethSignatureProofs":{"description":"The ETH signature proofs / solutions for all ETH signature challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ETHSignatureProof"}},"from":{"description":"The address of the sender of the transfer.","type":"string"},"memo":{"description":"The memo for the transfer.","type":"string"},"merkleProofs":{"description":"The Merkle proofs / solutions for all Merkle challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.MerkleProof"}},"onlyCheckPrioritizedCollectionApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedIncomingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedOutgoingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"precalculateBalancesFromApproval":{"description":"If defined, we will use the predeterminedBalances from the specified approval to calculate the balances at execution time.\nWe will override the balances field with the precalculated balances. Only applicable for approvals with predeterminedBalances set.","$ref":"#/definitions/tokenization.v28.PrecalculateBalancesFromApprovalDetails"},"prioritizedApprovals":{"description":"The prioritized approvals for the transfer. By default, we scan linearly through the approvals and use the first match.\nThis field can be used to prioritize specific approvals and scan through them first.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ApprovalIdentifierDetails"}},"toAddresses":{"description":"The addresses of the recipients of the transfer.","type":"array","items":{"type":"string"}}}},"tokenization.v28.UintRange":{"description":"The UintRange is a range of IDs from some start to some end (inclusive).\nuintRanges are one of the core types used.\n\nThey are used for everything from token IDs to time ranges to min/max balance amounts.\n\nSee the BitBadges documentation for more information.","type":"object","properties":{"end":{"description":"The ending value of the range (inclusive).","type":"string"},"start":{"description":"The starting value of the range (inclusive).","type":"string"}}},"tokenization.v28.UserBalanceStore":{"description":"UserBalanceStore is the store for the user balances for a collection.\n\nIt consists of a list of balances, a list of approved outgoing transfers, and a list of approved incoming transfers,\nas well as the permissions for updating the approved incoming/outgoing transfers.\n\nUpon initialization, all fields (minus the balances) are set to the defaults specified by the collection.\n\nThe outgoing transfers can be used to allow / disallow transfers which are sent from this user.\nIf a transfer has no match, then it is disallowed by default, unless from == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedOutgoingTransfers is set to true.\n\nThe incoming transfers can be used to allow / disallow transfers which are sent to this user.\nIf a transfer has no match, then it is disallowed by default, unless to == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedIncomingTransfers is set to true.\n\nNote that the user approved transfers are only checked if the collection approved transfers do not specify to override\nthe user approved transfers. \n\nThe permissions are used to determine whether the user can update the approved incoming/outgoing transfers and auto approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Whether to auto-approve all incoming transfers by default. \nThis is just shorthand for adding an accept everything incoming approval\nwith no restrictions.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Whether to auto-approve self-initiated incoming transfers for this user (i.e. to == initiatedBy).","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Whether to auto-approve self-initiated outgoing transfers for this user (i.e. from == initiatedBy).","type":"boolean"},"balances":{"description":"The list of balances associated with this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Balance"}},"incomingApprovals":{"description":"The list of approved incoming transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserIncomingApproval"}},"outgoingApprovals":{"description":"The list of approved outgoing transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserOutgoingApproval"}},"userPermissions":{"description":"The permissions for this user's actions and transfers.","$ref":"#/definitions/tokenization.v28.UserPermissions"}}},"tokenization.v28.UserIncomingApproval":{"description":"UserIncomingApproval defines the rules for the approval of an incoming transfer to a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v28.IncomingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v28.UserIncomingApprovalPermission":{"description":"UserIncomingApprovalPermission defines the permissions for updating the user's approved incoming transfers.\n\nSee CollectionApprovalPermission for more details. This is equivalent without the toListId field because that is always the user.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.UserOutgoingApproval":{"description":"UserOutgoingApproval defines the rules for the approval of an outgoing transfer from a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v28.OutgoingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v28.UserOutgoingApprovalPermission":{"description":"UserOutgoingApprovalPermission defines the permissions for updating the user's approved outgoing transfers.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UintRange"}}}},"tokenization.v28.UserPermissions":{"description":"UserPermissions defines the permissions for the user about their approvals (i.e., what the user can and cannot do).\n\nSee CollectionPermissions for more details on the different types of permissions.\n\ncanUpdateOutgoingApprovals and canUpdateOutgoingApprovals follow the same as the canUpdateCollectionApprovals in CollectionPermissions,\nbut certain fields are removed because they are not relevant to the user.","type":"object","properties":{"canUpdateAutoApproveAllIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for all incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated outgoing transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.ActionPermission"}},"canUpdateIncomingApprovals":{"description":"Permissions related to updating the user's approved incoming transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserIncomingApprovalPermission"}},"canUpdateOutgoingApprovals":{"description":"Permissions related to updating the user's approved outgoing transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.UserOutgoingApprovalPermission"}}}},"tokenization.v28.UserRoyalties":{"description":"UserRoyalties defines the royalties for a user.","type":"object","properties":{"payoutAddress":{"description":"Payout address for the royalties.","type":"string"},"percentage":{"description":"Percentage of the transfer amount to apply as royalties. 1 to 10000 represents basis points.","type":"string"}}},"tokenization.v28.Voter":{"description":"Voter defines a voter with their address and weight.","type":"object","properties":{"address":{"description":"The address of the voter.","type":"string"},"weight":{"description":"The weight of this voter's vote.","type":"string"}}},"tokenization.v28.VotingChallenge":{"description":"VotingChallenge defines a rule for approval in the form of a voting/multi-sig challenge.\nRequires a weighted quorum threshold to be met through votes from specified voters.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Votes are stored separately and can be updated. The threshold is calculated as a percentage\nof total possible weight (all voters), not just voted weight. If you update the proposal ID, then the\nvote tracker will reset and start a new tally. We recommend using a unique proposal ID for each challenge\nto prevent overlap and unexpected behavior.","type":"object","properties":{"customData":{"description":"Arbitrary custom data associated with this voting challenge.","type":"string"},"proposalId":{"type":"string","title":"The ID of this voting challenge for tracking votes (scoped like challengeTrackerId).\nFormat: collectionId-approverAddress-approvalLevel-approvalId-challengeId"},"quorumThreshold":{"description":"The quorum threshold as a percentage (0-100) of total possible weight that must vote \"yes\".\nExample: 50 means 50% of total voter weight must vote yes for approval.","type":"string"},"uri":{"description":"The URI associated with this voting challenge.","type":"string"},"voters":{"description":"List of voters with their weights. Each voter can cast a weighted vote.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v28.Voter"}}}},"tokenization.v29.ActionPermission":{"description":"ActionPermission defines the permissions for performing an action.\n\nThis is simple and straightforward as the only thing we need to check is the permitted/forbidden times.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.AddressChecks":{"type":"object","title":"AddressChecks defines checks for address types (EVM contract, liquidity pool, etc.)","properties":{"mustBeEvmContract":{"description":"Require the address to be an EVM contract (has code).","type":"boolean"},"mustBeLiquidityPool":{"description":"Require the address to be a liquidity pool.","type":"boolean"},"mustNotBeEvmContract":{"description":"Require the address to not be an EVM contract (no code).","type":"boolean"},"mustNotBeLiquidityPool":{"description":"Require the address to not be a liquidity pool.","type":"boolean"}}},"tokenization.v29.AddressListInput":{"description":"AddressListInput is used for creating address lists via MsgCreateAddressLists.\nIt contains all fields from AddressList except createdBy, which is automatically set from the message creator.","type":"object","properties":{"addresses":{"description":"List of addresses included in the list.","type":"array","items":{"type":"string"}},"customData":{"description":"Custom arbitrary data or additional information related to the address list.","type":"string"},"listId":{"description":"Unique identifier for the address list.","type":"string"},"uri":{"description":"URI (Uniform Resource Identifier) associated with the address list to provide metadata, if applicable.","type":"string"},"whitelist":{"description":"Indicates whether the list includes the specified addresses (true) or excludes them (false).","type":"boolean"}}},"tokenization.v29.AliasPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v29.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DenomUnit"}},"metadata":{"description":"The metadata for this alias path.","$ref":"#/definitions/tokenization.v29.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v29.AltTimeChecks":{"type":"object","title":"AltTimeChecks defines alternative time-based checks for approval denial.\nIf the transfer time falls within any of the specified offline hours or days, the approval is denied.\nUses UTC timezone for neutral timezone approach.\nofflineHours: ranges of hours (0-23) when transfers should be denied\nofflineDays: ranges of days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied","properties":{"offlineDays":{"description":"Days (0-6, where 0=Sunday, 1=Monday, ..., 6=Saturday) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"offlineDaysOfMonth":{"description":"Days of month (1-31) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"offlineHours":{"description":"Hours (0-23) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"offlineMonths":{"description":"Months (1-12, where 1=January, 12=December) when transfers should be denied.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"offlineWeeksOfYear":{"description":"Weeks of year (1-52) when transfers should be denied. Uses ISO 8601 week numbering.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"timezoneOffsetMinutes":{"description":"Timezone offset magnitude in minutes from UTC. Default 0 = UTC. Examples: 300 for EST (UTC-5), 330 for IST (UTC+5:30).\nAll time checks are evaluated after applying this offset to the block time.","type":"string"},"timezoneOffsetNegative":{"type":"boolean","title":"If true, the timezone offset is subtracted (west of UTC). If false, it is added (east of UTC).\nExample: EST (UTC-5) = timezoneOffsetMinutes: 300, timezoneOffsetNegative: true"}}},"tokenization.v29.ApprovalAmounts":{"description":"ApprovalAmounts defines approval amounts per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the amounts transferred for the specified token IDs and ownership times \nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallApprovalAmount":{"description":"Overall approval amount.","type":"string"},"perFromAddressApprovalAmount":{"description":"Approval amount per \"from\" address.","type":"string"},"perInitiatedByAddressApprovalAmount":{"description":"Approval amount per \"initiated by\" address.","type":"string"},"perToAddressApprovalAmount":{"description":"Approval amount per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v29.ResetTimeIntervals"}}},"tokenization.v29.ApprovalChange":{"description":"ApprovalChange represents a change to an approval (created, edited, or deleted).","type":"object","properties":{"action":{"type":"string"},"approvalId":{"type":"string"},"approvalLevel":{"type":"string"},"version":{"type":"string"}}},"tokenization.v29.ApprovalCriteria":{"description":"ApprovalCriteria defines the criteria for approving transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"allowBackedMinting":{"description":"If true, this collection approval allows backed minting operations (CosmosCoinBackedPath).\nWhen false, this approval cannot be used for transfers involving backed minting addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"allowSpecialWrapping":{"description":"If true, this collection approval allows special wrapping operations (CosmosCoinWrapperPath).\nWhen false, this approval cannot be used for transfers involving wrapping addresses.\nThis prevents accidental allowances when toListIds is \"All\".","type":"boolean"},"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v29.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v29.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v29.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v29.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"overridesFromOutgoingApprovals":{"description":"Overrides the user's outgoing approvals for approval. If true, this collection-level approval\ntakes precedence over any outgoing approvals defined by the sender, allowing the collection to\ncontrol outgoing transfer behavior.","type":"boolean"},"overridesToIncomingApprovals":{"description":"Overrides the user's incoming approvals for approval. If true, this collection-level approval\ntakes precedence over any incoming approvals defined by the recipient, allowing the collection to\ncontrol incoming transfer behavior.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v29.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"userApprovalSettings":{"description":"Issuer-imposed constraints on user-level coin transfers. Propagated to user-level approvals\nduring greedy transfer matching (same pattern as userRoyalties). Only applicable on collection-level approvals.\nIf conflicting settings across multiple matched approvals, the transfer is rejected (like royalties).","$ref":"#/definitions/tokenization.v29.UserApprovalSettings"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.VotingChallenge"}}}},"tokenization.v29.ApprovalIdentifierDetails":{"description":"ApprovalIdentifierDetails defines the details to identify a specific approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v29.ApprovalUsed":{"description":"ApprovalUsed represents an approval that was consumed during a transfer.","type":"object","properties":{"approvalId":{"type":"string"},"approvalLevel":{"type":"string"},"approverAddress":{"type":"string"},"version":{"type":"string"}}},"tokenization.v29.AutoDeletionOptions":{"description":"AutoDeletionOptions defines the options for auto-deletion of approvals.","type":"object","properties":{"afterOneUse":{"type":"boolean","title":"After one use?"},"afterOverallMaxNumTransfers":{"type":"boolean","title":"After overall max number of uses threshold is met?"},"allowCounterpartyPurge":{"type":"boolean","title":"Allow counterparty to purge this approval if they are the only initiator"},"allowPurgeIfExpired":{"type":"boolean","title":"Allow others to call PurgeApprovals on behalf of this approval owner"}}},"tokenization.v29.Balance":{"description":"Balance represents the balance of a token for a specific user.\nThe user amounts xAmount of a token specified for the time ranges specified.\n\nExample: User A owns x10 of token IDs 1-10 from 1/1/2020 to 1/1/2021.\n\nIf times or tokenIDs have len \u003e 1, then the user owns all token IDs specified for all time ranges specified.","type":"object","properties":{"amount":{"description":"The amount of the token owned by the user.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"The token IDs for which the user owns the token.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.CoinTransfer":{"type":"object","properties":{"coins":{"description":"The sdk.Coins to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"overrideFromWithApproverAddress":{"description":"By default, the from address is the initiator of the transaction.\nIf this is set to true, we will override the from address with the approver address.\nNote: This is not applicable for collection approvals (since approverAddress == '').","type":"boolean"},"overrideToWithInitiator":{"description":"By default, the to address is what is specified in the coin transfer.\nIf this is set to true, we will override the to address with the initiator of the transaction.","type":"boolean"},"to":{"description":"The address of the recipient of the transfer.","type":"string"}}},"tokenization.v29.CoinTransferProto":{"description":"CoinTransferProto represents a coin transfer that occurred during a transaction.","type":"object","properties":{"amount":{"type":"string"},"denom":{"type":"string"},"from":{"type":"string"},"isProtocolFee":{"type":"boolean"},"to":{"type":"string"}}},"tokenization.v29.CollectionApproval":{"type":"object","title":"CollectionApproval defines the rules for the approval of a transfer on the collection level","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v29.ApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v29.CollectionApprovalPermission":{"description":"CollectionApprovalPermission defines what collection approved transfers can be updated vs. are locked.\n\nEach transfer is broken down to a (from, to, initiatedBy, transferTime, tokenId) tuple.\nFor a transfer to match, we need to match ALL of the fields in the combination. \nThese are determined by the fromListId, toListId, initiatedByListId, transferTimes, tokenIds fields.\nAddressLists are used for (from, to, initiatedBy) which are a permanent list of addresses identified by an ID (see AddressLists). \n\npermanentlyPermitted/ForbiddenTimes: when can the manager execute this permission?\n\nEx: Let's say we are updating the transferability for the transfer tuple (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", 10, 1000).\nWe would check to find the FIRST CollectionApprovalPermission that matches this combination.\nIf we find a match, we would check the permitted/forbidden times to see if we can execute this permission (default is ALLOWED).\n\nEx: So if you wanted to freeze the transferability to enforce that token ID 1 will always be transferable, you could set\nthe combination (\"AllWithoutMint\", \"AllWithoutMint\", \"AllWithoutMint\", \"All Transfer Times\", 1) to always be forbidden.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.CollectionMetadata":{"description":"This message defines the metadata for the collection.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the collection metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the collection metadata.","type":"string"}}},"tokenization.v29.CollectionPermissions":{"description":"CollectionPermissions defines the permissions for the collection (i.e., what the manager can and cannot do).\n\nThere are three types of permissions for a collection: ActionPermission, TokenIdsActionPermission, and CollectionApprovalPermission.\n\nThe permission type allows fine-grained access control for each action.\n- ActionPermission: defines when the manager can perform an action or update a field.\n- TokenIdsActionPermission: defines when the manager can perform an action for specific tokens\n- CollectionApprovalPermission: defines when the manager can update the transferability of the collection and what transfers can be updated vs. locked.\n\nNote there are a few different times here which could get confusing:\n- permanentlyPermitted/ForbiddenTimes - the times that a permission can be performed\n- transferTimes - the times that a transfer occurs\n- ownershipTimes - the times when a token is owned by a user\n\nThe permitted/permanentlyForbiddenTimes are used to determine when a permission can be executed.\nOnce a time is set to be permitted or forbidden, it is PERMANENT and cannot be changed.\nIf a time is not set to be permitted or forbidden, it is considered NEUTRAL and can be updated but is ALLOWED by default.\n\nIMPORTANT: We take first-match only for the permissions. This means that if you forbid time T in array index 0 and permit time T in index 1, \nwe will only check the first permission (forbid time T) and not the second permission (permit time T).","type":"object","properties":{"canAddMoreAliasPaths":{"description":"Permissions related to adding more alias paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canAddMoreCosmosCoinWrapperPaths":{"description":"Permissions related to adding more cosmos coin wrapper paths to the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canArchiveCollection":{"description":"Permissions related to archiving the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canDeleteCollection":{"description":"Permissions related to deleting the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateCollectionApprovals":{"description":"Permissions related to updating collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApprovalPermission"}},"canUpdateCollectionMetadata":{"description":"Permissions related to updating the metadata of the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateCustomData":{"description":"Permissions related to updating custom data for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateManager":{"description":"Permissions related to updating the collection's manager.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateStandards":{"description":"Permissions related to updating standards for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateTokenMetadata":{"description":"Permissions related to updating token metadata for specific tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenIdsActionPermission"}},"canUpdateValidTokenIds":{"description":"Permissions related to creating more tokens for the collection.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenIdsActionPermission"}}}},"tokenization.v29.Conversion":{"description":"Conversion defines a bidirectional conversion between a cosmos coin (with denom) and token balances.","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin side of the conversion (amount + denom).","$ref":"#/definitions/tokenization.v29.ConversionSideAWithDenom"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}}}},"tokenization.v29.ConversionSideA":{"description":"ConversionSideA represents the cosmos coin amount side of a conversion without denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"}}},"tokenization.v29.ConversionSideAWithDenom":{"description":"ConversionSideAWithDenom represents the cosmos coin side of a conversion with denomination.","type":"object","properties":{"amount":{"description":"The amount of the cosmos coin (0 decimals).","type":"string"},"denom":{"description":"The denomination of the cosmos coin.","type":"string"}}},"tokenization.v29.ConversionWithoutDenom":{"description":"ConversionWithoutDenom defines a bidirectional conversion between a cosmos coin amount (without denom) and token balances.\nThe denom is stored at the base level (e.g., in AliasPath or CosmosCoinWrapperPath).","type":"object","properties":{"sideA":{"description":"Side A: The cosmos coin amount side of the conversion (amount only, denom stored separately).","$ref":"#/definitions/tokenization.v29.ConversionSideA"},"sideB":{"description":"Side B: The token balances side of the conversion.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}}}},"tokenization.v29.CosmosCoinBackedPathAddObject":{"type":"object","properties":{"conversion":{"$ref":"#/definitions/tokenization.v29.Conversion"}}},"tokenization.v29.CosmosCoinWrapperPathAddObject":{"type":"object","properties":{"allowOverrideWithAnyValidToken":{"type":"boolean"},"conversion":{"$ref":"#/definitions/tokenization.v29.ConversionWithoutDenom"},"denom":{"type":"string"},"denomUnits":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DenomUnit"}},"metadata":{"description":"The metadata for this wrapper path.","$ref":"#/definitions/tokenization.v29.PathMetadata"},"symbol":{"type":"string"}}},"tokenization.v29.DenomUnit":{"type":"object","properties":{"decimals":{"description":"The number of decimal places for this unit. Defines the precision of the unit.","type":"string"},"isDefaultDisplay":{"description":"If true, this is the default display unit. Only one unit should be marked as the default display unit.\nThis unit will be used by default when displaying the coin amount. If none are marked default, we use the base level.","type":"boolean"},"metadata":{"description":"The metadata for this denomination unit.","$ref":"#/definitions/tokenization.v29.PathMetadata"},"symbol":{"description":"The symbol for this unit (e.g., \"BADGE\", \"nBADGE\"). Used for display purposes.","type":"string"}}},"tokenization.v29.DynamicStoreChallenge":{"description":"DynamicStoreChallenge defines a challenge that requires the initiator to pass a dynamic store check.","type":"object","properties":{"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"storeId":{"description":"The ID of the dynamic store to check.","type":"string"}}},"tokenization.v29.ETHSignatureChallenge":{"description":"ETHSignatureChallenge defines a rule for the approval in the form of an Ethereum signature challenge.\n\nAn ETH signature challenge is a challenge where the user must provide a valid Ethereum signature for a specific nonce.\nThe signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId) and each signature can only be used once.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: We track the usage of each signature to prevent replay attacks. Each signature can only be used once.\nIf you update the challenge ID, then the used signatures tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this ETH signature challenge for tracking the number of uses per signature.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this ETH signature challenge.","type":"string"},"signer":{"description":"The Ethereum address that must sign the nonce for verification.","type":"string"},"uri":{"description":"The URI associated with this ETH signature challenge, optionally providing metadata about the challenge.","type":"string"}}},"tokenization.v29.ETHSignatureProof":{"description":"ETHSignatureProof represents an Ethereum signature proof for a challenge.","type":"object","properties":{"nonce":{"description":"The nonce that was signed. The signature scheme is ETHSign(nonce + \"-\" + initiatorAddress + \"-\" + collectionId + \"-\" + approverAddress + \"-\" + approvalLevel + \"-\" + approvalId + \"-\" + challengeId).","type":"string"},"signature":{"description":"The Ethereum signature of the nonce.","type":"string"}}},"tokenization.v29.EVMQueryChallenge":{"description":"EVMQueryChallenge defines a rule for approval via read-only EVM contract query.\n\nThe challenge executes a staticcall to the specified contract with the given calldata.\nThe result is compared against the expected result (if provided) or checked for non-zero return.\n\nIMPORTANT: This is read-only and cannot modify state. The query is executed with a gas limit\nto prevent DoS attacks. All results are deterministic since EVM state is consistent within a block.","type":"object","properties":{"calldata":{"type":"string","title":"ABI-encoded function selector + arguments (hex string without 0x prefix)\nExample: \"70a08231000000000000000000000000{address}\" for balanceOf(address)\nCan use placeholders: $initiator, $sender, $recipient (replaced at runtime)"},"comparisonOperator":{"description":"Comparison operator: \"eq\" (equals), \"ne\" (not equals), \"gt\" (greater than), \"gte\", \"lt\", \"lte\"\nOnly \"eq\" and \"ne\" work for non-numeric types. Default is \"eq\".","type":"string"},"contractAddress":{"type":"string","title":"The EVM contract address to query (0x format or bb1 format)"},"customData":{"type":"string","title":"Arbitrary custom data"},"expectedResult":{"description":"Expected return value (hex string without 0x prefix). If empty, any non-error result passes.\nFor boolean checks, use \"0000...0001\" for true.","type":"string"},"gasLimit":{"type":"string","title":"Gas limit for the query (default 100000, max 500000)"},"uri":{"type":"string","title":"The URI associated with this challenge (metadata)"}}},"tokenization.v29.IncomingApprovalCriteria":{"description":"IncomingApprovalCriteria defines the criteria for approving incoming transfers.\nThis is used for user-level incoming approvals and only includes fields relevant to incoming transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v29.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v29.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v29.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v29.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v29.PredeterminedBalances"},"requireFromDoesNotEqualInitiatedBy":{"description":"Require the \"from\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the sender equals the initiator are forbidden.","type":"boolean"},"requireFromEqualsInitiatedBy":{"description":"Require the \"from\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the sender matches the initiator are allowed.","type":"boolean"},"senderChecks":{"description":"Address checks for the sender of the transfer. Validates that the sender address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No recipient checks are included for incoming approvals since the recipient is the user themselves.","$ref":"#/definitions/tokenization.v29.AddressChecks"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.VotingChallenge"}}}},"tokenization.v29.IncrementedBalances":{"description":"IncrementedBalances represents balances that are incremented by specific amounts, according to the order calculation method.","type":"object","properties":{"allowAmountScaling":{"description":"When true, the actual transfer can be any evenly divisible integer multiple (\u003e=1x) of startBalances.\napprovalCriteria.coinTransfers are scaled by the same multiplier.\nAll other IncrementedBalances fields must be zero/false/nil when this is true.","type":"boolean"},"allowOverrideTimestamp":{"description":"Whether to allow overriding the timestamp for the balances (only applicable with durationFromTimestamp set).","type":"boolean"},"allowOverrideWithAnyValidToken":{"type":"boolean","title":"Allow override of any valid ID"},"durationFromTimestamp":{"description":"The amount of unix milliseconds to approve starting from now. Incompatible with incrementOwnershipTimesBy.","type":"string"},"incrementOwnershipTimesBy":{"description":"The amount by which to increment ownership times. Incompatible with approveStartingFromNowBy.","type":"string"},"incrementTokenIdsBy":{"description":"The amount by which to increment token IDs.","type":"string"},"maxScalingMultiplier":{"description":"Maximum allowed scaling multiplier. Must be \u003e 0 when allowAmountScaling is true.\nThe chain rejects transfers where the computed multiplier exceeds this cap.\nIgnored (set to \"0\") when allowAmountScaling is false.","type":"string"},"recurringOwnershipTimes":{"description":"Recurring ownership times.","$ref":"#/definitions/tokenization.v29.RecurringOwnershipTimes"},"startBalances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}}}},"tokenization.v29.InvariantsAddObject":{"description":"InvariantsAddObject is used for adding invariants without specifying addresses.\nAddresses are generated by the keeper and stored in the collection.","type":"object","properties":{"cosmosCoinBackedPath":{"description":"The IBC backed (sdk.coin) path for the collection. Only one path is allowed.\nAddress will be generated by the keeper.","$ref":"#/definitions/tokenization.v29.CosmosCoinBackedPathAddObject"},"disablePoolCreation":{"description":"If true, disallows pool creation with this collection's assets.\nWhen true, any attempt to create a pool with tokenization assets from this collection will fail.","type":"boolean"},"evmQueryChallenges":{"type":"array","title":"EVM query invariants that must pass after all transfers complete.\nThese are checked once per message after all balance updates, with access to ALL recipient addresses.\nPlaceholders: $sender, $recipients (comma-separated), $initiator, $collectionId, $recipient","items":{"type":"object","$ref":"#/definitions/tokenization.v29.EVMQueryChallenge"}},"maxSupplyPerId":{"description":"Maximum supply per token ID. Checked against Total address balances after transfers complete.\nA value of 0 means no limit (unlimited).","type":"string"},"noCustomOwnershipTimes":{"description":"If true, all ownership times must be full ranges [{ start: 1, end: GoMaxUInt64 }].\nThis prevents time-based restrictions on token ownership.","type":"boolean"},"noForcefulPostMintTransfers":{"description":"If true, disallows any collection approvals that have overridesFromOutgoingApprovals or overridesToIncomingApprovals set to true.\nThis prevents forceful transfers that bypass user-level approvals.\nThis only applies to transfers where the from address does not equal \"Mint\".","type":"boolean"}}},"tokenization.v29.ManualBalances":{"description":"ManualBalances represents a list of manual balances entered for the predetermined balances criteria. Order is calculated according to the calculation method set.","type":"object","properties":{"balances":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}}}},"tokenization.v29.MaxNumTransfers":{"description":"MaxNumTransfers defines the maximum number of transfers per unique \"from,\" \"to,\" and/or \"initiated by\" address.\nIf any of these are nil or \"0\", we assume unlimited approvals.\nIf they are set to a value, then the running tally of the number of transfers for the specified token IDs and ownership times\nmust not exceed the corresponding value.","type":"object","properties":{"amountTrackerId":{"description":"The ID of the amount tracker associated with this approval.\nWe use this ID to track the number of transfers and amounts transferred.","type":"string"},"overallMaxNumTransfers":{"description":"Overall maximum number of transfers.","type":"string"},"perFromAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"from\" address.","type":"string"},"perInitiatedByAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"initiated by\" address.","type":"string"},"perToAddressMaxNumTransfers":{"description":"Maximum number of transfers per \"to\" address.","type":"string"},"resetTimeIntervals":{"description":"Time intervals to reset the trackers at.","$ref":"#/definitions/tokenization.v29.ResetTimeIntervals"}}},"tokenization.v29.MerkleChallenge":{"description":"Challenges define a rule for the approval in the form of a Merkle challenge.\n\nA Merkle challenge is a challenge where the user must provide a Merkle proof to a Merkle tree. If they provide a valid proof,\nthen the challenge is met. All challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Merkle challenges currently are limited to SHA256 hashes. See documentation for MerkleChallenge for more details and tutorials.\n\nIMPORTANT: We track the number of uses per leaf according to the challengeTrackerId specified by the parent approval of this challenge.\nIf you update the challenge ID, then the used leaves tracker will reset and start a new tally.\nWe recommend using a unique challenge ID for each challenge to prevent overlap and unexpected behavior.","type":"object","properties":{"challengeTrackerId":{"description":"The ID of this Merkle challenge for tracking the number of uses per leaf.","type":"string"},"customData":{"description":"Arbitrary custom data associated with this Merkle challenge.","type":"string"},"expectedProofLength":{"description":"The expected length of the Merkle path for verification. Used to prevent Merkle path truncation attacks.","type":"string"},"leafSigner":{"description":"Ethereum address that must sign the leaf. Used to protect against man-in-the-middle attacks.\nSignature scheme: sign(leaf + \"-\" + creatorAddress), verified using elliptic curve signature verification.","type":"string"},"maxUsesPerLeaf":{"description":"The maximum number of times each leaf can be used. Must be 1 if useCreatorAddressAsLeaf is false to prevent replay attacks.","type":"string"},"root":{"description":"The root hash of the Merkle tree to which the Merkle path must lead for verification.","type":"string"},"uri":{"description":"The URI associated with this Merkle challenge, optionally providing metadata about the challenge.","type":"string"},"useCreatorAddressAsLeaf":{"description":"If true, we will override the user's leaf for their proof with their creator address. Used for whitelist trees where all leaves are valid BitBadges addresses.","type":"boolean"}}},"tokenization.v29.MerklePathItem":{"description":"MerklePathItem represents an item in a Merkle path.","type":"object","properties":{"aunt":{"description":"The hash of the sibling node (aunt) in the Merkle path.","type":"string"},"onRight":{"description":"Indicates whether the aunt node is on the right side of the path.","type":"boolean"}}},"tokenization.v29.MerkleProof":{"description":"MerkleProof represents a Merkle proof, consistent with Tendermint/Crypto Merkle tree.","type":"object","properties":{"aunts":{"description":"List of Merkle path items (aunts) that make up the proof.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerklePathItem"}},"leaf":{"description":"The hash of the leaf node for which the proof is generated.","type":"string"},"leafSignature":{"description":"The signature of the leaf node tying the address to the leaf node.","type":"string"}}},"tokenization.v29.MsgCastVote":{"description":"MsgCastVote allows a voter to cast or update their vote for a voting challenge.","type":"object","properties":{"approvalId":{"description":"The approval ID.","type":"string"},"approvalLevel":{"description":"The approval level (\"collection\", \"incoming\", or \"outgoing\").","type":"string"},"approverAddress":{"description":"The approver address (empty string for collection-level approvals).","type":"string"},"collectionId":{"description":"The collection ID for the voting challenge.","type":"string"},"creator":{"description":"The address of the voter casting the vote.","type":"string"},"proposalId":{"description":"The proposal ID (challenge ID) from the VotingChallenge.","type":"string"},"yesWeight":{"description":"The percentage weight (0-100) allocated to \"yes\" vote.\nThe remaining percentage (100 - yesWeight) is allocated to \"no\" vote.\nExample: yesWeight=70 means 70% yes, 30% no.","type":"string"}}},"tokenization.v29.MsgCastVoteResponse":{"type":"object"},"tokenization.v29.MsgCreateAddressLists":{"description":"MsgCreateAddressLists is used to create address lists.","type":"object","properties":{"addressLists":{"description":"Address lists to create. The createdBy field will be automatically set to the creator address.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.AddressListInput"}},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgCreateAddressListsResponse":{"description":"MsgCreateAddressListsResponse is the response to MsgCreateAddressLists.","type":"object"},"tokenization.v29.MsgCreateCollection":{"description":"MsgCreateCollection is used to create a new collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.AliasPathAddObject"}},"collectionApprovals":{"description":"Collection approvals.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApproval"}},"collectionMetadata":{"description":"Collection metadata.","$ref":"#/definitions/tokenization.v29.CollectionMetadata"},"collectionPermissions":{"description":"Collection permissions.","$ref":"#/definitions/tokenization.v29.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v29.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v29.InvariantsAddObject"},"isArchived":{"description":"isArchived flag.","type":"boolean"},"manager":{"description":"Manager address.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"Standards entries.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"Token metadata entries.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenMetadata"}},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.MsgCreateCollectionResponse":{"description":"MsgCreateCollectionResponse is the response to MsgCreateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgCreateDynamicStore":{"description":"MsgCreateDynamicStore is used to create a new dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The default value for uninitialized addresses (true/false).","type":"boolean"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v29.MsgCreateDynamicStoreResponse":{"description":"MsgCreateDynamicStoreResponse is the response to MsgCreateDynamicStore.","type":"object","properties":{"reviewItems":{"type":"array","items":{"type":"string"}},"storeId":{"description":"ID of the dynamic store.","type":"string"}}},"tokenization.v29.MsgDeleteCollection":{"description":"MsgDeleteCollection is used to delete a collection.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgDeleteCollectionResponse":{"description":"MsgDeleteCollectionResponse is the response to MsgDeleteCollection.","type":"object"},"tokenization.v29.MsgDeleteDynamicStore":{"description":"MsgDeleteDynamicStore is used to delete a dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store to delete.","type":"string"}}},"tokenization.v29.MsgDeleteDynamicStoreResponse":{"description":"MsgDeleteDynamicStoreResponse is the response to MsgDeleteDynamicStore.","type":"object"},"tokenization.v29.MsgDeleteIncomingApproval":{"description":"MsgDeleteIncomingApproval is a helper message to delete a single incoming approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgDeleteIncomingApprovalResponse":{"description":"MsgDeleteIncomingApprovalResponse is the response to MsgDeleteIncomingApproval.","type":"object","properties":{"found":{"type":"boolean"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.v29.MsgDeleteOutgoingApproval":{"description":"MsgDeleteOutgoingApproval is a helper message to delete a single outgoing approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval to delete.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgDeleteOutgoingApprovalResponse":{"description":"MsgDeleteOutgoingApprovalResponse is the response to MsgDeleteOutgoingApproval.","type":"object","properties":{"found":{"type":"boolean"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.v29.MsgPurgeApprovals":{"description":"MsgPurgeApprovals is a helper message to purge expired approvals.","type":"object","properties":{"approvalsToPurge":{"description":"Specific approvals to purge. If empty, purges all applicable approvals based on other flags.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalIdentifierDetails"}},"approverAddress":{"description":"Address of the user whose approvals to purge. If empty, defaults to creator.","type":"string"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"purgeCounterpartyApprovals":{"description":"Whether to purge counterparty approvals (approvals where the creator is the only initiator).","type":"boolean"},"purgeExpired":{"description":"Whether to purge expired approvals (approvals with no future valid transfer times).","type":"boolean"}}},"tokenization.v29.MsgPurgeApprovalsResponse":{"description":"MsgPurgeApprovalsResponse is the response to MsgPurgeApprovals.","type":"object","properties":{"numPurged":{"description":"Number of approvals purged.","type":"string"},"purgedApprovalIds":{"type":"array","items":{"type":"string"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgSetCollectionApprovals":{"type":"object","title":"MsgSetCollectionApprovals sets the collection approvals and canUpdateCollectionApprovals permission","properties":{"canUpdateCollectionApprovals":{"type":"array","title":"Permission to update collection approvals","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApprovalPermission"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApproval"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgSetCollectionApprovalsResponse":{"description":"MsgSetCollectionApprovalsResponse is the response to MsgSetCollectionApprovals.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgSetCollectionMetadata":{"type":"object","title":"MsgSetCollectionMetadata sets the collection metadata and canUpdateCollectionMetadata permission","properties":{"canUpdateCollectionMetadata":{"type":"array","title":"Permission to update collection metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v29.CollectionMetadata"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgSetCollectionMetadataResponse":{"description":"MsgSetCollectionMetadataResponse is the response to MsgSetCollectionMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetCustomData":{"type":"object","title":"MsgSetCustomData sets the custom data and canUpdateCustomData permission","properties":{"canUpdateCustomData":{"type":"array","title":"Permission to update custom data","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"}}},"tokenization.v29.MsgSetCustomDataResponse":{"description":"MsgSetCustomDataResponse is the response to MsgSetCustomData.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetDynamicStoreValue":{"description":"MsgSetDynamicStoreValue is used to set a boolean value for a specific address in a dynamic store.","type":"object","properties":{"address":{"description":"The address for which to set the value.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"storeId":{"description":"ID of the dynamic store.","type":"string"},"value":{"description":"The boolean value to set (true/false).","type":"boolean"}}},"tokenization.v29.MsgSetDynamicStoreValueResponse":{"description":"MsgSetDynamicStoreValueResponse is the response to MsgSetDynamicStoreValue.","type":"object","properties":{"previousValue":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgSetIncomingApproval":{"description":"MsgSetIncomingApproval is a helper message to set a single incoming approval.","type":"object","properties":{"approval":{"description":"The incoming approval to set.","$ref":"#/definitions/tokenization.v29.UserIncomingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgSetIncomingApprovalResponse":{"description":"MsgSetIncomingApprovalResponse is the response to MsgSetIncomingApproval.","type":"object","properties":{"action":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.v29.MsgSetIsArchived":{"type":"object","title":"MsgSetIsArchived sets the isArchived and canArchiveCollection permission","properties":{"canArchiveCollection":{"type":"array","title":"Permission to archive collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"isArchived":{"description":"New isArchived to set.","type":"boolean"}}},"tokenization.v29.MsgSetIsArchivedResponse":{"description":"MsgSetIsArchivedResponse is the response to MsgSetIsArchived.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetManager":{"type":"object","title":"MsgSetManager sets the manager and canUpdateManager permission","properties":{"canUpdateManager":{"type":"array","title":"Permission to update manager","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"manager":{"description":"New manager to set.","type":"string"}}},"tokenization.v29.MsgSetManagerResponse":{"description":"MsgSetManagerResponse is the response to MsgSetManager.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetOutgoingApproval":{"description":"MsgSetOutgoingApproval is a helper message to set a single outgoing approval.","type":"object","properties":{"approval":{"description":"The outgoing approval to set.","$ref":"#/definitions/tokenization.v29.UserOutgoingApproval"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"}}},"tokenization.v29.MsgSetOutgoingApprovalResponse":{"description":"MsgSetOutgoingApprovalResponse is the response to MsgSetOutgoingApproval.","type":"object","properties":{"action":{"type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}},"version":{"type":"string"}}},"tokenization.v29.MsgSetReservedProtocolAddress":{"description":"MsgSetReservedProtocolAddress sets or unsets a reserved protocol address (governance-only).","type":"object","properties":{"address":{"description":"Address to set or unset as reserved protocol address.","type":"string"},"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"isReservedProtocol":{"description":"Whether the address should be a reserved protocol address (true) or not (false).","type":"boolean"}}},"tokenization.v29.MsgSetReservedProtocolAddressResponse":{"description":"MsgSetReservedProtocolAddressResponse is the response to MsgSetReservedProtocolAddress.","type":"object"},"tokenization.v29.MsgSetStandards":{"type":"object","title":"MsgSetStandards sets the standards and canUpdateStandards permission","properties":{"canUpdateStandards":{"type":"array","title":"Permission to update standards","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgSetStandardsResponse":{"description":"MsgSetStandardsResponse is the response to MsgSetStandards.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetTokenMetadata":{"type":"object","title":"MsgSetTokenMetadata sets the token metadata and canUpdateTokenMetadata permission","properties":{"canUpdateTokenMetadata":{"type":"array","title":"Permission to update token metadata","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenMetadata"}}}},"tokenization.v29.MsgSetTokenMetadataResponse":{"description":"MsgSetTokenMetadataResponse is the response to MsgSetTokenMetadata.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgSetValidTokenIds":{"type":"object","title":"MsgSetValidTokenIds sets the validTokenIds and canUpdateValidTokenIds permission","properties":{"canUpdateValidTokenIds":{"type":"array","title":"Permission to update valid token IDs","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenIdsActionPermission"}},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.MsgSetValidTokenIdsResponse":{"description":"MsgSetValidTokenIdsResponse is the response to MsgSetValidTokenIds.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"}}},"tokenization.v29.MsgTransferTokens":{"description":"MsgTransferTokens is used to transfer tokens.","type":"object","properties":{"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"transfers":{"description":"Transfers to execute.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Transfer"}}}},"tokenization.v29.MsgTransferTokensResponse":{"description":"MsgTransferTokensResponse is the response to MsgTransferTokens.","type":"object","properties":{"approvalsUsed":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalUsed"}},"balancesTransferred":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}},"coinTransfers":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CoinTransferProto"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgUniversalUpdateCollection":{"description":"MsgUniversalUpdateCollection is used to define MsgServer types for all requests and responses for Msgs of the tokens module.\nIt is a universal interface that can be used for both creating and updating collections.\nWe have it defined for legacy purposes, but it is recommended to use MsgCreateCollection and MsgUpdateCollection instead.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v29.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v29.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"defaultBalances":{"title":"The default balances for the user","$ref":"#/definitions/tokenization.v29.UserBalanceStore"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v29.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.MsgUniversalUpdateCollectionResponse":{"description":"MsgUniversalUpdateCollectionResponse is the response to MsgUniversalUpdateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgUpdateCollection":{"description":"MsgUpdateCollection is used to update a collection.","type":"object","properties":{"aliasPathsToAdd":{"description":"Alias (non-wrapping) paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.AliasPathAddObject"}},"collectionApprovals":{"description":"New collection approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CollectionApproval"}},"collectionId":{"description":"ID of the collection (0 for new collection).","type":"string"},"collectionMetadata":{"description":"New collection metadata to set.","$ref":"#/definitions/tokenization.v29.CollectionMetadata"},"collectionPermissions":{"description":"New collection permissions to set.","$ref":"#/definitions/tokenization.v29.CollectionPermissions"},"cosmosCoinWrapperPathsToAdd":{"description":"IBC wrapper paths to add.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CosmosCoinWrapperPathAddObject"}},"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"New custom data to set.","type":"string"},"invariants":{"description":"Collection-level invariants that cannot be broken.\nThese are set upon genesis and cannot be modified.\nAddresses are generated by the keeper and stored in the collection.","$ref":"#/definitions/tokenization.v29.InvariantsAddObject"},"isArchived":{"description":"New isArchived to set.","type":"boolean"},"manager":{"description":"New manager to set.","type":"string"},"mintEscrowCoinsToTransfer":{"description":"Coins to be transferred to the mint escrow address.","type":"array","items":{"type":"object","$ref":"#/definitions/cosmos.base.v1beta1.Coin"}},"standards":{"description":"New standards to set.","type":"array","items":{"type":"string"}},"tokenMetadata":{"description":"New token metadata to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.TokenMetadata"}},"updateCollectionApprovals":{"description":"Indicates if collection approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionMetadata":{"description":"Indicates if the collection metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCollectionPermissions":{"description":"Indicates if collection permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateCustomData":{"description":"Indicates if the custom data should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIsArchived":{"description":"Indicates if the isArchived should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateManager":{"description":"Indicates if the manager should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateStandards":{"description":"Indicates if the standards should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateTokenMetadata":{"description":"Indicates if the token metadata should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateValidTokenIds":{"description":"Indicates if the valid token IDs should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"validTokenIds":{"type":"array","title":"New token IDs to add to this collection","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.MsgUpdateCollectionResponse":{"description":"MsgUpdateCollectionResponse is the response to MsgUpdateCollection.","type":"object","properties":{"approvalChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"collectionId":{"description":"ID of the collection.","type":"string"},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MsgUpdateDynamicStore":{"description":"MsgUpdateDynamicStore is used to update an existing dynamic store.","type":"object","properties":{"creator":{"description":"Address of the creator.","type":"string"},"customData":{"description":"Custom data field for storing arbitrary data associated with this dynamic store.","type":"string"},"defaultValue":{"description":"The new default value for uninitialized addresses (true/false).","type":"boolean"},"globalEnabled":{"description":"The global kill switch state (true = enabled, false = disabled/halted).\nCallers should query the current value first if they want to keep it unchanged.","type":"boolean"},"storeId":{"description":"ID of the dynamic store to update.","type":"string"},"uri":{"description":"URI for additional metadata or resources associated with this dynamic store.","type":"string"}}},"tokenization.v29.MsgUpdateDynamicStoreResponse":{"description":"MsgUpdateDynamicStoreResponse is the response to MsgUpdateDynamicStore.","type":"object"},"tokenization.v29.MsgUpdateParams":{"description":"MsgUpdateParams is the Msg/UpdateParams request type.","type":"object","properties":{"authority":{"description":"authority is the address that controls the module (defaults to x/gov unless overwritten).","type":"string"},"params":{"description":"params defines the module parameters to update.\n\nNOTE: All parameters must be supplied.","$ref":"#/definitions/tokenization.v29.Params"}}},"tokenization.v29.MsgUpdateParamsResponse":{"description":"MsgUpdateParamsResponse defines the response structure for executing a\nMsgUpdateParams message.","type":"object"},"tokenization.v29.MsgUpdateUserApprovals":{"description":"MsgUpdateUserApprovals is used to update user approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Auto-approve setting for all incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Auto-approve setting for self-initiated incoming transfers.","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Auto-approve setting for self-initiated outgoing transfers.","type":"boolean"},"collectionId":{"description":"ID of the collection.","type":"string"},"creator":{"description":"Address of the creator.","type":"string"},"incomingApprovals":{"description":"New incoming approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserIncomingApproval"}},"outgoingApprovals":{"description":"New outgoing approvals to set.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserOutgoingApproval"}},"updateAutoApproveAllIncomingTransfers":{"description":"Indicates if auto-approve settings for all incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Indicates if auto-approve settings for self-initiated incoming transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Indicates if auto-approve settings for self-initiated outgoing transfers should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateIncomingApprovals":{"description":"Indicates if incoming approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateOutgoingApprovals":{"description":"Indicates if outgoing approvals should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"updateUserPermissions":{"description":"Indicates if user permissions should be updated. If true, we set to value in this Msg. If false, we keep existing value.","type":"boolean"},"userPermissions":{"description":"New user permissions to set.","$ref":"#/definitions/tokenization.v29.UserPermissions"}}},"tokenization.v29.MsgUpdateUserApprovalsResponse":{"description":"MsgUpdateUserApprovalsResponse is the response to MsgUpdateUserApprovals.","type":"object","properties":{"incomingChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"outgoingChanges":{"type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalChange"}},"reviewItems":{"type":"array","items":{"type":"string"}}}},"tokenization.v29.MustOwnTokens":{"description":"MustOwnTokens represents a condition where a user must own specific tokens\nto be approved to transfer.\n\n- collectionId: The ID of the collection for the tokens that must be owned\n- amountRange: The range of amounts the user must own (min to max)\n- ownershipTimes: The time ranges during which the user must own the tokens.\n- tokenIds: The token IDs the user must own.\n- overrideWithCurrentTime: If true, auto override ownershipTimes with the current time.\n- mustSatisfyForAllAssets: If true, the user must own all specified tokens; otherwise, owning any one for \u003e= 1 millisecond is sufficient.","type":"object","properties":{"amountRange":{"description":"The range of amounts the user must own (min to max).","$ref":"#/definitions/tokenization.v29.UintRange"},"collectionId":{"description":"The ID of the collection.","type":"string"},"mustSatisfyForAllAssets":{"description":"If true, the user must meet ownership requirements for all specified tokens; else, must meet requirements for any single token.","type":"boolean"},"overrideWithCurrentTime":{"description":"If true, override ownershipTimes with the current time.","type":"boolean"},"ownershipCheckParty":{"description":"The party to check ownership for. Options are \"initiator\", \"sender\", \"recipient\", or any valid bb1 address.\nIf a valid bb1 address is provided, ownership will be checked for that specific address.\nThis enables use cases like halt tokens where ownership is checked for an arbitrary address (e.g., halt token owner).\nDefaults to \"initiator\" if empty or if the value is not a recognized option or valid bb1 address.","type":"string"},"ownershipTimes":{"description":"The time ranges during which the user must own the tokens.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"The token IDs the user must own.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.OutgoingApprovalCriteria":{"description":"OutgoingApprovalCriteria defines the criteria for approving outgoing transfers.\nThis is used for user-level outgoing approvals and only includes fields relevant to outgoing transfers.\nAll criteria must be satisfied for the approval to be considered valid.","type":"object","properties":{"altTimeChecks":{"description":"Alternative time-based checks for approval denial (offline hours/days). Defines time periods\nduring which this approval should be denied, such as specific hours of the day or days of the week.","$ref":"#/definitions/tokenization.v29.AltTimeChecks"},"approvalAmounts":{"description":"Threshold limit of amounts that can be transferred using this approval. Tracks cumulative amounts\ntransferred and enforces maximum limits per approval.","$ref":"#/definitions/tokenization.v29.ApprovalAmounts"},"autoDeletionOptions":{"description":"Auto-deletion options for this approval. Defines conditions under which this approval should be\nautomatically deleted (e.g., after a certain number of uses or time period).","$ref":"#/definitions/tokenization.v29.AutoDeletionOptions"},"coinTransfers":{"description":"The sdk.Coins that need to be transferred for approval. Defines required coin transfers (e.g., fees,\nroyalties) that must be executed alongside the token transfer for the approval to be valid.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.CoinTransfer"}},"dynamicStoreChallenges":{"description":"Dynamic store challenges that the initiator must pass for approval. The initiator must provide\nvalid proofs that satisfy all specified dynamic store challenges (e.g., key-value store lookups).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.DynamicStoreChallenge"}},"ethSignatureChallenges":{"description":"ETH signature challenges that the initiator must pass for approval. The initiator must provide\nvalid Ethereum signatures for all specified challenges. Each signature can only be used once.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ETHSignatureChallenge"}},"evmQueryChallenges":{"description":"EVM query challenges that must pass for approval. Read-only contract queries\nthat verify external EVM state (e.g., token ownership in another contract).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.EVMQueryChallenge"}},"initiatorChecks":{"description":"Address checks for the initiator of the transfer. Validates that the initiator address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).","$ref":"#/definitions/tokenization.v29.AddressChecks"},"maxNumTransfers":{"description":"Maximum number of transfers that can be processed using this approval. Tracks the count of transfers\nand enforces the limit to prevent exceeding the allowed number of uses.","$ref":"#/definitions/tokenization.v29.MaxNumTransfers"},"merkleChallenges":{"description":"Merkle challenges that must be satisfied for approval. The initiator must provide valid Merkle proofs\nthat satisfy all specified challenges. Each challenge requires a proof that leads to a specific root hash.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerkleChallenge"}},"mustOwnTokens":{"description":"Must own tokens for approval. Defines token ownership requirements that must be satisfied for\nthe approval to be valid. The initiator must own the specified tokens at the specified ownership times.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MustOwnTokens"}},"mustPrioritize":{"description":"If true, this approval must be explicitly prioritized in PrioritizedApprovals to be used.\nThis allows fine-grained control over which approvals are applied when multiple approvals could match.","type":"boolean"},"predeterminedBalances":{"description":"Predetermined balances that must be used for each approval. Defines the exact token amounts and IDs\nthat can be transferred when using this approval.","$ref":"#/definitions/tokenization.v29.PredeterminedBalances"},"recipientChecks":{"description":"Address checks for the recipient of the transfer. Validates that the recipient address meets the\nspecified criteria (e.g., whitelist, blacklist, protocol address requirements).\nNote: No sender checks are included for outgoing approvals since the sender is the user themselves.","$ref":"#/definitions/tokenization.v29.AddressChecks"},"requireToDoesNotEqualInitiatedBy":{"description":"Require the \"to\" address to not be equal to the \"initiated by\" address for approval.\nIf true, transfers where the recipient equals the initiator are forbidden.","type":"boolean"},"requireToEqualsInitiatedBy":{"description":"Require the \"to\" address to be equal to the \"initiated by\" address for approval.\nIf true, only transfers where the recipient matches the initiator are allowed.","type":"boolean"},"votingChallenges":{"description":"Voting challenges that must be satisfied for approval. The initiator must provide\nvalid votes that meet the quorum threshold for all specified challenges.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.VotingChallenge"}}}},"tokenization.v29.Params":{"description":"Params defines the parameters for the module.","type":"object","properties":{"affiliate_percentage":{"type":"string","title":"affiliate_percentage defines the percentage of the transfer amount that goes to the affiliate"},"allowed_denoms":{"type":"array","title":"allowed_denoms defines the list of denoms that are allowed to be used in coin_transfers","items":{"type":"string"}}}},"tokenization.v29.PathMetadata":{"description":"This message defines the metadata for paths (alias paths and cosmos coin wrapper paths).\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the path metadata.","type":"string"},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the path metadata.","type":"string"}}},"tokenization.v29.PrecalculateBalancesFromApprovalDetails":{"description":"PrecalculateBalancesFromApprovalDetails defines the details for precalculating balances from an approval.","type":"object","properties":{"approvalId":{"description":"The ID of the approval.","type":"string"},"approvalLevel":{"description":"The level of the approval. Can be \"collection\", \"incoming\", or \"outgoing\".","type":"string"},"approverAddress":{"description":"The address of the approver. Leave blank \"\" if approvalLevel == \"collection\".","type":"string"},"precalculationOptions":{"description":"The options for precalculating the balances.","$ref":"#/definitions/tokenization.v29.PrecalculationOptions"},"version":{"description":"The version of the approval.","type":"string"}}},"tokenization.v29.PrecalculationOptions":{"description":"PrecalculationOptions defines the options for precalculating the balances.","type":"object","properties":{"overrideTimestamp":{"description":"The timestamp to override with when calculating the balances.","type":"string"},"scalingMultiplier":{"description":"When \u003e 0 and allowAmountScaling is true on the approval, all precalculated balance amounts\nare multiplied by this value. Must be \u003c= maxScalingMultiplier. 0 means no scaling (returns 1x base).","type":"string"},"tokenIdsOverride":{"description":"The IDs to override for the transfer. Only applicable if using this option in precalculation.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.PredeterminedBalances":{"description":"PredeterminedBalances represents balances with predetermined order calculation.","type":"object","properties":{"incrementedBalances":{"description":"Balances that have a starting amount and increment. If this is nil, then we use the manual balances.","$ref":"#/definitions/tokenization.v29.IncrementedBalances"},"manualBalances":{"description":"Manual balances that can be entered. If this is nil, then we use the incremented balances.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ManualBalances"}},"orderCalculationMethod":{"description":"The method to calculate the order of predetermined balances.","$ref":"#/definitions/tokenization.v29.PredeterminedOrderCalculationMethod"}}},"tokenization.v29.PredeterminedOrderCalculationMethod":{"description":"PredeterminedOrderCalculationMethod defines the method to calculate predetermined balances order.","type":"object","properties":{"challengeTrackerId":{"description":"If useMerkleChallengeLeafIndex is set, then this is the ID of the challenge tracker associated with this calculation method.","type":"string"},"useMerkleChallengeLeafIndex":{"description":"Use the Merkle challenge leaf index to calculate the order. Ex: Transfer that uses leaf index 0 gets the first balance, transfer that uses leaf index 1 gets the second balance, etc.","type":"boolean"},"useOverallNumTransfers":{"description":"Use the overall number of transfers to calculate the order. Ex: First transfer gets the first balance, second transfer gets the second balance, etc.","type":"boolean"},"usePerFromAddressNumTransfers":{"description":"Use the number of transfers per \"from\" address to calculate the order. Ex: First transfer from address A gets the first balance, second transfer from address A gets the second balance, etc.","type":"boolean"},"usePerInitiatedByAddressNumTransfers":{"description":"Use the number of transfers per \"initiated by\" address to calculate the order. Ex: First transfer initiated by address A gets the first balance, second transfer initiated by address A gets the second balance, etc.","type":"boolean"},"usePerToAddressNumTransfers":{"description":"Use the number of transfers per \"to\" address to calculate the order. Ex: First transfer to address A gets the first balance, second transfer to address A gets the second balance, etc.","type":"boolean"}}},"tokenization.v29.RecurringOwnershipTimes":{"description":"RecurringOwnershipTimes represents a list of recurring ownership times.","type":"object","properties":{"chargePeriodLength":{"type":"string","title":"Grace period length where you can charge the next interval (nextStartTime - chargePeriodLength) until (nextStartTime) = charge period"},"intervalLength":{"description":"The interval length in unix milliseconds.","type":"string"},"startTime":{"description":"The original start time of the first interval.","type":"string"}}},"tokenization.v29.ResetTimeIntervals":{"description":"Time intervals to reset the trackers at.","type":"object","properties":{"intervalLength":{"description":"Interval length in unix milliseconds.","type":"string"},"startTime":{"description":"Original start time of the first interval.","type":"string"}}},"tokenization.v29.TokenIdsActionPermission":{"description":"TokenIdsActionPermission defines the permissions for performing an action for specific tokens.\nCurrently, this is only used for creating new tokens.\n\nEx: If you want to lock the ability to create new tokens for tokenIds [1,2] at ownershipTimes 1/1/2020 - 1/1/2021, \nyou could set the combination (tokenIds: [1,2], ownershipTimes: [1/1/2020 - 1/1/2021]) to always be forbidden.","type":"object","properties":{"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.TokenMetadata":{"description":"This message defines the metadata for specific token IDs.\nThe interpretation of this metadata should follow the collection standard.","type":"object","properties":{"customData":{"description":"Custom data or additional information related to the token metadata.","type":"string"},"tokenIds":{"description":"The token IDs to which this metadata applies.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"uri":{"description":"The URI (Uniform Resource Identifier) associated with the token metadata.","type":"string"}}},"tokenization.v29.Transfer":{"description":"Transfer defines the details of a transfer of tokens.","type":"object","properties":{"balances":{"description":"The balances to be transferred.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}},"ethSignatureProofs":{"description":"The ETH signature proofs / solutions for all ETH signature challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ETHSignatureProof"}},"from":{"description":"The address of the sender of the transfer.","type":"string"},"memo":{"description":"The memo for the transfer.","type":"string"},"merkleProofs":{"description":"The Merkle proofs / solutions for all Merkle challenges required for the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.MerkleProof"}},"onlyCheckPrioritizedCollectionApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedIncomingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"onlyCheckPrioritizedOutgoingApprovals":{"description":"Whether to only check prioritized approvals for the transfer. \nIf true, we will only check the prioritized approvals and fail if none of them match (i.e. do not check any non-prioritized approvals).\nIf false, we will check the prioritized approvals first and then scan through the rest of the approvals.","type":"boolean"},"precalculateBalancesFromApproval":{"description":"If defined, we will use the predeterminedBalances from the specified approval to calculate the balances at execution time.\nWe will override the balances field with the precalculated balances. Only applicable for approvals with predeterminedBalances set.","$ref":"#/definitions/tokenization.v29.PrecalculateBalancesFromApprovalDetails"},"prioritizedApprovals":{"description":"The prioritized approvals for the transfer. By default, we scan linearly through the approvals and use the first match.\nThis field can be used to prioritize specific approvals and scan through them first.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ApprovalIdentifierDetails"}},"toAddresses":{"description":"The addresses of the recipients of the transfer.","type":"array","items":{"type":"string"}}}},"tokenization.v29.UintRange":{"description":"The UintRange is a range of IDs from some start to some end (inclusive).\nuintRanges are one of the core types used.\n\nThey are used for everything from token IDs to time ranges to min/max balance amounts.\n\nSee the BitBadges documentation for more information.","type":"object","properties":{"end":{"description":"The ending value of the range (inclusive).","type":"string"},"start":{"description":"The starting value of the range (inclusive).","type":"string"}}},"tokenization.v29.UserApprovalSettings":{"description":"UserApprovalSettings defines issuer-imposed constraints on user-level approvals.\nSet on collection-level ApprovalCriteria and propagated to user-level approvals\nduring greedy transfer matching. Each balance slice carries its own settings.","type":"object","properties":{"allowedDenoms":{"description":"Restricts which denoms user-level coinTransfers can reference (beyond params-level AllowedDenoms).\nIf empty, all params-allowed denoms are permitted.","type":"array","items":{"type":"string"}},"disableUserCoinTransfers":{"description":"If true, user-level approvals cannot trigger coinTransfers at all for transfers matched by this collection approval.","type":"boolean"},"userRoyalties":{"description":"User-level royalties to enforce for transfers matched by this collection approval.","$ref":"#/definitions/tokenization.v29.UserRoyalties"}}},"tokenization.v29.UserBalanceStore":{"description":"UserBalanceStore is the store for the user balances for a collection.\n\nIt consists of a list of balances, a list of approved outgoing transfers, and a list of approved incoming transfers,\nas well as the permissions for updating the approved incoming/outgoing transfers.\n\nUpon initialization, all fields (minus the balances) are set to the defaults specified by the collection.\n\nThe outgoing transfers can be used to allow / disallow transfers which are sent from this user.\nIf a transfer has no match, then it is disallowed by default, unless from == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedOutgoingTransfers is set to true.\n\nThe incoming transfers can be used to allow / disallow transfers which are sent to this user.\nIf a transfer has no match, then it is disallowed by default, unless to == initiatedBy (i.e. initiated by this user)\nand autoApproveSelfInitiatedIncomingTransfers is set to true.\n\nNote that the user approved transfers are only checked if the collection approved transfers do not specify to override\nthe user approved transfers. \n\nThe permissions are used to determine whether the user can update the approved incoming/outgoing transfers and auto approvals.","type":"object","properties":{"autoApproveAllIncomingTransfers":{"description":"Whether to auto-approve all incoming transfers by default. \nThis is just shorthand for adding an accept everything incoming approval\nwith no restrictions.","type":"boolean"},"autoApproveSelfInitiatedIncomingTransfers":{"description":"Whether to auto-approve self-initiated incoming transfers for this user (i.e. to == initiatedBy).","type":"boolean"},"autoApproveSelfInitiatedOutgoingTransfers":{"description":"Whether to auto-approve self-initiated outgoing transfers for this user (i.e. from == initiatedBy).","type":"boolean"},"balances":{"description":"The list of balances associated with this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Balance"}},"incomingApprovals":{"description":"The list of approved incoming transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserIncomingApproval"}},"outgoingApprovals":{"description":"The list of approved outgoing transfers for this user.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserOutgoingApproval"}},"userPermissions":{"description":"The permissions for this user's actions and transfers.","$ref":"#/definitions/tokenization.v29.UserPermissions"}}},"tokenization.v29.UserIncomingApproval":{"description":"UserIncomingApproval defines the rules for the approval of an incoming transfer to a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v29.IncomingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"fromListId":{"description":"The list ID for the sender of the transfer.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v29.UserIncomingApprovalPermission":{"description":"UserIncomingApprovalPermission defines the permissions for updating the user's approved incoming transfers.\n\nSee CollectionApprovalPermission for more details. This is equivalent without the toListId field because that is always the user.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"fromListId":{"description":"Identifier for the sender list.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.UserOutgoingApproval":{"description":"UserOutgoingApproval defines the rules for the approval of an outgoing transfer from a user.","type":"object","properties":{"approvalCriteria":{"description":"The criteria that must be met for this approval to be considered.","$ref":"#/definitions/tokenization.v29.OutgoingApprovalCriteria"},"approvalId":{"description":"The ID of this approval. Must be unique per level (i.e. collection, outgoing, incoming).","type":"string"},"customData":{"description":"Arbitrary custom data associated with this approval.","type":"string"},"initiatedByListId":{"description":"The list ID for the user who initiated the transfer.","type":"string"},"ownershipTimes":{"description":"The allowed range of ownership times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"toListId":{"description":"The list ID for the recipient of the transfer.","type":"string"},"tokenIds":{"description":"The allowed range of token IDs for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"The allowed range of transfer times for approval.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"uri":{"description":"The URI associated with this approval, optionally providing metadata about the approval.","type":"string"},"version":{"description":"Version of the approval. Maintained internally.","type":"string"}}},"tokenization.v29.UserOutgoingApprovalPermission":{"description":"UserOutgoingApprovalPermission defines the permissions for updating the user's approved outgoing transfers.","type":"object","properties":{"approvalId":{"description":"Identifier for the approvalId. You can use \"All\" or \"!approvalId\" for shorthand.\nIf you use \"All\", this approval will match to all approvalIds.\nIf you use \"!approvalId\", this approval will match to all approvalIds except for approvalId.\nIf you use \"approvalId\", this approval will match to only the specified approvalId and fail on all others.","type":"string"},"initiatedByListId":{"description":"Identifier for the initiator list (who is approved?).","type":"string"},"ownershipTimes":{"description":"Specifies the ownership times for the tokens in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyForbiddenTimes":{"description":"Specifies the times when this permission is forbidden. Can not overlap with permanentlyPermittedTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"permanentlyPermittedTimes":{"description":"Specifies the times when this permission is permitted. Can not overlap with permanentlyForbiddenTimes.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"toListId":{"description":"Identifier for the recipient list.","type":"string"},"tokenIds":{"description":"Specifies the token IDs involved in the transfer.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}},"transferTimes":{"description":"Specifies the times when the transfer can occur.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UintRange"}}}},"tokenization.v29.UserPermissions":{"description":"UserPermissions defines the permissions for the user about their approvals (i.e., what the user can and cannot do).\n\nSee CollectionPermissions for more details on the different types of permissions.\n\ncanUpdateOutgoingApprovals and canUpdateOutgoingApprovals follow the same as the canUpdateCollectionApprovals in CollectionPermissions,\nbut certain fields are removed because they are not relevant to the user.","type":"object","properties":{"canUpdateAutoApproveAllIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for all incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedIncomingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated incoming transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateAutoApproveSelfInitiatedOutgoingTransfers":{"description":"Permissions related to updating auto-approval settings for self-initiated outgoing transfers (whether they are allowed by default).","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.ActionPermission"}},"canUpdateIncomingApprovals":{"description":"Permissions related to updating the user's approved incoming transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserIncomingApprovalPermission"}},"canUpdateOutgoingApprovals":{"description":"Permissions related to updating the user's approved outgoing transfers.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.UserOutgoingApprovalPermission"}}}},"tokenization.v29.UserRoyalties":{"description":"UserRoyalties defines the royalties for a user.","type":"object","properties":{"payoutAddress":{"description":"Payout address for the royalties.","type":"string"},"percentage":{"description":"Percentage of the transfer amount to apply as royalties. 1 to 10000 represents basis points.","type":"string"}}},"tokenization.v29.Voter":{"description":"Voter defines a voter with their address and weight.","type":"object","properties":{"address":{"description":"The address of the voter.","type":"string"},"weight":{"description":"The weight of this voter's vote.","type":"string"}}},"tokenization.v29.VotingChallenge":{"description":"VotingChallenge defines a rule for approval in the form of a voting/multi-sig challenge.\nRequires a weighted quorum threshold to be met through votes from specified voters.\nAll challenges must be met with valid solutions for the transfer to be approved.\n\nIMPORTANT: Votes are stored separately and can be updated. The threshold is calculated as a percentage\nof total possible weight (all voters), not just voted weight. If you update the proposal ID, then the\nvote tracker will reset and start a new tally. We recommend using a unique proposal ID for each challenge\nto prevent overlap and unexpected behavior.","type":"object","properties":{"customData":{"description":"Arbitrary custom data associated with this voting challenge.","type":"string"},"delayAfterQuorum":{"description":"Mandatory delay in milliseconds after quorum is reached before the transfer can execute.\nIf set, the transfer will fail until: now \u003e= quorumReachedTimestamp + delayAfterQuorum.\nDuring the delay, signers can remove their votes to cancel (quorum drops = delay resets).","type":"string"},"proposalId":{"type":"string","title":"The ID of this voting challenge for tracking votes (scoped like challengeTrackerId).\nFormat: collectionId-approverAddress-approvalLevel-approvalId-challengeId"},"quorumThreshold":{"description":"The quorum threshold as a percentage (0-100) of total possible weight that must vote \"yes\".\nExample: 50 means 50% of total voter weight must vote yes for approval.","type":"string"},"resetAfterExecution":{"description":"If true, all votes for this challenge are cleared after a successful transfer execution.\nThis makes the challenge reusable (e.g., for vault withdrawals that need fresh approval each time).","type":"boolean"},"uri":{"description":"The URI associated with this voting challenge.","type":"string"},"voters":{"description":"List of voters with their weights. Each voter can cast a weighted vote.","type":"array","items":{"type":"object","$ref":"#/definitions/tokenization.v29.Voter"}}}}},"tags":[{"name":"Msg"},{"name":"Query"},{"name":"Service"},{"name":"ReflectionService"},{"name":"ABCIListenerService"},{"name":"ABCI"}]} \ No newline at end of file diff --git a/go.mod b/go.mod index 9261e804..5d545560 100644 --- a/go.mod +++ b/go.mod @@ -1,34 +1,49 @@ module github.com/bitbadges/bitbadgeschain -go 1.24.5 +go 1.25.9 replace ( - github.com/ethereum/go-ethereum => github.com/cosmos/go-ethereum v1.16.2-cosmos-1 + // use cosmos fork of keyring (cosmos/evm v0.7.0-beta.0) + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 + // use Cosmos geth fork — branch release/1.17 (cosmos/evm v0.7.0-beta.0) + github.com/ethereum/go-ethereum => github.com/cosmos/go-ethereum v1.17.2-cosmos-0 + // Security advisory GHSA-h395-qcrw-5vmq (cosmos/evm v0.7.0-beta.0) + github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.1 + // replace broken goleveldb github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + // btree fork required by bstm (cosmos/evm v0.7.0-beta.0) + github.com/tidwall/btree => github.com/cosmos/btree v0.0.0-20250924232609-2c6195d95951 ) +// x/group moved to enterprise in cosmos-sdk v0.54 (cosmos/evm v0.7.0-beta.0) +replace cosmossdk.io/x/group => github.com/cosmos/cosmos-sdk/enterprise/group v0.0.0-20260227212600-39d4711b8970 + +replace github.com/cosmos/cosmos-sdk/x/group => github.com/cosmos/cosmos-sdk/enterprise/group v0.0.0-20260227212600-39d4711b8970 + +// cosmos-sdk pseudo-version with v0.54 fixes (cosmos/evm v0.7.0-beta.0) +replace github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.54.0-rc.1.0.20260417173832-6850afc89406 + +// cometbft pseudo-version with v0.39 fixes (cosmos/evm v0.7.0-beta.0) +replace github.com/cometbft/cometbft => github.com/cometbft/cometbft v0.39.0-rc1.0.20260417162916-9fcf8612cc6c + require ( - cosmossdk.io/api v0.9.2 - cosmossdk.io/client/v2 v2.0.0-beta.7 - cosmossdk.io/core v0.11.3 + cosmossdk.io/api v1.0.0 + cosmossdk.io/client/v2 v2.11.0 + cosmossdk.io/core v1.1.0 cosmossdk.io/depinject v1.2.1 cosmossdk.io/log v1.6.1 - cosmossdk.io/store v1.1.2 + cosmossdk.io/store v1.1.2 // indirect cosmossdk.io/tools/confix v0.1.2 - cosmossdk.io/x/circuit v0.1.1 - cosmossdk.io/x/evidence v0.2.0 - cosmossdk.io/x/feegrant v0.2.0 - cosmossdk.io/x/upgrade v0.2.0 - github.com/bufbuild/buf v1.64.0 - github.com/cometbft/cometbft v0.38.21 + github.com/bufbuild/buf v1.69.0 + github.com/cometbft/cometbft v0.39.1 github.com/cosmos/cosmos-db v1.1.3 github.com/cosmos/cosmos-proto v1.0.0-beta.5 - github.com/cosmos/cosmos-sdk v0.53.6 + github.com/cosmos/cosmos-sdk v0.54.2 github.com/cosmos/gogoproto v1.7.2 github.com/cosmos/ibc-go/modules/capability v1.0.1 - github.com/cosmos/ibc-go/v10 v10.5.0 + github.com/cosmos/ibc-go/v10 v10.6.0 // indirect github.com/gorilla/mux v1.8.1 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.5 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 github.com/spf13/viper v1.21.0 @@ -37,13 +52,15 @@ require ( ) require ( - cosmossdk.io/collections v1.3.1 - cosmossdk.io/errors v1.0.2 + cosmossdk.io/collections v1.4.0 + cosmossdk.io/errors v1.1.0 + cosmossdk.io/log/v2 v2.1.0 cosmossdk.io/math v1.5.3 - cosmossdk.io/x/tx v0.14.0 - github.com/cosmos/evm v0.6.0 - github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10 v10.1.0 - github.com/ethereum/go-ethereum v1.16.8 + github.com/cosmos/cosmos-sdk/store/v2 v2.0.0 + github.com/cosmos/evm v0.7.0-beta.0 + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10 v10.6.0 + github.com/cosmos/ibc-go/v11 v11.0.0 + github.com/ethereum/go-ethereum v1.17.2 github.com/gogo/protobuf v1.3.2 github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.4 @@ -52,11 +69,11 @@ require ( github.com/holiman/uint256 v1.3.2 github.com/spf13/cast v1.10.0 github.com/storyicon/sigverify v1.1.0 - golang.org/x/crypto v0.48.0 - golang.org/x/exp v0.0.0-20260112195511-716be5621a96 - golang.org/x/tools v0.41.0 - google.golang.org/genproto/googleapis/api v0.0.0-20260122232226-8e98ce8d340d - google.golang.org/grpc v1.79.3 + golang.org/x/crypto v0.50.0 + golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f + golang.org/x/tools v0.44.0 + google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 + google.golang.org/grpc v1.80.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -66,30 +83,31 @@ require ( 4d63.com/gochecknoglobals v0.2.2 // indirect buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.11-20250718181942-e35f9b667443.1 // indirect buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.11-20250109164928-1da0de137947.1 // indirect - buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1 // indirect - buf.build/gen/go/bufbuild/registry/connectrpc/go v1.19.1-20251202164234-62b14f0b533c.2 // indirect - buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20251202164234-62b14f0b533c.1 // indirect + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 // indirect + buf.build/gen/go/bufbuild/registry/connectrpc/go v1.19.2-20260126144947-819582968857.1 // indirect + buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20260126144947-819582968857.1 // indirect buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.11-20241007202033-cf42259fcbfc.1 // indirect - buf.build/go/app v0.2.0 // indirect - buf.build/go/bufplugin v0.9.0 // indirect + buf.build/go/app v0.2.1-0.20260407195847-833f8f978cda // indirect + buf.build/go/bufplugin v0.10.0 // indirect buf.build/go/bufprivateusage v0.1.0 // indirect buf.build/go/interrupt v1.1.0 // indirect - buf.build/go/protovalidate v1.1.0 // indirect + buf.build/go/protovalidate v1.2.0 // indirect buf.build/go/protoyaml v0.6.0 // indirect buf.build/go/spdx v0.2.0 // indirect - buf.build/go/standard v0.1.0 // indirect + buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5 // indirect cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.17.0 // indirect + cloud.google.com/go/auth v0.20.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.5.3 // indirect - cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.57.2 // indirect - connectrpc.com/connect v1.19.1 // indirect + cloud.google.com/go/iam v1.9.0 // indirect + cloud.google.com/go/monitoring v1.27.0 // indirect + cloud.google.com/go/storage v1.62.1 // indirect + connectrpc.com/connect v1.19.2 // indirect connectrpc.com/otelconnect v0.9.0 // indirect cosmossdk.io/schema v1.1.0 // indirect - filippo.io/edwards25519 v1.1.1 // indirect + cosmossdk.io/x/upgrade v0.2.0 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/4meepo/tagalign v1.4.2 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -97,19 +115,20 @@ require ( github.com/Antonboom/errname v1.0.0 // indirect github.com/Antonboom/nilnil v1.0.1 // indirect github.com/Antonboom/testifylint v1.5.2 // indirect - github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect - github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect + github.com/BurntSushi/toml v1.6.0 // indirect github.com/Crocmagnon/fatcontext v0.7.1 // indirect github.com/DataDog/datadog-go v4.8.3+incompatible // indirect github.com/DataDog/zstd v1.5.7 // indirect github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 // indirect - github.com/Masterminds/semver/v3 v3.3.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect + github.com/Masterminds/semver/v3 v3.4.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/OpenPeeDeeP/depguard/v2 v2.2.1 // indirect + github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260116142910-60249400e523 // indirect + github.com/RoaringBitmap/roaring/v2 v2.16.0 // indirect github.com/VictoriaMetrics/fastcache v1.13.0 // indirect github.com/alecthomas/go-check-sumtype v0.3.1 // indirect github.com/alexkohler/nakedret/v2 v2.0.5 // indirect @@ -119,7 +138,26 @@ require ( github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/ashanbrown/forbidigo v1.6.0 // indirect github.com/ashanbrown/makezero v1.2.0 // indirect - github.com/aws/aws-sdk-go v1.55.8 // indirect + github.com/aws/aws-sdk-go-v2 v1.41.6 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 // indirect + github.com/aws/aws-sdk-go-v2/config v1.32.14 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.14 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 // indirect + github.com/aws/smithy-go v1.25.0 // indirect + github.com/benbjohnson/clock v1.3.5 // 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.2.0 // indirect @@ -133,16 +171,17 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.5 // indirect github.com/btcsuite/btcd/btcutil v1.1.6 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect - github.com/bufbuild/protocompile v0.14.2-0.20260114160500-16922e24f2b6 // indirect - github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1 // indirect + github.com/bufbuild/protocompile v0.14.2-0.20260429155904-12ef1ef2ce91 // indirect + github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b // indirect github.com/butuzov/ireturn v0.3.1 // indirect github.com/butuzov/mirror v1.3.0 // indirect - github.com/bytedance/gopkg v0.1.3 // indirect - github.com/bytedance/sonic v1.14.2 // indirect - github.com/bytedance/sonic/loader v0.4.0 // indirect + github.com/bytedance/gopkg v0.1.4 // indirect + github.com/bytedance/sonic v1.15.0 // indirect + github.com/bytedance/sonic/loader v0.5.1 // indirect github.com/catenacyber/perfsprint v0.8.2 // indirect github.com/ccojocar/zxcvbn-go v1.0.2 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/charithe/durationcheck v0.0.10 // indirect github.com/chavacava/garif v0.1.0 // indirect @@ -150,73 +189,73 @@ require ( github.com/ckaznocha/intrange v0.3.0 // indirect github.com/cli/browser v1.3.0 // indirect github.com/cloudwego/base64x v0.1.6 // indirect - github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect - github.com/cockroachdb/apd/v2 v2.0.2 // indirect + github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 // indirect github.com/cockroachdb/errors v1.12.0 // indirect github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect github.com/cockroachdb/pebble v1.1.5 // indirect - github.com/cockroachdb/redact v1.1.6 // indirect + github.com/cockroachdb/redact v1.1.8 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb // indirect - github.com/cometbft/cometbft-db v0.14.1 // indirect + github.com/cometbft/cometbft-db v1.0.4 // indirect github.com/consensys/gnark-crypto v0.19.2 // indirect - github.com/containerd/continuity v0.4.3 // indirect github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect - github.com/containerd/stargz-snapshotter/estargz v0.18.1 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.18.2 // indirect github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/btree v1.0.0 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v1.2.6 // indirect + github.com/cosmos/iavl v1.2.8 // indirect github.com/cosmos/ics23/go v0.11.0 // indirect github.com/cosmos/ledger-cosmos-go v1.0.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect - github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect - github.com/creachadair/atomicfile v0.3.7 // indirect - github.com/creachadair/tomledit v0.0.28 // indirect + github.com/crate-crypto/go-eth-kzg v1.5.0 // indirect + github.com/creachadair/atomicfile v0.3.8 // indirect + github.com/creachadair/tomledit v0.0.29 // indirect github.com/curioswitch/go-reassign v0.3.0 // indirect github.com/daixiang0/gci v0.13.5 // indirect github.com/danieljoos/wincred v1.2.3 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect github.com/denis-tingaikin/go-header v0.5.0 // indirect github.com/desertbit/timer v1.0.1 // indirect - github.com/dgraph-io/badger/v4 v4.2.0 // indirect - github.com/dgraph-io/ristretto v0.2.0 // indirect + github.com/dgraph-io/badger/v4 v4.9.1 // indirect + github.com/dgraph-io/ristretto/v2 v2.4.0 // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/cli v29.2.0+incompatible // indirect - github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v28.5.2+incompatible // indirect - github.com/docker/docker-credential-helpers v0.9.5 // indirect - github.com/docker/go-connections v0.6.0 // indirect + github.com/docker/cli v29.4.1+incompatible // indirect + github.com/docker/docker-credential-helpers v0.9.6 // indirect + github.com/docker/go-connections v0.7.0 // indirect github.com/docker/go-units v0.5.0 // indirect + github.com/dunglas/httpsfv v1.1.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.7.0 // indirect - github.com/emicklei/dot v1.10.0 // indirect - github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect - github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect - github.com/ethereum/go-verkle v0.2.2 // indirect + github.com/dvsekhvalnov/jose2go v1.8.0 // indirect + github.com/ebitengine/purego v0.10.0 // indirect + github.com/emicklei/dot v1.11.0 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect + github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect + github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect github.com/ettle/strcase v0.2.0 // indirect github.com/fatih/color v1.18.0 // indirect github.com/fatih/structtag v1.2.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect github.com/firefart/nonamedreturns v1.0.5 // indirect + github.com/flynn/noise v1.1.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fzipp/gocyclo v0.6.0 // indirect - github.com/getsentry/sentry-go v0.41.0 // indirect + github.com/gammazero/deque v1.2.0 // indirect + github.com/getsentry/sentry-go v0.44.1 // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/ghostiam/protogetter v0.3.9 // indirect - github.com/go-chi/chi/v5 v5.2.4 // indirect github.com/go-critic/go-critic v0.12.0 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-kit/kit v0.13.0 // indirect github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-logfmt/logfmt v0.6.1 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -227,14 +266,13 @@ require ( github.com/go-toolsmith/astp v1.1.0 // indirect github.com/go-toolsmith/strparse v1.1.0 // indirect github.com/go-toolsmith/typep v1.1.0 // indirect - github.com/go-viper/mapstructure/v2 v2.4.0 // indirect + github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/go-xmlfmt/xmlfmt v1.1.3 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.13.0 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/golang/glog v1.2.5 // indirect - github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/golangci/dupl v0.0.0-20250308024227-f665c8d69b32 // indirect github.com/golangci/go-printf-func-name v0.1.0 // indirect @@ -244,16 +282,16 @@ require ( github.com/golangci/revgrep v0.8.0 // indirect github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect github.com/google/btree v1.1.3 // indirect - github.com/google/cel-go v0.26.1 // indirect - github.com/google/flatbuffers v24.3.25+incompatible // indirect + github.com/google/cel-go v0.28.0 // indirect + github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/google/go-cmp v0.7.0 // indirect - github.com/google/go-containerregistry v0.20.7 // indirect + github.com/google/go-containerregistry v0.21.5 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect - github.com/googleapis/gax-go/v2 v2.15.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect + github.com/googleapis/gax-go/v2 v2.22.0 // indirect github.com/gordonklaus/ineffassign v0.1.0 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/websocket v1.5.3 // indirect @@ -263,15 +301,15 @@ require ( github.com/gostaticanalysis/nilerr v0.1.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.9 // indirect + github.com/hashicorp/go-getter v1.8.6 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-immutable-radix/v2 v2.1.0 // indirect github.com/hashicorp/go-metrics v0.5.4 // indirect - github.com/hashicorp/go-plugin v1.6.3 // indirect - github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.8.0 // indirect + github.com/hashicorp/go-plugin v1.7.0 // indirect + github.com/hashicorp/go-version v1.9.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/yamux v0.1.2 // indirect @@ -284,20 +322,22 @@ require ( github.com/iancoleman/strcase v0.3.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/ipfs/go-cid v0.5.0 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect + github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jdx/go-netrc v1.0.0 // indirect github.com/jgautheron/goconst v1.7.1 // indirect github.com/jingyugao/rowserrcheck v1.1.1 // indirect github.com/jjti/go-spancheck v0.6.4 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/julz/importas v0.2.0 // indirect github.com/karamaru-alpha/copyloopvar v1.2.1 // indirect github.com/kisielk/errcheck v1.9.0 // indirect github.com/kkHAIKE/contextcheck v1.1.6 // indirect - github.com/klauspost/compress v1.18.3 // indirect - github.com/klauspost/cpuid/v2 v2.2.10 // indirect + github.com/klauspost/compress v1.18.5 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/pgzip v1.2.6 // indirect + github.com/koron/go-ssdp v0.0.6 // 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 @@ -309,52 +349,96 @@ require ( github.com/ldez/tagliatelle v0.7.1 // indirect github.com/ldez/usetesting v0.4.2 // indirect github.com/leonklingele/grouper v1.1.2 // indirect - github.com/lib/pq v1.10.9 // indirect - github.com/linxGnu/grocksdb v1.10.4 // indirect + github.com/lib/pq v1.12.3 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/libp2p/go-flow-metrics v0.2.0 // indirect + github.com/libp2p/go-libp2p v0.47.0 // indirect + github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect + github.com/libp2p/go-msgio v0.3.0 // indirect + github.com/libp2p/go-netroute v0.3.0 // indirect + github.com/libp2p/go-reuseport v0.4.0 // indirect + github.com/libp2p/go-yamux/v5 v5.0.1 // indirect + github.com/linxGnu/grocksdb v1.10.7 // indirect + github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 // indirect github.com/macabu/inamedparam v0.1.3 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/maratori/testableexamples v1.0.0 // indirect github.com/maratori/testpackage v1.1.1 // indirect + github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect github.com/matoous/godox v1.1.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-isatty v0.0.22 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mdp/qrterminal/v3 v3.2.1 // indirect github.com/mgechev/revive v1.7.0 // indirect - github.com/minio/highwayhash v1.0.3 // indirect - github.com/minio/sha256-simd v1.0.0 // indirect + github.com/miekg/dns v1.1.66 // indirect + github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect + github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect + github.com/minio/highwayhash v1.0.4 // indirect + github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/term v0.5.2 // indirect + github.com/moby/moby/api v1.54.2 // indirect + github.com/moby/moby/client v0.4.1 // indirect github.com/moricho/tparallel v0.3.2 // indirect - github.com/morikuni/aec v1.1.0 // indirect + github.com/mr-tron/base58 v1.3.0 // indirect + github.com/mschoch/smat v0.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect + github.com/multiformats/go-base32 v0.1.0 // indirect + github.com/multiformats/go-base36 v0.2.0 // indirect + github.com/multiformats/go-multiaddr v0.16.1 // indirect + github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect + github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect + github.com/multiformats/go-multibase v0.2.0 // indirect + github.com/multiformats/go-multicodec v0.9.1 // indirect + github.com/multiformats/go-multihash v0.2.3 // indirect + github.com/multiformats/go-multistream v0.6.1 // indirect + github.com/multiformats/go-varint v0.0.7 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/nakabonne/nestif v0.3.1 // indirect github.com/nishanths/exhaustive v0.12.0 // indirect github.com/nishanths/predeclared v0.2.2 // indirect github.com/nunnatsa/ginkgolinter v0.19.1 // indirect - github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect - github.com/oklog/run v1.1.0 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729 // indirect + github.com/oklog/run v1.2.0 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect + github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect - github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 // indirect - github.com/pion/dtls/v2 v2.2.7 // indirect - github.com/pion/logging v0.2.2 // indirect + github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81 // indirect + github.com/pion/datachannel v1.5.10 // indirect + github.com/pion/dtls/v2 v2.2.12 // indirect + github.com/pion/dtls/v3 v3.1.2 // indirect + github.com/pion/ice/v4 v4.0.10 // indirect + github.com/pion/interceptor v0.1.40 // indirect + github.com/pion/logging v0.2.4 // indirect + github.com/pion/mdns/v2 v2.0.7 // indirect + github.com/pion/randutil v0.1.0 // indirect + github.com/pion/rtcp v1.2.15 // indirect + github.com/pion/rtp v1.8.19 // indirect + github.com/pion/sctp v1.8.39 // indirect + github.com/pion/sdp/v3 v3.0.13 // indirect + github.com/pion/srtp/v3 v3.0.6 // indirect + github.com/pion/stun v0.6.1 // indirect github.com/pion/stun/v2 v2.0.0 // indirect - github.com/pion/transport/v2 v2.2.1 // indirect - github.com/pion/transport/v3 v3.0.1 // indirect + github.com/pion/stun/v3 v3.0.0 // indirect + github.com/pion/transport/v2 v2.2.10 // indirect + github.com/pion/transport/v3 v3.0.7 // indirect + github.com/pion/transport/v4 v4.0.1 // indirect + github.com/pion/turn/v4 v4.0.2 // indirect + github.com/pion/webrtc/v4 v4.1.2 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/polyfloyd/go-errorlint v1.7.1 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.67.5 // indirect - github.com/prometheus/procfs v0.19.2 // indirect + github.com/prometheus/otlptranslator v1.0.0 // indirect + github.com/prometheus/procfs v0.20.1 // indirect github.com/quasilyte/go-ruleguard v0.4.3-0.20240823090925-0fe6f58b47b1 // indirect github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect github.com/quasilyte/gogrep v0.5.0 // indirect @@ -362,37 +446,38 @@ require ( github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect github.com/quic-go/qpack v0.6.0 // indirect github.com/quic-go/quic-go v0.59.0 // indirect + github.com/quic-go/webtransport-go v0.10.0 // indirect github.com/raeperd/recvcheck v0.2.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/rs/cors v1.11.1 // indirect - github.com/rs/zerolog v1.34.0 // indirect + github.com/rs/zerolog v1.35.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/ryancurrah/gomodguard v1.3.5 // indirect github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect - github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/sagikazarmark/locafero v0.12.0 // indirect github.com/sanposhiho/wastedassign/v2 v2.1.0 // indirect github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 // indirect - github.com/sasha-s/go-deadlock v0.3.5 // indirect + github.com/sasha-s/go-deadlock v0.3.9 // indirect github.com/sashamelentyev/interfacebloat v1.1.0 // indirect github.com/sashamelentyev/usestdlibvars v1.28.0 // indirect github.com/securego/gosec/v2 v2.22.2 // indirect github.com/segmentio/asm v1.2.1 // indirect - github.com/segmentio/encoding v0.5.3 // indirect + github.com/segmentio/encoding v0.5.4 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect + github.com/shirou/gopsutil/v4 v4.26.3 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/sivchari/containedctx v1.0.3 // indirect github.com/sivchari/tenv v1.12.1 // indirect github.com/sonatard/noctx v0.1.0 // indirect - github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect github.com/sourcegraph/go-diff v0.7.0 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.15.0 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect github.com/stbenjam/no-sprintf-host-port v0.2.0 // indirect - github.com/stoewer/go-strcase v1.3.1 // indirect - github.com/stretchr/objx v0.5.2 // indirect + github.com/stretchr/objx v0.5.3 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/supranational/blst v0.3.16 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect @@ -402,13 +487,13 @@ require ( github.com/tetratelabs/wazero v1.11.0 // indirect github.com/tidwall/btree v1.8.1 // indirect github.com/tidwall/gjson v1.18.0 // indirect - github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect + github.com/tidwall/match v1.2.0 // indirect + github.com/tidwall/pretty v1.2.1 // indirect github.com/tidwall/sjson v1.2.5 // indirect github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3 // indirect github.com/timonwong/loggercheck v0.10.1 // indirect - github.com/tklauser/go-sysconf v0.3.15 // indirect - github.com/tklauser/numcpus v0.10.0 // indirect + github.com/tklauser/go-sysconf v0.3.16 // indirect + github.com/tklauser/numcpus v0.11.0 // indirect github.com/tomarrell/wrapcheck/v2 v2.10.0 // indirect github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect @@ -418,7 +503,8 @@ require ( github.com/ultraware/whitespace v0.2.0 // indirect github.com/uudashr/gocognit v1.2.0 // indirect github.com/uudashr/iface v1.3.1 // indirect - github.com/vbatts/tar-split v0.12.2 // indirect + github.com/vbatts/tar-split v0.12.3 // indirect + github.com/wlynxg/anet v0.0.5 // indirect github.com/xen0n/gosmopolitan v1.2.2 // indirect github.com/yagipy/maintidx v1.0.0 // indirect github.com/yeya24/promlinter v0.3.0 // indirect @@ -430,44 +516,69 @@ require ( gitlab.com/bosi/decorder v0.4.2 // indirect go-simpler.org/musttag v0.13.0 // indirect go-simpler.org/sloglint v0.9.0 // indirect - go.etcd.io/bbolt v1.4.0-alpha.1 // indirect + go.etcd.io/bbolt v1.4.3 // indirect go.lsp.dev/jsonrpc2 v0.10.0 // indirect go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 // indirect go.lsp.dev/protocol v0.12.0 // indirect go.lsp.dev/uri v0.3.0 // indirect - go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0 // indirect - go.opentelemetry.io/otel v1.40.0 // indirect - go.opentelemetry.io/otel/metric v1.40.0 // indirect - go.opentelemetry.io/otel/sdk v1.40.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect - go.opentelemetry.io/otel/trace v1.40.0 // indirect + go.opentelemetry.io/contrib/bridges/otelslog v0.17.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.43.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/host v0.67.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0 // indirect + go.opentelemetry.io/contrib/otelconf v0.22.0 // indirect + go.opentelemetry.io/contrib/propagators/autoprop v0.67.0 // indirect + go.opentelemetry.io/contrib/propagators/aws v1.42.0 // indirect + go.opentelemetry.io/contrib/propagators/b3 v1.42.0 // indirect + go.opentelemetry.io/contrib/propagators/jaeger v1.42.0 // indirect + go.opentelemetry.io/contrib/propagators/ot v1.42.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.19.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.64.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0 // indirect + go.opentelemetry.io/otel/log v0.19.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.19.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect + go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect + go.uber.org/dig v1.19.0 // indirect + go.uber.org/fx v1.24.0 // indirect go.uber.org/mock v0.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.1 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect + go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/arch v0.17.0 // indirect + golang.org/x/arch v0.26.0 // indirect golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect - golang.org/x/mod v0.32.0 // indirect - golang.org/x/net v0.50.0 // indirect - golang.org/x/oauth2 v0.34.0 // indirect - golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.41.0 // indirect - golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect - golang.org/x/term v0.40.0 // indirect - golang.org/x/text v0.34.0 // indirect - golang.org/x/time v0.14.0 // indirect - google.golang.org/api v0.256.0 // indirect - google.golang.org/genproto v0.0.0-20251124214823-79d6a2a48846 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.53.0 // indirect + golang.org/x/oauth2 v0.36.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect + golang.org/x/term v0.42.0 // indirect + golang.org/x/text v0.36.0 // indirect + golang.org/x/time v0.15.0 // indirect + google.golang.org/api v0.276.0 // indirect + google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.2 // indirect honnef.co/go/tools v0.6.1 // indirect + lukechampine.com/blake3 v1.4.1 // indirect mvdan.cc/gofumpt v0.7.0 // indirect mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect mvdan.cc/xurls/v2 v2.6.0 // indirect @@ -490,3 +601,11 @@ tool ( google.golang.org/grpc/cmd/protoc-gen-go-grpc google.golang.org/protobuf/cmd/protoc-gen-go ) + +// Local shim: cosmossdk.io/x/upgrade@v0.2.0 references cosmossdk.io/store v1 +// types in storeloader.go, which conflict with cosmos-sdk/store/v2 baseapp. +// We never call cosmossdk.io/x/upgrade/types.UpgradeStoreLoader (we use +// cosmos-sdk/x/upgrade/types.UpgradeStoreLoader instead), so the shim is +// the same source with storeloader.go removed. +// Pulled in transitively by ibc-go/v10 → packet-forward-middleware. +replace cosmossdk.io/x/upgrade => ./vendor-shims/cosmossdk-x-upgrade diff --git a/go.sum b/go.sum index 58bbb009..b969ee2a 100644 --- a/go.sum +++ b/go.sum @@ -6,664 +6,76 @@ buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.11-20250718181942-e buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go v1.36.11-20250718181942-e35f9b667443.1/go.mod h1:1Znr6gmYBhbxWUPRrrVnSLXQsz8bvFVw1HHJq2bI3VQ= buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.11-20250109164928-1da0de137947.1 h1:HwzzCRS4ZrEm1++rzSDxHnO0DOjiT1b8I/24e8a4exY= buf.build/gen/go/bufbuild/protodescriptor/protocolbuffers/go v1.36.11-20250109164928-1da0de137947.1/go.mod h1:8PRKXhgNes29Tjrnv8KdZzg3I1QceOkzibW1QK7EXv0= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1 h1:j9yeqTWEFrtimt8Nng2MIeRrpoCvQzM9/g25XTvqUGg= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM= -buf.build/gen/go/bufbuild/registry/connectrpc/go v1.19.1-20251202164234-62b14f0b533c.2 h1:eQ6XRVUaYYZFOZvBsyrOYLWbw6464s5dVnHscxa0b8w= -buf.build/gen/go/bufbuild/registry/connectrpc/go v1.19.1-20251202164234-62b14f0b533c.2/go.mod h1:omxVRch3jEPMINnUipLsuRWoEhND6LPXELKBG7xzyDw= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20251202164234-62b14f0b533c.1 h1:PdfIJUbUVKdajMVYuMdvr2Wvo+wmzGnlPEYA4bhFaWI= -buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20251202164234-62b14f0b533c.1/go.mod h1:1JJi9jvOqRxSMa+JxiZSm57doB+db/1WYCIa2lHfc40= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1 h1:s6hzCXtND/ICdGPTMGk7C+/BFlr2Jg5GyH0NKf4XGXg= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260415201107-50325440f8f2.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.19.2-20260126144947-819582968857.1 h1:AmiHsTjryKvBEZuu5ZDUJ2Lcmt140xrhe8o7LpRIKlU= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.19.2-20260126144947-819582968857.1/go.mod h1:SHAkhrdmtdlz37Xz1LRrr3DsDVNjZafuZ8OM6U0jH1I= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20260126144947-819582968857.1 h1:Yreby6Ypa58wdQUEm9Fnc5g8n/jP487Dq3aK5yBYwfk= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.36.11-20260126144947-819582968857.1/go.mod h1:1JJi9jvOqRxSMa+JxiZSm57doB+db/1WYCIa2lHfc40= buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.11-20241007202033-cf42259fcbfc.1 h1:iGPvEJltOXUMANWf0zajcRcbiOXLD90ZwPUFvbcuv6Q= buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.11-20241007202033-cf42259fcbfc.1/go.mod h1:nWVKKRA29zdt4uvkjka3i/y4mkrswyWwiu0TbdX0zts= -buf.build/go/app v0.2.0 h1:NYaH13A+RzPb7M5vO8uZYZ2maBZI5+MS9A9tQm66fy8= -buf.build/go/app v0.2.0/go.mod h1:0XVOYemubVbxNXVY0DnsVgWeGkcbbAvjDa1fmhBC+Wo= -buf.build/go/bufplugin v0.9.0 h1:ktZJNP3If7ldcWVqh46XKeiYJVPxHQxCfjzVQDzZ/lo= -buf.build/go/bufplugin v0.9.0/go.mod h1:Z0CxA3sKQ6EPz/Os4kJJneeRO6CjPeidtP1ABh5jPPY= +buf.build/go/app v0.2.1-0.20260407195847-833f8f978cda h1:eysSyjrJtkxU1A/9+Kv+1Mwq9K6BYBw+STIOVsZ256Y= +buf.build/go/app v0.2.1-0.20260407195847-833f8f978cda/go.mod h1:V32mBaPWsfq6REAeZvvs/rQl7ZCl9Dn7eW1BBrmH0GQ= +buf.build/go/bufplugin v0.10.0 h1:vZBX0mq9as5UIBug8U+/DkGRaHNlM/HVOw59O8fvOIU= +buf.build/go/bufplugin v0.10.0/go.mod h1:ax7obVurKDH1I2nR4pFTS+TE6K3kZhTmwDCN2YgdV8I= buf.build/go/bufprivateusage v0.1.0 h1:SzCoCcmzS3zyXHEXHeSQhGI7OTkgtljoknLzsUz9Gg4= buf.build/go/bufprivateusage v0.1.0/go.mod h1:GlCCJ3VVF7EqqU0CoRmo1FzAwwaKymEWSr+ty69xU5w= buf.build/go/interrupt v1.1.0 h1:olBuhgv9Sav4/9pkSLoxgiOsZDgM5VhRhvRpn3DL0lE= buf.build/go/interrupt v1.1.0/go.mod h1:ql56nXPG1oHlvZa6efNC7SKAQ/tUjS6z0mhJl0gyeRM= -buf.build/go/protovalidate v1.1.0 h1:pQqEQRpOo4SqS60qkvmhLTTQU9JwzEvdyiqAtXa5SeY= -buf.build/go/protovalidate v1.1.0/go.mod h1:bGZcPiAQDC3ErCHK3t74jSoJDFOs2JH3d7LWuTEIdss= +buf.build/go/protovalidate v1.2.0 h1:DQVrUWkmGTBij+kOYv/x2LLxwcLaGKMdzShj1/6/3H0= +buf.build/go/protovalidate v1.2.0/go.mod h1:7rYiQEhqvAipoazpVNBBH2S2f8bjG4huMVy1V2Yofn4= buf.build/go/protoyaml v0.6.0 h1:Nzz1lvcXF8YgNZXk+voPPwdU8FjDPTUV4ndNTXN0n2w= buf.build/go/protoyaml v0.6.0/go.mod h1:RgUOsBu/GYKLDSIRgQXniXbNgFlGEZnQpRAUdLAFV2Q= buf.build/go/spdx v0.2.0 h1:IItqM0/cMxvFJJumcBuP8NrsIzMs/UYjp/6WSpq8LTw= buf.build/go/spdx v0.2.0/go.mod h1:bXdwQFem9Si3nsbNy8aJKGPoaPi5DKwdeEp5/ArZ6w8= -buf.build/go/standard v0.1.0 h1:g98T9IyvAl0vS3Pq8iVk6Cvj2ZiFvoUJRtfyGa0120U= -buf.build/go/standard v0.1.0/go.mod h1:PiqpHz/7ZFq+kqvYhc/SK3lxFIB9N/aiH2CFC2JHIQg= +buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5 h1:njYKSWoLiq2i5O7y2bPPU2Yzp7iAU0Wk9KJ2OoAhNiU= +buf.build/go/standard v0.1.1-0.20260325175353-2b287e071df5/go.mod h1:DQmodNT9EHX94WzUaWiZK+/4EaFa/xZTc1gzfCxZVXU= cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.26.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.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -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= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -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.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= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -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.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.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -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/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= -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/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/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/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= -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/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/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/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/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/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= -cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= +cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= +cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= -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/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= -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= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -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/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/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/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= -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/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/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= -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/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/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/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -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/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/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/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/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/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= -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/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= -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/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= -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/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/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/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/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= -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/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= -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/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= -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/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/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/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/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= -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/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= -cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= -cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= -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/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/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= -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/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/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY= -cloud.google.com/go/logging v1.13.1/go.mod h1:XAQkfkMBxQRjQek96WLPNze7vsOmay9H5PqfsNYDqvw= -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.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qoboQT1E= -cloud.google.com/go/longrunning v0.7.0/go.mod h1:ySn2yXmjbK9Ba0zsQqunhDkYi0+9rlXIwnoAf+h+TPY= -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/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/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/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= -cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= -cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -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/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/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= -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/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/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= -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/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.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/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/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/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/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/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/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/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/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= -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/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/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/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/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/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= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -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/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= -cloud.google.com/go/storage v1.57.2 h1:sVlym3cHGYhrp6XZKkKb+92I1V42ks2qKKpB0CF5Mb4= -cloud.google.com/go/storage v1.57.2/go.mod h1:n5ijg4yiRXXpCu0sJTD6k+eMf7GRrJmPyr9YxLXGHOk= -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/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/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= -cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= -cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= -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/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/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/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= -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/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/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= -connectrpc.com/connect v1.19.1 h1:R5M57z05+90EfEvCY1b7hBxDVOUl45PrtXtAV2fOC14= -connectrpc.com/connect v1.19.1/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w= +cloud.google.com/go/iam v1.9.0 h1:89wyjxT6DL4b5rk/Nk8eBC9DHqf+JiMstrn5IEYxFw4= +cloud.google.com/go/iam v1.9.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/logging v1.15.0 h1:6ooUEBNT6jdWh2b36+iuPn6b/R9qN/tHCbvGS5255gg= +cloud.google.com/go/logging v1.15.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= +cloud.google.com/go/longrunning v0.10.0 h1:4OWvp1BjCvoeSZTog3sRFDu6j4IrI9TI4/Y9N+8h25g= +cloud.google.com/go/longrunning v0.10.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/monitoring v1.27.0 h1:BhYwMqao+e5Nn7JtWMM9m6zRtKtVUK6kJWMizXChkLU= +cloud.google.com/go/monitoring v1.27.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= +cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= +cloud.google.com/go/trace v1.13.0 h1:RfqsqPOiSCG8ql50UZt5F65KrVa1zbY9mJrO7xvZfbE= +cloud.google.com/go/trace v1.13.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= +connectrpc.com/connect v1.19.2 h1:McQ83FGdzL+t60peksi0gXC7MQ/iLKgLduAnThbM0mo= +connectrpc.com/connect v1.19.2/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w= +connectrpc.com/grpcreflect v1.3.0 h1:Y4V+ACf8/vOb1XOc251Qun7jMB75gCUNw6llvB9csXc= +connectrpc.com/grpcreflect v1.3.0/go.mod h1:nfloOtCS8VUQOQ1+GTdFzVg2CJo4ZGaat8JIovCtDYs= connectrpc.com/otelconnect v0.9.0 h1:NggB3pzRC3pukQWaYbRHJulxuXvmCKCKkQ9hbrHAWoA= connectrpc.com/otelconnect v0.9.0/go.mod h1:AEkVLjCPXra+ObGFCOClcJkNjS7zPaQSqvO0lCyjfZc= -cosmossdk.io/api v0.9.2 h1:9i9ptOBdmoIEVEVWLtYYHjxZonlF/aOVODLFaxpmNtg= -cosmossdk.io/api v0.9.2/go.mod h1:CWt31nVohvoPMTlPv+mMNCtC0a7BqRdESjCsstHcTkU= -cosmossdk.io/client/v2 v2.0.0-beta.7 h1:O0PfZL5kC3Sp54wZASLNihQ612Gd6duMp11aM9wawNg= -cosmossdk.io/client/v2 v2.0.0-beta.7/go.mod h1:TzwwrzeK+AfSVSESVEIOYO/9xuCh1fPv0HgeocmfVnM= -cosmossdk.io/collections v1.3.1 h1:09e+DUId2brWsNOQ4nrk+bprVmMUaDH9xvtZkeqIjVw= -cosmossdk.io/collections v1.3.1/go.mod h1:ynvkP0r5ruAjbmedE+vQ07MT6OtJ0ZIDKrtJHK7Q/4c= -cosmossdk.io/core v0.11.3 h1:mei+MVDJOwIjIniaKelE3jPDqShCc/F4LkNNHh+4yfo= -cosmossdk.io/core v0.11.3/go.mod h1:9rL4RE1uDt5AJ4Tg55sYyHWXA16VmpHgbe0PbJc6N2Y= +cosmossdk.io/api v1.0.0 h1:qTV8OPVEwcBPwp2b9p4Qy4noZyihJ+sOMaWL/VT+RCc= +cosmossdk.io/api v1.0.0/go.mod h1:fKRljeYk+04p4T8Shdyv+uH2fSVyzHoWrvDAs/7OxfI= +cosmossdk.io/client/v2 v2.11.0 h1:k3hg9liNjrLv5P/PEle8wcihSwQ/ALCr1fja2sp5His= +cosmossdk.io/client/v2 v2.11.0/go.mod h1:wJNFx9sSqSDE3QeXIU6DRZDagqdv98j6O7hmjnfGa2I= +cosmossdk.io/collections v1.4.0 h1:b373bkxCxKiRbapxZ42TRmcKJEnBVBebdQVk9I5IkkE= +cosmossdk.io/collections v1.4.0/go.mod h1:gxbieVY3tjbvWlkm3yOXf7sGyDrVi12haZH+sek6whw= +cosmossdk.io/core v1.1.0 h1:iJ7j2DjNsFzg4/z4ImNQYzy2D4LfMCsaQ8Lrz1KCmxk= +cosmossdk.io/core v1.1.0/go.mod h1:qGmJxBFHobvG1k4bROQnueslotBU5MIKZLC57xVBYYI= cosmossdk.io/depinject v1.2.1 h1:eD6FxkIjlVaNZT+dXTQuwQTKZrFZ4UrfCq1RKgzyhMw= cosmossdk.io/depinject v1.2.1/go.mod h1:lqQEycz0H2JXqvOgVwTsjEdMI0plswI7p6KX+MVqFOM= -cosmossdk.io/errors v1.0.2 h1:wcYiJz08HThbWxd/L4jObeLaLySopyyuUFB5w4AGpCo= -cosmossdk.io/errors v1.0.2/go.mod h1:0rjgiHkftRYPj//3DrD6y8hcm40HcPv/dR4R/4efr0k= +cosmossdk.io/errors v1.1.0 h1:X2DSt9JYgH7cuiaDr318aUqIl2z5Lfo/PdGzAtmczUU= +cosmossdk.io/errors v1.1.0/go.mod h1:lnjBmx7etZpMTLnxdspZupH0d9HGRWZhiezDZX2ayyI= cosmossdk.io/log v1.6.1 h1:YXNwAgbDwMEKwDlCdH8vPcoggma48MgZrTQXCfmMBeI= cosmossdk.io/log v1.6.1/go.mod h1:gMwsWyyDBjpdG9u2avCFdysXqxq28WJapJvu+vF1y+E= +cosmossdk.io/log/v2 v2.1.0 h1:oWLWqZ1UObWu5hIS3dvTW7QyjtvlmSzC3LOy04U/hVI= +cosmossdk.io/log/v2 v2.1.0/go.mod h1:zDNpuRD2sWw4zuw1lZYg/jxKftVG+VizgcWAWkIorwY= cosmossdk.io/math v1.5.3 h1:WH6tu6Z3AUCeHbeOSHg2mt9rnoiUWVWaQ2t6Gkll96U= cosmossdk.io/math v1.5.3/go.mod h1:uqcZv7vexnhMFJF+6zh9EWdm/+Ylyln34IvPnBauPCQ= cosmossdk.io/schema v1.1.0 h1:mmpuz3dzouCoyjjcMcA/xHBEmMChN+EHh8EHxHRHhzE= @@ -672,27 +84,15 @@ cosmossdk.io/store v1.1.2 h1:3HOZG8+CuThREKv6cn3WSohAc6yccxO3hLzwK6rBC7o= cosmossdk.io/store v1.1.2/go.mod h1:60rAGzTHevGm592kFhiUVkNC9w7gooSEn5iUBPzHQ6A= cosmossdk.io/tools/confix v0.1.2 h1:2hoM1oFCNisd0ltSAAZw2i4ponARPmlhuNu3yy0VwI4= cosmossdk.io/tools/confix v0.1.2/go.mod h1:7XfcbK9sC/KNgVGxgLM0BrFbVcR/+6Dg7MFfpx7duYo= -cosmossdk.io/x/circuit v0.1.1 h1:KPJCnLChWrxD4jLwUiuQaf5mFD/1m7Omyo7oooefBVQ= -cosmossdk.io/x/circuit v0.1.1/go.mod h1:B6f/urRuQH8gjt4eLIXfZJucrbreuYrKh5CSjaOxr+Q= -cosmossdk.io/x/evidence v0.2.0 h1:o72zbmgCM7U0v7z7b0XnMB+NqX0tFamqb1HHkQbhrZ0= -cosmossdk.io/x/evidence v0.2.0/go.mod h1:zx/Xqy+hnGVzkqVuVuvmP9KsO6YCl4SfbAetYi+k+sE= -cosmossdk.io/x/feegrant v0.2.0 h1:oq3WVpoJdxko/XgWmpib63V1mYy9ZQN/1qxDajwGzJ8= -cosmossdk.io/x/feegrant v0.2.0/go.mod h1:9CutZbmhulk/Yo6tQSVD5LG8Lk40ZAQ1OX4d1CODWAE= cosmossdk.io/x/tx v0.14.0 h1:hB3O25kIcyDW/7kMTLMaO8Ripj3yqs5imceVd6c/heA= cosmossdk.io/x/tx v0.14.0/go.mod h1:Tn30rSRA1PRfdGB3Yz55W4Sn6EIutr9xtMKSHij+9PM= -cosmossdk.io/x/upgrade v0.2.0 h1:ZHy0xny3wBCSLomyhE06+UmQHWO8cYlVYjfFAJxjz5g= -cosmossdk.io/x/upgrade v0.2.0/go.mod h1:DXDtkvi//TrFyHWSOaeCZGBoiGAE6Rs8/0ABt2pcDD0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/4meepo/tagalign v1.4.2 h1:0hcLHPGMjDyM1gHG58cS73aQF8J4TdVR96TZViorO9E= github.com/4meepo/tagalign v1.4.2/go.mod h1:+p4aMyFM+ra7nb41CnFG6aSDXqRxU/w1VQqScKqDARI= 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.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= -github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/Abirdcfly/dupword v0.1.3 h1:9Pa1NuAsZvpFPi9Pqkd93I7LIYRURj+A//dFd5tgBeE= github.com/Abirdcfly/dupword v0.1.3/go.mod h1:8VbB2t7e10KRNdwTVoxdBaxla6avbhGzb8sCTygUMhw= github.com/Antonboom/errname v1.0.0 h1:oJOOWR07vS1kRusl6YRSlat7HFnb3mSfMl6sDMRoTBA= @@ -704,8 +104,8 @@ github.com/Antonboom/testifylint v1.5.2/go.mod h1:vxy8VJ0bc6NavlYqjZfmp6EfqXMtBg github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= +github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Crocmagnon/fatcontext v0.7.1 h1:SC/VIbRRZQeQWj/TcQBS6JmrXcfA+BU4OGSVUt54PjM= github.com/Crocmagnon/fatcontext v0.7.1/go.mod h1:1wMvv3NXEBJucFGfwOJBxSVWcoIO6emV215SMkW9MFU= @@ -718,39 +118,37 @@ github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rW github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1 h1:Sz1JIXEcSfhz7fUi7xHnhpIE0thVASYjvosApmHuD2k= github.com/GaijinEntertainment/go-exhaustruct/v3 v3.3.1/go.mod h1:n/LSCXNuIYqVfBlVXyHfMQkZDdp1/mmxfSjADd3z1Zg= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0 h1:xfK3bbi6F2RDtaZFtUdKO3osOBIhNb+xTs8lFW6yx9o= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 h1:s0WlVbf9qpvkh1c/uDAPElam0WrL7fHRIidgZJ7UqZI= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 h1:rIkQfkCOVKc1OiRCNcSDD8ml5RJlZbH/Xsq7lbpynwc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0/go.mod h1:RD2SsorTmYhF6HkTmDw7KmPYQk8OBYwTkuasChwv7R4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 h1:O2sXMyJh8b7devAGdE+163xtRurt0RVpB6DIzX5vGfg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0/go.mod h1:hEpiGU18xf70qb3jbTcIggWAiEfX/cOIVc2OTe4OegA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0 h1:ZIT85vKP7LBS84XJ0WdJ3dPOX3iz4j3c0+lpajGQMyo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0/go.mod h1:rqP9UEhOXv9WhQ7Gjz+G5y/pf8+BJZW5/Ts0AhE0PwE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4= -github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= +github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= 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/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard/v2 v2.2.1 h1:vckeWVESWp6Qog7UZSARNqfu/cZqvki8zsuj3piCMx4= github.com/OpenPeeDeeP/depguard/v2 v2.2.1/go.mod h1:q4DKzC4UcVaAvcfd41CZh0PWpGgzrVxUYBlgKNGquUo= +github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260116142910-60249400e523 h1:pQUezn45oyv/8VcOQvPCg2851EIIusY0YKkJhAXsy2I= +github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260116142910-60249400e523/go.mod h1:ioLG6R+5bUSO1oeGSDxOV3FADARuMoytZCSX6MEMQkI= +github.com/RoaringBitmap/roaring/v2 v2.16.0 h1:Kys1UNf49d5W8Tq3bpuAhIr/Z8/yPB+59CO8A6c/BbE= +github.com/RoaringBitmap/roaring/v2 v2.16.0/go.mod h1:eq4wdNXxtJIS/oikeCzdX1rBzek7ANzbth041hrU8Q4= 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/VictoriaMetrics/fastcache v1.13.0 h1:AW4mheMR5Vd9FkAPUv+NH6Nhw+fmbTMGMsNAoA/+4G0= github.com/VictoriaMetrics/fastcache v1.13.0/go.mod h1:hHXhl4DA2fTL2HTZDJFXWgW0LNjo6B+4aj2Wmng3TjU= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/adlio/schema v1.3.6 h1:k1/zc2jNfeiZBA5aFTRy37jlBIuCkXCm0XmvpzCKI9I= -github.com/adlio/schema v1.3.6/go.mod h1:qkxwLgPBd1FgLRHYVCmQT/rrBr3JH38J9LjmVzWNudg= +github.com/adlio/schema v1.4.0 h1:dekxG6P0my/bPvlyWzMULelR2Xej8RGErlnJcoY5ddw= +github.com/adlio/schema v1.4.0/go.mod h1:3/ojUldWBCWp4e+6VN9ets6unG5WdqbjF7vyzM0zTVQ= 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/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/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/go-check-sumtype v0.3.1 h1:u9aUvbGINJxLVXiFvHUlPEaD7VDULsrxJb4Aq31NLkU= @@ -772,15 +170,11 @@ github.com/alingse/nilnesserr v0.1.2 h1:Yf8Iwm3z2hUUrP4muWfW83DF4nE3r1xZ26fGWUKC github.com/alingse/nilnesserr v0.1.2/go.mod h1:1xJPrXonEtX7wyTq8Dytns5P2hNzoWymVUIaKm4HNFg= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= -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/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/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= @@ -792,11 +186,48 @@ github.com/ashanbrown/makezero v1.2.0 h1:/2Lp1bypdmK9wDIq7uWBlDF1iMUpIIS4A+pF6C9 github.com/ashanbrown/makezero v1.2.0/go.mod h1:dxlPhHbDMC6N6xICzFBSK+4njQDdK8euNO0qjQMtGY4= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ= -github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.41.6 h1:1AX0AthnBQzMx1vbmir3Y4WsnJgiydmnJjiLu+LvXOg= +github.com/aws/aws-sdk-go-v2 v1.41.6/go.mod h1:dy0UzBIfwSeot4grGvY1AqFWN5zgziMmWGzysDnHFcQ= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 h1:adBsCIIpLbLmYnkQU+nAChU5yhVTvu5PerROm+/Kq2A= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9/go.mod h1:uOYhgfgThm/ZyAuJGNQ5YgNyOlYfqnGpTHXvk3cpykg= +github.com/aws/aws-sdk-go-v2/config v1.32.14 h1:opVIRo/ZbbI8OIqSOKmpFaY7IwfFUOCCXBsUpJOwDdI= +github.com/aws/aws-sdk-go-v2/config v1.32.14/go.mod h1:U4/V0uKxh0Tl5sxmCBZ3AecYny4UNlVmObYjKuuaiOo= +github.com/aws/aws-sdk-go-v2/credentials v1.19.14 h1:n+UcGWAIZHkXzYt87uMFBv/l8THYELoX6gVcUvgl6fI= +github.com/aws/aws-sdk-go-v2/credentials v1.19.14/go.mod h1:cJKuyWB59Mqi0jM3nFYQRmnHVQIcgoxjEMAbLkpr62w= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 h1:NUS3K4BTDArQqNu2ih7yeDLaS3bmHD0YndtA6UP884g= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21/go.mod h1:YWNWJQNjKigKY1RHVJCuupeWDrrHjRqHm0N9rdrWzYI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 h1:GmLa5Kw1ESqtFpXsx5MmC84QWa/ZrLZvlJGa2y+4kcQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22/go.mod h1:6sW9iWm9DK9YRpRGga/qzrzNLgKpT2cIxb7Vo2eNOp0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 h1:dY4kWZiSaXIzxnKlj17nHnBcXXBfac6UlsAx2qL6XrU= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22/go.mod h1:KIpEUx0JuRZLO7U6cbV204cWAEco2iC3l061IxlwLtI= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 h1:FPXsW9+gMuIeKmz7j6ENWcWtBGTe1kH8r9thNt5Uxx4= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23/go.mod h1:7J8iGMdRKk6lw2C+cMIphgAnT8uTwBwNOsGkyOCm80U= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 h1:HtOTYcbVcGABLOVuPYaIihj6IlkqubBwFj10K5fxRek= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8/go.mod h1:VsK9abqQeGlzPgUr+isNWzPlK2vKe9INMLWnY65f5Xs= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 h1:xnvDEnw+pnj5mctWiYuFbigrEzSm35x7k4KS/ZkCANg= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14/go.mod h1:yS5rNogD8e0Wu9+l3MUwr6eENBzEeGejvINpN5PAYfY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 h1:PUmZeJU6Y1Lbvt9WFuJ0ugUK2xn6hIWUBBbKuOWF30s= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22/go.mod h1:nO6egFBoAaoXze24a2C0NjQCvdpk8OueRoYimvEB9jo= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 h1:SE+aQ4DEqG53RRCAIHlCf//B2ycxGH7jFkpnAh/kKPM= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22/go.mod h1:ES3ynECd7fYeJIL6+oax+uIEljmfps0S70BaQzbMd/o= +github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0 h1:7G26Sae6PMKn4kMcU5JzNfrm1YrKwyOhowXPYR2WiWY= +github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0/go.mod h1:Fw9aqhJicIVee1VytBBjH+l+5ov6/PhbtIK/u3rt/ls= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 h1:lFd1+ZSEYJZYvv9d6kXzhkZu07si3f+GQ1AaYwa2LUM= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.15/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 h1:dzztQ1YmfPrxdrOiuZRMF6fuOwWlWpD2StNLTceKpys= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 h1:p8ogvvLugcR/zLBXTXrTkj0RYBUdErbMnAFFp12Lm/U= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.10/go.mod h1:60dv0eZJfeVXfbT1tFJinbHrDfSJ2GZl4Q//OSSNAVw= +github.com/aws/smithy-go v1.25.0 h1:Sz/XJ64rwuiKtB6j98nDIPyYrV1nVNJ4YU74gttcl5U= +github.com/aws/smithy-go v1.25.0/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= +github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -812,12 +243,10 @@ github.com/bkielbasa/cyclop v1.2.3 h1:faIVMIGDIANuGPWH031CZJTi2ymOQBULs9H21HSMa5 github.com/bkielbasa/cyclop v1.2.3/go.mod h1:kHTwA9Q0uZqOADdupvcFJQtp/ksSnytRMe8ztxG8Fuo= github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE= -github.com/bmatcuk/doublestar/v4 v4.9.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= +github.com/bmatcuk/doublestar/v4 v4.10.0 h1:zU9WiOla1YA122oLM6i4EXvGW62DvKZVxIe6TYWexEs= +github.com/bmatcuk/doublestar/v4 v4.10.0/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/bombsimon/wsl/v4 v4.5.0 h1:iZRsEvDdyhd2La0FVi5k6tYehpOR/R7qIUjmKk7N74A= github.com/bombsimon/wsl/v4 v4.5.0/go.mod h1:NOQ3aLF4nD7N5YPXMruR6ZXDOAqLoM0GEpLwTdvmOSc= -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/breml/bidichk v0.3.2 h1:xV4flJ9V5xWTqxL+/PMFF6dtJPvZLPsyixAoPe8BGJs= github.com/breml/bidichk v0.3.2/go.mod h1:VzFLBxuYtT23z5+iVkamXO386OB+/sVwZOpIj6zXGos= github.com/breml/errchkjson v0.4.0 h1:gftf6uWZMtIa/Is3XJgibewBm2ksAQSY/kABDNFTAdk= @@ -851,22 +280,24 @@ 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.64.0 h1:puHWFcVKmZFSu4KuaN0kZiQ32n7VVc3un1FeLU77XUs= -github.com/bufbuild/buf v1.64.0/go.mod h1:U4ISwkjZXRLMaCkPG9zp1xY3xHEIwhCFwyNAaA56SGw= -github.com/bufbuild/protocompile v0.14.2-0.20260114160500-16922e24f2b6 h1:0PbP1qlDR1ZVc0WBkGmB2Rup3CwtSvLI3nZBltDg4G8= -github.com/bufbuild/protocompile v0.14.2-0.20260114160500-16922e24f2b6/go.mod h1:5UUj46Eu+U+C59C5N6YilaMI7WWfP2bW9xGcOkme2DI= -github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1 h1:V1xulAoqLqVg44rY97xOR+mQpD2N+GzhMHVwJ030WEU= -github.com/bufbuild/protoplugin v0.0.0-20250218205857-750e09ce93e1/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ= +github.com/bufbuild/buf v1.69.0 h1:q1YTnHJISHuoeUdmsuC9u+nb9rV8glM/TOsPNEteEzg= +github.com/bufbuild/buf v1.69.0/go.mod h1:Q3KRCXSanDCMFs2zL/MqUwUQV0OUqs23P2sy58CW0nc= +github.com/bufbuild/protocompile v0.14.2-0.20260429155904-12ef1ef2ce91 h1:RPIMBLTMx/CRy0NVyb6yJDlGx2Vo84FsU+kAh46zqIA= +github.com/bufbuild/protocompile v0.14.2-0.20260429155904-12ef1ef2ce91/go.mod h1:DhgqsRznX/F0sGkUYtTQJRP+q8xMReQRQ3qr+n1opWU= +github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b h1:b7wvo9ZhjLzCp7tGbOUMvgtYTnd33zGSAmMxcdxMnhQ= +github.com/bufbuild/protoplugin v0.0.0-20260414125817-25d1d281b46b/go.mod h1:c5D8gWRIZ2HLWO3gXYTtUfw/hbJyD8xikv2ooPxnklQ= github.com/butuzov/ireturn v0.3.1 h1:mFgbEI6m+9W8oP/oDdfA34dLisRFCj2G6o/yiI1yZrY= github.com/butuzov/ireturn v0.3.1/go.mod h1:ZfRp+E7eJLC0NQmk1Nrm1LOrn/gQlOykv+cVPdiXH5M= github.com/butuzov/mirror v1.3.0 h1:HdWCXzmwlQHdVhwvsfBb2Au0r3HyINry3bDWLYXiKoc= github.com/butuzov/mirror v1.3.0/go.mod h1:AEij0Z8YMALaq4yQj9CPPVYOyJQyiexpQEQgihajRfI= -github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= -github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= -github.com/bytedance/sonic v1.14.2 h1:k1twIoe97C1DtYUo+fZQy865IuHia4PR5RPiuGPPIIE= -github.com/bytedance/sonic v1.14.2/go.mod h1:T80iDELeHiHKSc0C9tubFygiuXoGzrkjKzX2quAx980= -github.com/bytedance/sonic/loader v0.4.0 h1:olZ7lEqcxtZygCK9EKYKADnpQoYkRQxaeY2NYzevs+o= -github.com/bytedance/sonic/loader v0.4.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= +github.com/bytedance/gopkg v0.1.4 h1:oZnQwnX82KAIWb7033bEwtxvTqXcYMxDBaQxo5JJHWM= +github.com/bytedance/gopkg v0.1.4/go.mod h1:v1zWfPm21Fb+OsyXN2VAHdL6TBb2L88anLQgdyje6R4= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/bytedance/sonic v1.15.0 h1:/PXeWFaR5ElNcVE84U0dOHjiMHQOwNIx3K4ymzh/uSE= +github.com/bytedance/sonic v1.15.0/go.mod h1:tFkWrPz0/CUCLEF4ri4UkHekCIcdnkqXw9VduqpJh0k= +github.com/bytedance/sonic/loader v0.5.1 h1:Ygpfa9zwRCCKSlrp5bBP/b/Xzc3VxsAW+5NIYXrOOpI= +github.com/bytedance/sonic/loader v0.5.1/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/catenacyber/perfsprint v0.8.2 h1:+o9zVmCSVa7M4MvabsWvESEhpsMkhfE7k0sHNGL95yw= github.com/catenacyber/perfsprint v0.8.2/go.mod h1:q//VWC2fWbcdSLEY1R3l8n0zQCDPdE4IjZwyY1HMunM= @@ -877,21 +308,20 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= 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/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -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.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4= github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ= github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc= github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww= -github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= 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= @@ -912,22 +342,14 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= 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-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-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= -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/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= @@ -939,80 +361,83 @@ github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILM github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo= github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw= github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo= -github.com/cockroachdb/redact v1.1.6 h1:zXJBwDZ84xJNlHl1rMyCojqyIxv+7YUpQiJLQ7n4314= -github.com/cockroachdb/redact v1.1.6/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/redact v1.1.8 h1:8eVLLj6juKxiKrAEw2b8cJvNqWq++U8WOfQFuL7KTaA= +github.com/cockroachdb/redact v1.1.8/go.mod h1:GceHHpJ0rMDpYARL5In88Alq/xMBUtVlz7Qxix6ZVkw= github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb h1:3bCgBvB8PbJVMX1ouCcSIxvsqKPYM7gs72o0zC76n9g= github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.21 h1:qcIJSH9LiwU5s6ZgKR5eRbsLNucbubfraDs5bzgjtOI= -github.com/cometbft/cometbft v0.38.21/go.mod h1:UCu8dlHqvkAsmAFmWDRWNZJPlu6ya2fTWZlDrWsivwo= -github.com/cometbft/cometbft-db v0.14.1 h1:SxoamPghqICBAIcGpleHbmoPqy+crij/++eZz3DlerQ= -github.com/cometbft/cometbft-db v0.14.1/go.mod h1:KHP1YghilyGV/xjD5DP3+2hyigWx0WTp9X+0Gnx0RxQ= +github.com/cometbft/cometbft v0.39.0-rc1.0.20260417162916-9fcf8612cc6c h1:6m6fZznl23XkcSMWElX+uwcojlfswo+KfowqEUNCcmc= +github.com/cometbft/cometbft v0.39.0-rc1.0.20260417162916-9fcf8612cc6c/go.mod h1:+UN4jo94b9NhV7d+7ZOfkOksAZP3gfNV8j/pCt/SLfg= +github.com/cometbft/cometbft-db v1.0.4 h1:cezb8yx/ZWcF124wqUtAFjAuDksS1y1yXedvtprUFxs= +github.com/cometbft/cometbft-db v1.0.4/go.mod h1:M+BtHAGU2XLrpUxo3Nn1nOCcnVCiLM9yx5OuT0u5SCA= github.com/consensys/gnark-crypto v0.19.2 h1:qrEAIXq3T4egxqiliFFoNrepkIWVEeIYwt3UL0fvS80= github.com/consensys/gnark-crypto v0.19.2/go.mod h1:rT23F0XSZqE0mUA0+pRtnL56IbPxs6gp4CeRsBk4XS0= -github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= -github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= +github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= +github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= -github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= -github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/containerd/stargz-snapshotter/estargz v0.18.1 h1:cy2/lpgBXDA3cDKSyEfNOFMA/c10O1axL69EU7iirO8= -github.com/containerd/stargz-snapshotter/estargz v0.18.1/go.mod h1:ALIEqa7B6oVDsrF37GkGN20SuvG/pIMm7FwP7ZmRb0Q= +github.com/containerd/stargz-snapshotter/estargz v0.18.2 h1:yXkZFYIzz3eoLwlTUZKz2iQ4MrckBxJjkmD16ynUTrw= +github.com/containerd/stargz-snapshotter/estargz v0.18.2/go.mod h1:XyVU5tcJ3PRpkA9XS2T5us6Eg35yM0214Y+wvrZTBrY= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -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/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/btree v0.0.0-20250924232609-2c6195d95951 h1:dC3GJcS8bJiSEe7VAFDDFgFnVM1G9nBdGOgqJsmsZwM= +github.com/cosmos/btree v0.0.0-20250924232609-2c6195d95951/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A= +github.com/cosmos/btree v1.0.0 h1:V3OdIzTQw2yE7f6pD6FfA9j2/YLj1UpB9MdY0zU3v3k= +github.com/cosmos/btree v1.0.0/go.mod h1:BZML+flLn4d3MOa4POmzDWf5HQ7EGh0y1OLlfhh7A0k= github.com/cosmos/cosmos-db v1.1.3 h1:7QNT77+vkefostcKkhrzDK9uoIEryzFrU9eoMeaQOPY= github.com/cosmos/cosmos-db v1.1.3/go.mod h1:kN+wGsnwUJZYn8Sy5Q2O0vCYA99MJllkKASbs6Unb9U= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.53.6 h1:aJeInld7rbsHtH1qLHu2aZJF9t40mGlqp3ylBLDT0HI= -github.com/cosmos/cosmos-sdk v0.53.6/go.mod h1:N6YuprhAabInbT3YGumGDKONbvPX5dNro7RjHvkQoKE= -github.com/cosmos/evm v0.6.0 h1:jwJerLS7btDgDpZOYy7lUC+1rNRCGGE80TJ6r4guufo= -github.com/cosmos/evm v0.6.0/go.mod h1:QnaJDtxqon2mywiYqxM8VwW8FKeFazi0au0qzVpFAG8= +github.com/cosmos/cosmos-sdk v0.54.0-rc.1.0.20260417173832-6850afc89406 h1:oQQM/SKjAvKm+V3hy/rwBvVjlM8t3SM0Zi8qNDKsnrQ= +github.com/cosmos/cosmos-sdk v0.54.0-rc.1.0.20260417173832-6850afc89406/go.mod h1:dwyTufJxdycPjCTGkhOrcMxPkWeLvbQTPmmz6l+HoVs= +github.com/cosmos/cosmos-sdk/store/v2 v2.0.0 h1:5CFXBU5cHIvxMpz5QBrTwR5DL/W3uZL2BYYMoDp4siY= +github.com/cosmos/cosmos-sdk/store/v2 v2.0.0/go.mod h1:XyRyi5fGjIcokBqS1cyA8/QVbVNy4ui8hmpk1gezuHo= +github.com/cosmos/evm v0.7.0-beta.0 h1:MgSiN7xi1fJ34G269BWr4RX9+7zGXWMv1JTF/DWGotA= +github.com/cosmos/evm v0.7.0-beta.0/go.mod h1:nzlU/yJgsYXDPxLptYgAYQ2M1Cao5szjX4QMDBSzPAY= 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/go-ethereum v1.16.2-cosmos-1 h1:QIaIS6HIdPSBdTvpFhxswhMLUJgcr4irbd2o9ZKldAI= -github.com/cosmos/go-ethereum v1.16.2-cosmos-1/go.mod h1:X5CIOyo8SuK1Q5GnaEizQVLHT/DfsiGWuNeVdQcEMNA= +github.com/cosmos/go-ethereum v1.17.2-cosmos-0 h1:V1vadF7/miUwwbNh3iiqNM51aHAG/5mzRCeIdcdostw= +github.com/cosmos/go-ethereum v1.17.2-cosmos-0/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o= 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.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= github.com/cosmos/gogoproto v1.7.2 h1:5G25McIraOC0mRFv9TVO139Uh3OklV2hczr13KKVHCA= github.com/cosmos/gogoproto v1.7.2/go.mod h1:8S7w53P1Y1cHwND64o0BnArT6RmdgIvsBuco6uTllsk= -github.com/cosmos/iavl v1.2.6 h1:Hs3LndJbkIB+rEvToKJFXZvKo6Vy0Ex1SJ54hhtioIs= -github.com/cosmos/iavl v1.2.6/go.mod h1:GiM43q0pB+uG53mLxLDzimxM9l/5N9UuSY3/D0huuVw= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10 v10.1.0 h1:epKcbFAeWRRw1i1jZnYzLIEm9sgUPaL1RftuRjjUKGw= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10 v10.1.0/go.mod h1:S4ZQwf5/LhpOi8JXSAese/6QQDk87nTdicJPlZ5q9UQ= +github.com/cosmos/iavl v1.2.8 h1:55F96BGUJ7KT7h+Ky/cEqS+pEvhFqsU4O8Th3F0N1js= +github.com/cosmos/iavl v1.2.8/go.mod h1:FRHN4tO+6crf0p2zsqye+nAbsMgiwdkxpWm18DyP6+Y= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10 v10.6.0 h1:8DI3/QLT6oNnX0Rfkk1k3Y/fYogMSR/6S9E7ojswApk= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v10 v10.6.0/go.mod h1:iXHZyuZYhkC6Dg2m5m5a92P6LWdJe5Wuruu7RQJqfVM= github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI= github.com/cosmos/ibc-go/modules/capability v1.0.1/go.mod h1:rquyOV262nGJplkumH+/LeYs04P3eV8oB7ZM4Ygqk4E= -github.com/cosmos/ibc-go/v10 v10.5.0 h1:NI+cX04fXdu9JfP0V0GYeRi1ENa7PPdq0BYtVYo8Zrs= -github.com/cosmos/ibc-go/v10 v10.5.0/go.mod h1:a74pAPUSJ7NewvmvELU74hUClJhwnmm5MGbEaiTw/kE= +github.com/cosmos/ibc-go/v10 v10.6.0 h1:k7PZVSLXFtCdoWlU+ERGn2m1Np4Tw8BF8WyPGl0DOi4= +github.com/cosmos/ibc-go/v10 v10.6.0/go.mod h1:a74pAPUSJ7NewvmvELU74hUClJhwnmm5MGbEaiTw/kE= +github.com/cosmos/ibc-go/v11 v11.0.0 h1:9EIehi88hNP1cCU83NC+J8UXNn+05YZt9eqmnzCQLSg= +github.com/cosmos/ibc-go/v11 v11.0.0/go.mod h1:iWlzLuCu+ctVbQwoVf5z51HE5e/NE8/pwnLVVDmP++4= github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= +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 v1.0.0 h1:jNKW89nPf0vR0EkjHG8Zz16h6p3zqwYEOxlHArwgYtw= github.com/cosmos/ledger-cosmos-go v1.0.0/go.mod h1:mGaw2wDOf+Z6SfRJsMGxU9DIrBa4du0MAiPlpPhLAOE= 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.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= -github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= -github.com/creachadair/atomicfile v0.3.7 h1:wdg8+Isz07NDMi2yZQAoI1EKB9SxuDhvo5MUii/ZqlM= -github.com/creachadair/atomicfile v0.3.7/go.mod h1:lUrZrE/XjMA7rJY/n8dF7/sSpy6KjtPaxPbrDambthA= -github.com/creachadair/mds v0.22.1 h1:Wink9jeYR7brBbOkOTVZVrd6vyb5W4ZBRhlZd96TSgU= -github.com/creachadair/mds v0.22.1/go.mod h1:ArfS0vPHoLV/SzuIzoqTEZfoYmac7n9Cj8XPANHocvw= -github.com/creachadair/tomledit v0.0.28 h1:aQJVwcNTzx4SZ/tSbkyGE69w4YQ6Gn+xhHHKtqMZwuw= -github.com/creachadair/tomledit v0.0.28/go.mod h1:pqb2HRQi0lMu6MBiUmTk/0XQ+SmPtq2QbUrG+eiLP5w= +github.com/crate-crypto/go-eth-kzg v1.5.0 h1:FYRiJMJG2iv+2Dy3fi14SVGjcPteZ5HAAUe4YWlJygc= +github.com/crate-crypto/go-eth-kzg v1.5.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= +github.com/creachadair/atomicfile v0.3.8 h1:PyMIBZHZunTF+2+OSJCUg4XWO9nh6NwIacUBtF6tdg8= +github.com/creachadair/atomicfile v0.3.8/go.mod h1:oZrfNyYdwMjCD+eKNqsnPmdnQ54z4ujOoYvNTZyuJ2A= +github.com/creachadair/mds v0.24.1 h1:bzL4ItCtAUxxO9KkotP0PVzlw4tnJicAcjPu82v2mGs= +github.com/creachadair/mds v0.24.1/go.mod h1:ArfS0vPHoLV/SzuIzoqTEZfoYmac7n9Cj8XPANHocvw= +github.com/creachadair/tomledit v0.0.29 h1:dB5CbdwJMpn/fmfAPTAAleXF/KJwY0Ggc1eL/zvZRgk= +github.com/creachadair/tomledit v0.0.29/go.mod h1:4SoTXxzHgvzHRMIJPw+o6zK/yXii4VjLrb6/3gCQnyA= 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.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/curioswitch/go-reassign v0.3.0 h1:dh3kpQHuADL3cobV/sSGETA8DOv457dwl+fbBAhrQPs= github.com/curioswitch/go-reassign v0.3.0/go.mod h1:nApPCCTtqLJN/s8HfItCcKV0jIPwluBOvZP+dsJGA88= github.com/daixiang0/gci v0.13.5 h1:kThgmH1yBmZSBCh1EJVxQ7JsHpm5Oms0AMed/0LaH4c= @@ -1024,14 +449,18 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= +github.com/dchest/siphash v1.2.3 h1:QXwFc8cFOR2dSa/gE6o/HokBMWtLUaNDVd+22aKHeEA= +github.com/dchest/siphash v1.2.3/go.mod h1:0NvQU092bT0ipiFN++/rXm69QG9tVxLAlQHIXMPAkHc= github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 h1:5RVFMOWjMyRy8cARdy79nAmgYw3hK/4HUq48LQ6Wwqo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/deepmap/oapi-codegen v1.6.0 h1:w/d1ntwh91XI0b/8ja7+u5SvA4IFfM0UNNLmiDR1gg0= github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= @@ -1040,70 +469,60 @@ github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okeg github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/desertbit/timer v1.0.1 h1:yRpYNn5Vaaj6QXecdLMPMJsW81JLiI1eokUft5nBmeo= github.com/desertbit/timer v1.0.1/go.mod h1:htRrYeY5V/t4iu1xCJ5XsQvp4xve8QulXXctAzxqcwE= -github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= -github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= -github.com/dgraph-io/ristretto v0.2.0 h1:XAfl+7cmoUDWW/2Lx8TGZQjjxIQ2Ley9DSf52dru4WE= -github.com/dgraph-io/ristretto v0.2.0/go.mod h1:8uBHCU/PBV4Ag0CJrP47b9Ofby5dqWNh4FicAdoqFNU= +github.com/dgraph-io/badger/v4 v4.9.1 h1:DocZXZkg5JJHJPtUErA0ibyHxOVUDVoXLSCV6t8NC8w= +github.com/dgraph-io/badger/v4 v4.9.1/go.mod h1:5/MEx97uzdPUHR4KtkNt8asfI2T4JiEiQlV7kWUo8c0= +github.com/dgraph-io/ristretto/v2 v2.4.0 h1:I/w09yLjhdcVD2QV192UJcq8dPBaAJb9pOuMyNy0XlU= +github.com/dgraph-io/ristretto/v2 v2.4.0/go.mod h1:0KsrXtXvnv0EqnzyowllbVJB8yBonswa2lTCK2gGo9E= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -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-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= +github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/docker/cli v29.2.0+incompatible h1:9oBd9+YM7rxjZLfyMGxjraKBKE4/nVyvVfN4qNl9XRM= -github.com/docker/cli v29.2.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= -github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= -github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.9.5 h1:EFNN8DHvaiK8zVqFA2DT6BjXE0GzfLOZ38ggPTKePkY= -github.com/docker/docker-credential-helpers v0.9.5/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c= -github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= -github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= +github.com/docker/cli v29.4.1+incompatible h1:02RT8QqqwtGRn+6SYypv8IUEbD/ltY6sfKCJIoUcGzk= +github.com/docker/cli v29.4.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/docker-credential-helpers v0.9.6 h1:cT2PbRPSlnMmNTfT2TDMXRyQ1KMWHG7xoTLBcn1ZNv0= +github.com/docker/docker-credential-helpers v0.9.6/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c= +github.com/docker/go-connections v0.7.0 h1:6SsRfJddP22WMrCkj19x9WKjEDTB+ahsdiGYf0mN39c= +github.com/docker/go-connections v0.7.0/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= 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/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dunglas/httpsfv v1.1.0 h1:Jw76nAyKWKZKFrpMMcL76y35tOpYHqQPzHQiwDvpe54= +github.com/dunglas/httpsfv v1.1.0/go.mod h1:zID2mqw9mFsnt7YC3vYQ9/cjq30q41W+1AnDwH8TiMg= 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 v1.7.0 h1:bnQc8+GMnidJZA8zc6lLEAb4xNrIqHwO+9TzqvtQZPo= -github.com/dvsekhvalnov/jose2go v1.7.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/dvsekhvalnov/jose2go v1.8.0 h1:LqkkVKAlHFfH9LOEl5fe4p/zL02OhWE7pCufMBG2jLA= +github.com/dvsekhvalnov/jose2go v1.8.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= 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/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= +github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emicklei/dot v1.10.0 h1:z17n0ce/FBMz3QbShSzVGhiW447Qhu7fljzvp3Gs6ig= -github.com/emicklei/dot v1.10.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +github.com/emicklei/dot v1.11.0 h1:zsrhCuFHAJge/aZIC4N4LdHy5tqYu4tWEaUzIwdYj4Y= +github.com/emicklei/dot v1.11.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= 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.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.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU= -github.com/envoyproxy/go-control-plane/envoy v1.36.0 h1:yg/JjO5E7ubRyKX3m07GF3reDNEnfOboJ0QySbH736g= -github.com/envoyproxy/go-control-plane/envoy v1.36.0/go.mod h1:ty89S1YCCVruQAm9OtKeEkQLTb+Lkz0k8v9W0Oxsv98= +github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ= +github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -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.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= -github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= -github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3aXiHh5s= -github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= -github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= -github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= +github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= +github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= +github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn27fRjSls= +github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= +github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= +github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -1118,8 +537,8 @@ github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeD github.com/ferranbt/fastssz v0.1.4/go.mod h1:Ea3+oeoRGGLGm5shYAeDgu6PGUlcvQhE2fILyD9+tGg= github.com/firefart/nonamedreturns v1.0.5 h1:tM+Me2ZaXs8tfdDw3X6DOX++wMCOqzYUho6tUTYIdRA= github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7QKH5R5BhnO6xJhw= -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/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= +github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= 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= @@ -1132,29 +551,23 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gammazero/deque v1.2.0 h1:scEFO8Uidhw6KDU5qg1HA5fYwM0+us2qdeJqm43bitU= +github.com/gammazero/deque v1.2.0/go.mod h1:JVrR+Bj1NMQbPnYclvDlvSX0nVGReLrQZ0aUMuWLctg= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getsentry/sentry-go v0.41.0 h1:q/dQZOlEIb4lhxQSjJhQqtRr3vwrJ6Ahe1C9zv+ryRo= -github.com/getsentry/sentry-go v0.41.0/go.mod h1:eRXCoh3uvmjQLY6qu63BjUZnaBu5L5WhMV1RwYO8W5s= +github.com/getsentry/sentry-go v0.44.1 h1:/cPtrA5qB7uMRrhgSn9TYtcEF36auGP3Y6+ThvD/yaI= +github.com/getsentry/sentry-go v0.44.1/go.mod h1:XDotiNZbgf5U8bPDUAfvcFmOnMQQceESxyKaObSssW0= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghostiam/protogetter v0.3.9 h1:j+zlLLWzqLay22Cz/aYwTHKQ88GE2DQ6GkWSYFOI4lQ= github.com/ghostiam/protogetter v0.3.9/go.mod h1:WZ0nw9pfzsgxuRsPOFQomgDVSWtDLJRfQJEhsGbmQMA= 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/go-chi/chi/v5 v5.2.4 h1:WtFKPHwlywe8Srng8j2BhOD9312j9cGUxG1SP4V2cR4= -github.com/go-chi/chi/v5 v5.2.4/go.mod h1:X7Gx4mteadT3eDOMTsXzmI4/rwUpOwBHLpAfupzFJP0= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/go-critic/go-critic v0.12.0 h1:iLosHZuye812wnkEz1Xu3aBwn5ocCPfc9yqmFG9pa6w= github.com/go-critic/go-critic v0.12.0/go.mod h1:DpE0P6OVc6JzVYzmM5gq5jMU31zLr4am5mB/VfFK64w= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-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-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-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= @@ -1166,13 +579,11 @@ github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4F github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= 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-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.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= -github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logfmt/logfmt v0.6.1 h1:4hvbpePJKnIzH1B+8OR/JPbTx37NktoI9LE2QZBBkvE= +github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/z6CO0XAk= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -1181,12 +592,10 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -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/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -1212,8 +621,8 @@ github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQi github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= 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-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= -github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= +github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-xmlfmt/xmlfmt v1.1.3 h1:t8Ey3Uy7jDSEisW2K3somuMKIpzktkWptA0iFCnRUWY= github.com/go-xmlfmt/xmlfmt v1.1.3/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= @@ -1221,10 +630,9 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw= github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= @@ -1237,29 +645,14 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV 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.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= -github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= +github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= 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/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= -github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= 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= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -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 v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -1267,7 +660,6 @@ github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -1278,13 +670,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/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 v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -1308,60 +697,33 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/cel-go v0.26.1 h1:iPbVVEdkhTX++hpe3lzSk7D3G3QSYqLGoHOcEio+UXQ= -github.com/google/cel-go v0.26.1/go.mod h1:A9O8OU9rdvrK5MQyrqfIxo1a0u4g3sF8KB6PUIaryMM= -github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI= -github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/cel-go v0.28.0 h1:KjSWstCpz/MN5t4a8gnGJNIYUsJRpdi/r97xWDphIQc= +github.com/google/cel-go v0.28.0/go.mod h1:X0bD6iVNR8pkROSOoHVdgTkzmRcosof7WQqCD6wcMc8= +github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= +github.com/google/flatbuffers v25.2.10+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= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/go-containerregistry v0.20.7 h1:24VGNpS0IwrOZ2ms2P1QE3Xa5X9p4phx0aUgzYzHW6I= -github.com/google/go-containerregistry v0.20.7/go.mod h1:Lx5LCZQjLH1QBaMPeGwsME9biPeo1lPx6lbGj/UmzgM= +github.com/google/go-containerregistry v0.21.5 h1:KTJG9Pn/jC0VdZR6ctV3/jcN+q6/Iqlx0sTVz3ywZlM= +github.com/google/go-containerregistry v0.21.5/go.mod h1:ySvMuiWg+dOsRW0Hw8GYwfMwBlNRTmpYBFJPlkco5zU= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= 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/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/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -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-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-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/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a h1://KbezygeMJZCSHH+HgUZiTeSoiuFspbMg1ge+eFj18= github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= @@ -1369,31 +731,12 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.0.0/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.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -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/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAVrGgAa0f2/R35S4DJwfFaUPFQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.7/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= -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= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -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/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.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= -github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= -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/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= +github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= +github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s= github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= @@ -1422,6 +765,10 @@ 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.5.0 h1:Dq4wT1DdTwTGCQQv3rl3IvD5Ld0E6HiY+3Zh0sUGqw8= github.com/gostaticanalysis/testutil v0.5.0/go.mod h1:OLQSbuM6zw2EvCcXTz1lVq5unyoNft372msDY0nY5Hs= +github.com/grafana/pyroscope-go v1.2.7 h1:VWBBlqxjyR0Cwk2W6UrE8CdcdD80GOFNutj0Kb1T8ac= +github.com/grafana/pyroscope-go v1.2.7/go.mod h1:o/bpSLiJYYP6HQtvcoVKiE9s5RiNgjYTj1DhiddP2Pc= +github.com/grafana/pyroscope-go/godeltaprof v0.1.9 h1:c1Us8i6eSmkW+Ez05d3co8kasnuOY813tbMN8i/a3Og= +github.com/grafana/pyroscope-go/godeltaprof v0.1.9/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -1432,12 +779,12 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= 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-gateway/v2 v2.27.5 h1:jP1RStw811EvUDzsUQ9oESqw2e4RqCjSAD9qIL8eMns= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.5/go.mod h1:WXNBZ64q3+ZUemCMXD9kYnr56H7CgZxDBHCVwstfl3s= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= 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/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 h1:vTCWu1wbdYo7PEZFem/rlr01+Un+wwVmI7wiegFdRLk= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72/go.mod h1:Vn+BBgKQHVQYdVQ4NZDICE1Brb+JfaONyDHr3q07oQc= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -1447,8 +794,8 @@ 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.7.9 h1:G9gcjrDixz7glqJ+ll5IWvggSBR+R0B54DSRt4qfdC4= -github.com/hashicorp/go-getter v1.7.9/go.mod h1:dyFCmT1AQkDfOIt9NH8pw9XBDqNrIKJT5ylbpi7zPNE= +github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk131ebY= +github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -1460,12 +807,10 @@ github.com/hashicorp/go-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6e github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.6.3 h1:xgHB+ZUSYeuJi96WtxEjzi23uh7YQpznjGh0U0UUrwg= -github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= +github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA= +github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -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-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -1474,9 +819,8 @@ github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/C github.com/hashicorp/go-uuid v1.0.3/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/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= -github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= +github.com/hashicorp/go-version v1.9.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= @@ -1494,8 +838,8 @@ github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N github.com/hdevalence/ed25519consensus v0.2.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/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= +github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db h1:IZUYC/xb3giYwBLMnr8d0TGTzPKFGNTCGgGLoyeX330= +github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db/go.mod h1:xTEYN9KCHxuYHs+NmrmzFcnvHMzLLNiGFafCb1n3Mfg= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= @@ -1510,11 +854,8 @@ github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc= github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.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.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= @@ -1527,16 +868,20 @@ github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c h1:qSH github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg= +github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= github.com/jdx/go-netrc v1.0.0 h1:QbLMLyCZGj0NA8glAhxUpf1zDg6cxnWgMBbjq40W0gQ= github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569zF3v8= 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/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk= github.com/jgautheron/goconst v1.7.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= -github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= +github.com/jhump/protoreflect v1.18.0 h1:TOz0MSR/0JOZ5kECB/0ufGnC2jdsgZ123Rd/k4Z5/2w= +github.com/jhump/protoreflect v1.18.0/go.mod h1:ezWcltJIVF4zYdIFM+D/sHV4Oh5LNU08ORzCGfwvTz8= github.com/jhump/protoreflect/v2 v2.0.0-beta.2 h1:qZU+rEZUOYTz1Bnhi3xbwn+VxdXkLVeEpAeZzVXLY88= github.com/jhump/protoreflect/v2 v2.0.0-beta.2/go.mod h1:4tnOYkB/mq7QTyS3YKtVtNrJv4Psqout8HA1U+hZtgM= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= @@ -1544,10 +889,6 @@ github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+D github.com/jjti/go-spancheck v0.6.4 h1:Tl7gQpYf4/TMU7AT84MN83/6PutY21Nb9fuQjFTpRRc= github.com/jjti/go-spancheck v0.6.4/go.mod h1:yAEYdKJ2lRkDA8g7X+oKUHXOWVAXSBJRv04OhF+QUjk= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -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/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -1559,18 +900,14 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= 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.2.0 h1:y+MJN/UdL63QbFJHws9BVC5RpA2iq0kpjrFajTGivjQ= github.com/julz/importas v0.2.0/go.mod h1:pThlt589EnCYtMnmhmRYY/qn9lCf/frPOK+WMx3xiJY= -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/karamaru-alpha/copyloopvar v1.2.1 h1:wmZaZYIjnJ0b5UoKDjUHrikcV0zuPyyxI4SVplLd2CI= github.com/karamaru-alpha/copyloopvar v1.2.1/go.mod h1:nFmMlFNlClC2BPvNaHMdkirmTJxVCY0lhxBtlfOypMM= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= 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= @@ -1580,26 +917,23 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkHAIKE/contextcheck v1.1.6 h1:7HIyRcnyzxL9Lz06NGhiKvenXq7Zw6Q0UQu/ttjfJCE= github.com/kkHAIKE/contextcheck v1.1.6/go.mod h1:3dDbMRNBFaq8HFXWC1JyvDSPm43CmE6IuHam8Wr0rkg= 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.10.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.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.18.3 h1:9PJRvfbmTabkOX8moIpXPbMMbYN60bWImDDU7L+/6zw= -github.com/klauspost/compress v1.18.3/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= -github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/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.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/koron/go-ssdp v0.0.6 h1:Jb0h04599eq/CY7rB5YEqPS83HmRfHP2azkxMN2rFtU= +github.com/koron/go-ssdp v0.0.6/go.mod h1:0R9LfRJGek1zWTjN3JUNlm5INCDYGpRDfAptnct63fI= 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.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= @@ -1626,18 +960,35 @@ github.com/ldez/usetesting v0.4.2 h1:J2WwbrFGk3wx4cZwSMiCQQ00kjGR0+tuuyW0Lqm4lwA github.com/ldez/usetesting v0.4.2/go.mod h1:eEs46T3PpQ+9RgN9VjpY6qWdiw2/QmfiDeWmdZdrjIQ= github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4= github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY= github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA= -github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ= +github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= +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/libp2p/go-flow-metrics v0.2.0 h1:EIZzjmeOE6c8Dav0sNv35vhZxATIXWZg6j/C08XmmDw= +github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:st3qqfu8+pMfh+9Mzqb2GTiwrAGjIPszEjZmtksN8Jc= +github.com/libp2p/go-libp2p v0.47.0 h1:qQpBjSCWNQFF0hjBbKirMXE9RHLtSuzTDkTfr1rw0yc= +github.com/libp2p/go-libp2p v0.47.0/go.mod h1:s8HPh7mMV933OtXzONaGFseCg/BE//m1V34p3x4EUOY= +github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= +github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= +github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= +github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= +github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= +github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= +github.com/libp2p/go-netroute v0.3.0 h1:nqPCXHmeNmgTJnktosJ/sIef9hvwYCrsLxXmfNks/oc= +github.com/libp2p/go-netroute v0.3.0/go.mod h1:Nkd5ShYgSMS5MUKy/MU2T57xFoOKvvLR92Lic48LEyA= +github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= +github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= +github.com/libp2p/go-yamux/v5 v5.0.1 h1:f0WoX/bEF2E8SbE4c/k1Mo+/9z0O4oC/hWEA+nfYRSg= +github.com/libp2p/go-yamux/v5 v5.0.1/go.mod h1:en+3cdX51U0ZslwRdRLrvQsdayFt3TSUKvBGErzpWbU= 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/linxGnu/grocksdb v1.10.4 h1:C9WZslnCjXxx+BL/fXCIe1pLhEri3V9vLQcBZOHadnU= -github.com/linxGnu/grocksdb v1.10.4/go.mod h1:OLQKZwiKwaJiAVCsOzWKvwiLwfZ5Vz8Md5TYR7t7pM8= -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/linxGnu/grocksdb v1.10.7 h1:fCi4qvZWo04VgFwGWmO8HQJgUVounJBy+C2TMVPU/ho= +github.com/linxGnu/grocksdb v1.10.7/go.mod h1:OLQKZwiKwaJiAVCsOzWKvwiLwfZ5Vz8Md5TYR7t7pM8= +github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 h1:PTw+yKnXcOFCR6+8hHTyWBeQ/P4Nb7dd4/0ohEcWQuM= +github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk= github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I= @@ -1649,6 +1000,10 @@ github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04= github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc= +github.com/marcopolo/simnet v0.0.4 h1:50Kx4hS9kFGSRIbrt9xUS3NJX33EyPqHVmpXvaKLqrY= +github.com/marcopolo/simnet v0.0.4/go.mod h1:tfQF1u2DmaB6WHODMtQaLtClEf3a296CKQLq5gAsIS0= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= github.com/matoous/godox v1.1.0 h1:W5mqwbyWrwZv6OQ5Z1a/DHGMOvXYCBP3+Ht7KMoJhq4= github.com/matoous/godox v1.1.0/go.mod h1:jgE/3fUXiTurkdHOLT5WEkThTSuE7yxHv5iWPa80afs= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= @@ -1656,35 +1011,39 @@ github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwM github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= 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.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.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= +github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/mattn/go-runewidth v0.0.2/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.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mdp/qrterminal/v3 v3.2.1 h1:6+yQjiiOsSuXT5n9/m60E54vdgFsw0zhADHhHLrFet4= github.com/mdp/qrterminal/v3 v3.2.1/go.mod h1:jOTmXvnBsMy5xqLniO0R++Jmjs2sTm9dFSuQ5kpz/SU= github.com/mgechev/revive v1.7.0 h1:JyeQ4yO5K8aZhIKf5rec56u0376h8AlKNQEmjfkjKlY= github.com/mgechev/revive v1.7.0/go.mod h1:qZnwcNhoguE58dfi96IJeSTPeZQejNeoMQLUZGi4SW4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -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.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= -github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE= +github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/highwayhash v1.0.4 h1:asJizugGgchQod2ja9NJlGOWq4s7KsAWr5XUc9Clgl4= +github.com/minio/highwayhash v1.0.4/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= +github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -1700,22 +1059,48 @@ github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjU github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= -github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= -github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= -github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= -github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= -github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= +github.com/moby/moby/api v1.54.2 h1:wiat9QAhnDQjA7wk1kh/TqHz2I1uUA7M7t9SAl/JNXg= +github.com/moby/moby/api v1.54.2/go.mod h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs= +github.com/moby/moby/client v0.4.1 h1:DMQgisVoMkmMs7fp3ROSdiBnoAu8+vo3GggFl06M/wY= +github.com/moby/moby/client v0.4.1/go.mod h1:z52C9O2POPOsnxZAy//WtKcQ32P+jT/NGeXu/7nfjGQ= +github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= +github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 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/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/moricho/tparallel v0.3.2 h1:odr8aZVFA3NZrNybggMkYO3rgPRcqjeQUlBBFVxKHTI= github.com/moricho/tparallel v0.3.2/go.mod h1:OQ+K3b4Ln3l2TZveGCywybl68glfLEwFGqvnjok8b+U= -github.com/morikuni/aec v1.1.0 h1:vBBl0pUnvi/Je71dsRrhMBtreIqNMYErSAbEeb8jrXQ= -github.com/morikuni/aec v1.1.0/go.mod h1:xDRgiq/iw5l+zkao76YTKzKttOp2cwPEne25HDkJnBw= +github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.3.0 h1:K6Y13R2h+dku0wOqKtecgRnBUBPrZzLZy5aIj8lCcJI= +github.com/mr-tron/base58 v1.3.0/go.mod h1:2BuubE67DCSWwVfx37JWNG8emOC0sHEU4/HpcYgCLX8= +github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= +github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= 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/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= +github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= +github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= +github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= +github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= +github.com/multiformats/go-multiaddr v0.16.1 h1:fgJ0Pitow+wWXzN9do+1b8Pyjmo8m5WhGfzpL82MpCw= +github.com/multiformats/go-multiaddr v0.16.1/go.mod h1:JSVUmXDjsVFiW7RjIFMP7+Ev+h1DTbiJgVeTV/tcmP0= +github.com/multiformats/go-multiaddr-dns v0.4.1 h1:whi/uCLbDS3mSEUMb1MsoT4uzUeZB0N32yzufqS0i5M= +github.com/multiformats/go-multiaddr-dns v0.4.1/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc= +github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= +github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= +github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= +github.com/multiformats/go-multicodec v0.9.1 h1:x/Fuxr7ZuR4jJV4Os5g444F7xC4XmyUaT/FWtE+9Zjo= +github.com/multiformats/go-multicodec v0.9.1/go.mod h1:LLWNMtyV5ithSBUo3vFIMaeDy+h3EbkMTek1m+Fybbo= +github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= +github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= +github.com/multiformats/go-multistream v0.6.1 h1:4aoX5v6T+yWmc2raBHsTvzmFhOI8WVOer28DeBBEYdQ= +github.com/multiformats/go-multistream v0.6.1/go.mod h1:ksQf6kqHAb6zIsyw7Zm+gAuVo57Qbq84E27YlYqavqw= +github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= +github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= 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= @@ -1739,14 +1124,14 @@ github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3L github.com/nunnatsa/ginkgolinter v0.19.1 h1:mjwbOlDQxZi9Cal+KfbEJTCz327OLNfwNvoZ70NJ+c4= github.com/nunnatsa/ginkgolinter v0.19.1/go.mod h1:jkQ3naZDmxaZMXPWaS9rblH+i+GWXQCaS/JFIWcOH2s= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= -github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= -github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= -github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= +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-20251114093237-2ab5a27a1729 h1:yfQ2sO9WJXUAIUR+g7NUkxJSKCAFJcR5sUDu+ZmjTZI= +github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= 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/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= -github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E= +github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/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= @@ -1769,8 +1154,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= -github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= -github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= +github.com/opencontainers/runc v1.2.8 h1:RnEICeDReapbZ5lZEgHvj7E9Q3Eex9toYmaGBsbvU5Q= +github.com/opencontainers/runc v1.2.8/go.mod h1:cC0YkmZcuvr+rtBZ6T7NBoVbMGNAdLa/21vIElJDOzI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -1794,41 +1179,75 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw 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/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 h1:KPpdlQLZcHfTMQRi6bFQ7ogNO0ltFT4PmtwTLW4W+14= -github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -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/petermattis/goid v0.0.0-20250813065127-a731cc31b4fe/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81 h1:WDsQxOJDy0N1VRAjXLpi8sCEZRSGarLWQevDxpTBRrM= +github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= 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 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pion/dtls/v2 v2.2.7 h1:cSUBsETxepsCSFSxC3mc/aDo14qQLMSL+O6IjG28yV8= +github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o= +github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M= github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= -github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= +github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= +github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= +github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= +github.com/pion/ice/v4 v4.0.10 h1:P59w1iauC/wPk9PdY8Vjl4fOFL5B+USq1+xbDcN6gT4= +github.com/pion/ice/v4 v4.0.10/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw= +github.com/pion/interceptor v0.1.40 h1:e0BjnPcGpr2CFQgKhrQisBU7V3GXK6wrfYrGYaU6Jq4= +github.com/pion/interceptor v0.1.40/go.mod h1:Z6kqH7M/FYirg3frjGJ21VLSRJGBXB/KqaTIrdqnOic= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= +github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= +github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM= +github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA= +github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= +github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= +github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo= +github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0= +github.com/pion/rtp v1.8.19 h1:jhdO/3XhL/aKm/wARFVmvTfq0lC/CvN1xwYKmduly3c= +github.com/pion/rtp v1.8.19/go.mod h1:bAu2UFKScgzyFqvUKmbvzSdPr+NGbZtv6UB2hesqXBk= +github.com/pion/sctp v1.8.39 h1:PJma40vRHa3UTO3C4MyeJDQ+KIobVYRZQZ0Nt7SjQnE= +github.com/pion/sctp v1.8.39/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE= +github.com/pion/sdp/v3 v3.0.13 h1:uN3SS2b+QDZnWXgdr69SM8KB4EbcnPnPf2Laxhty/l4= +github.com/pion/sdp/v3 v3.0.13/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E= +github.com/pion/srtp/v3 v3.0.6 h1:E2gyj1f5X10sB/qILUGIkL4C2CqK269Xq167PbGCc/4= +github.com/pion/srtp/v3 v3.0.6/go.mod h1:BxvziG3v/armJHAaJ87euvkhHqWe9I7iiOy50K2QkhY= +github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= +github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= github.com/pion/stun/v2 v2.0.0 h1:A5+wXKLAypxQri59+tmQKVs7+l6mMM+3d+eER9ifRU0= github.com/pion/stun/v2 v2.0.0/go.mod h1:22qRSh08fSEttYUmJZGlriq9+03jtVmXNODgLccj8GQ= -github.com/pion/transport/v2 v2.2.1 h1:7qYnCBlpgSJNYMbLCKuSY9KbQdBFoETvPNETv0y4N7c= +github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw= +github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU= github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= -github.com/pion/transport/v3 v3.0.1 h1:gDTlPJwROfSfz6QfSi0ZmeCSkFcnWWiiR9ES0ouANiM= +github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= +github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q= +github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E= github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= +github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= +github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= +github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= +github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= +github.com/pion/turn/v4 v4.0.2 h1:ZqgQ3+MjP32ug30xAbD6Mn+/K4Sxi3SdNOTFf+7mpps= +github.com/pion/turn/v4 v4.0.2/go.mod h1:pMMKP/ieNAG/fN5cZiN4SDuyKsXtNTr0ccN7IToA1zs= +github.com/pion/webrtc/v4 v4.1.2 h1:mpuUo/EJ1zMNKGE79fAdYNFZBX790KE7kQQpLMjjR54= +github.com/pion/webrtc/v4 v4.1.2/go.mod h1:xsCXiNAmMEjIdFxAYU0MbB3RwRieJsegSB2JZsGN+8U= 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= 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/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -1837,6 +1256,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH github.com/polyfloyd/go-errorlint v1.7.1 h1:RyLVXIbosq1gBdk/pChWA8zWYLsq9UEw7a1L5TVMCnA= github.com/polyfloyd/go-errorlint v1.7.1/go.mod h1:aXjNb1x2TNhoLsk26iv1yl7a+zTnXPhwEMtEXukiLR8= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -1854,7 +1275,6 @@ github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1: github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -1866,6 +1286,8 @@ github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= +github.com/prometheus/otlptranslator v1.0.0 h1:s0LJW/iN9dkIH+EnhiD3BlkkP5QVIUVEoIwkU+A6qos= +github.com/prometheus/otlptranslator v1.0.0/go.mod h1:vRYWnXvI6aWGpsdY/mOT/cbeVRBlPWtBNDb7kGR3uKM= 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.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -1873,8 +1295,8 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.1.3/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.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws= -github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw= +github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= +github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9 h1:arwj11zP0yJIxIRiDn22E0H8PxfF7TsTrc2wIPFIsf4= github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9/go.mod h1:SKZx6stCn03JN3BOWTwvVIO2ajMkb/zQdTceXYhKw/4= github.com/prysmaticlabs/gohashtree v0.0.4-beta h1:H/EbCuXPeTV3lpKeXGPpEV9gsUpkqOOVnWapUyeWro4= @@ -1893,12 +1315,13 @@ github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= +github.com/quic-go/webtransport-go v0.10.0 h1:LqXXPOXuETY5Xe8ITdGisBzTYmUOy5eSj+9n4hLTjHI= +github.com/quic-go/webtransport-go v0.10.0/go.mod h1:LeGIXr5BQKE3UsynwVBeQrU1TPrbh73MGoC6jd+V7ow= github.com/raeperd/recvcheck v0.2.0 h1:GnU+NsbiCqdC2XX5+vMZzP+jAJC5fht7rcVTAhX74UI= github.com/raeperd/recvcheck v0.2.0/go.mod h1:n04eYkwIR0JbgD73wT8wL4JjPC3wm0nFtzBnWNocnYU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/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/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 h1:bsUq1dX0N8AOIL7EB/X911+m4EHsnWEHeJ0c+3TTBrg= +github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -1907,35 +1330,31 @@ github.com/rodaine/protogofakeit v0.1.1/go.mod h1:pXn/AstBYMaSfc1/RqH3N82pBuxtWg 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.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= -github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= -github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= +github.com/rs/zerolog v1.35.0 h1:VD0ykx7HMiMJytqINBsKcbLS+BJ4WYjz+05us+LRTdI= +github.com/rs/zerolog v1.35.0/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= 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.3.5 h1:cShyguSwUEeC0jS7ylOiG/idnd1TpJ1LfHGpV3oJmPU= github.com/ryancurrah/gomodguard v1.3.5/go.mod h1:MXlEPQRxgfPQa62O8wzK3Ozbkv9Rkqr+wKjSxTdsNJE= github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU= github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= -github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= +github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4= +github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sanposhiho/wastedassign/v2 v2.1.0 h1:crurBF7fJKIORrV85u9UUpePDYGWnwvv3+A96WvwXT0= github.com/sanposhiho/wastedassign/v2 v2.1.0/go.mod h1:+oSmSC+9bQ+VUAxA66nBb0Z7N8CK7mscKTDYC6aIek4= github.com/santhosh-tekuri/jsonschema/v6 v6.0.1 h1:PKK9DyHxif4LZo+uQSgXNqs0jj5+xZwwfKHgph2lxBw= github.com/santhosh-tekuri/jsonschema/v6 v6.0.1/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= -github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= -github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= +github.com/sasha-s/go-deadlock v0.3.9 h1:fiaT9rB7g5sr5ddNZvlwheclN9IP86eFW9WgqlEQV+w= +github.com/sasha-s/go-deadlock v0.3.9/go.mod h1:KuZj51ZFmx42q/mPaYbRk0P1xcwe697zsJKE03vD4/Y= 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.28.0 h1:jZnudE2zKCtYlGzLVreNp5pmCdOxXUzwsMDBkR21cyQ= @@ -1945,10 +1364,12 @@ github.com/securego/gosec/v2 v2.22.2 h1:IXbuI7cJninj0nRpZSLCUlotsj8jGusohfONMrHo github.com/securego/gosec/v2 v2.22.2/go.mod h1:UEBGA+dSKb+VqM6TdehR7lnQtIIMorYJ4/9CW1KVQBE= github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= -github.com/segmentio/encoding v0.5.3 h1:OjMgICtcSFuNvQCdwqMCv9Tg7lEOXGwm1J5RPQccx6w= -github.com/segmentio/encoding v0.5.3/go.mod h1:HS1ZKa3kSN32ZHVZ7ZLPLXWvOVIiZtyJnO1gPH1sKt0= +github.com/segmentio/encoding v0.5.4 h1:OW1VRern8Nw6ITAtwSZ7Idrl3MXCFwXHPgqESYfvNt0= +github.com/segmentio/encoding v0.5.4/go.mod h1:HS1ZKa3kSN32ZHVZ7ZLPLXWvOVIiZtyJnO1gPH1sKt0= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v4 v4.26.3 h1:2ESdQt90yU3oXF/CdOlRCJxrP+Am1aBYubTMTfxJ1qc= +github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= 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= @@ -1968,14 +1389,10 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k github.com/sonatard/noctx v0.1.0 h1:JjqOc2WN16ISWAjAk8M5ej0RfExEXtkEyExl2hLW+OM= github.com/sonatard/noctx v0.1.0/go.mod h1:0RvBxqY8D4j9cTTTWE8ylt2vqj2EPI8fHmrxHdsaZ2c= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= -github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= 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/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.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +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.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= @@ -1996,8 +1413,6 @@ github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YE github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/stbenjam/no-sprintf-host-port v0.2.0 h1:i8pxvGrt1+4G0czLr/WnmyH7zbZ8Bg8etvARQ1rpyl4= github.com/stbenjam/no-sprintf-host-port v0.2.0/go.mod h1:eL0bQ9PasS0hsyTyfTjjG+E80QIyPnBVQbYZyv20Jfk= -github.com/stoewer/go-strcase v1.3.1 h1:iS0MdW+kVTxgMoE1LAZyMiYJFKlOzLooE4MxjirtkAs= -github.com/stoewer/go-strcase v1.3.1/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= github.com/storyicon/sigverify v1.1.0 h1:Fz153Jvloz1P0G3TrG7dHGyAlB3mpjmFeu5IszfJWQ0= github.com/storyicon/sigverify v1.1.0/go.mod h1:q0qxvhdUsMIBAry3h7/IMW7BebRkiT8496TrQP1XW5s= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -2007,8 +1422,9 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4= +github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0= 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= @@ -2019,6 +1435,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= @@ -2038,29 +1455,31 @@ 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/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= +github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= github.com/tetafro/godot v1.5.0 h1:aNwfVI4I3+gdxjMgYPus9eHmoBeJIbnajOyqZYStzuw= github.com/tetafro/godot v1.5.0/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio= github.com/tetratelabs/wazero v1.11.0 h1:+gKemEuKCTevU4d7ZTzlsvgd1uaToIDtlQlmNbwqYhA= github.com/tetratelabs/wazero v1.11.0/go.mod h1:eV28rsN8Q+xwjogd7f4/Pp4xFxO7uOGbLcD/LzB1wiU= -github.com/tidwall/btree v1.8.1 h1:27ehoXvm5AG/g+1VxLS1SD3vRhp/H7LuEfwNvddEdmA= -github.com/tidwall/btree v1.8.1/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/match v1.2.0 h1:0pt8FlkOwjN2fPt4bIl4BoNxb98gGHN2ObFEDkrfZnM= +github.com/tidwall/match v1.2.0/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3 h1:y4mJRFlM6fUyPhoXuFg/Yu02fg/nIPFMOY8tOqppoFg= github.com/timakin/bodyclose v0.0.0-20241017074812-ed6a65f985e3/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460= github.com/timonwong/loggercheck v0.10.1 h1:uVZYClxQFpw55eh+PIoqM7uAOHMrhVcDoWDery9R8Lg= github.com/timonwong/loggercheck v0.10.1/go.mod h1:HEAWU8djynujaAVX7QI65Myb8qgfcZ1uKbdpg3ZzKl8= -github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= -github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= -github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= -github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= +github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= +github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= +github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= +github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tomarrell/wrapcheck/v2 v2.10.0 h1:SzRCryzy4IrAH7bVGG4cK40tNUhmVmMDuJujy4XwYDg= github.com/tomarrell/wrapcheck/v2 v2.10.0/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo= @@ -2071,9 +1490,7 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ultraware/funlen v0.2.0 h1:gCHmCn+d2/1SemTdYMiKLAHFYxTYz7z9VIDRaTGyLkI= @@ -2089,8 +1506,11 @@ github.com/uudashr/gocognit v1.2.0 h1:3BU9aMr1xbhPlvJLSydKwdLN3tEUUrzPSSM8S4hDYR github.com/uudashr/gocognit v1.2.0/go.mod h1:k/DdKPI6XBZO1q7HgoV2juESI2/Ofj9AcHPZhBBdrTU= github.com/uudashr/iface v1.3.1 h1:bA51vmVx1UIhiIsQFSNq6GZ6VPTk3WNMZgRiCe9R29U= github.com/uudashr/iface v1.3.1/go.mod h1:4QvspiRd3JLPAEXBQ9AiZpLbJlrWWgRChOKDJEuQTdg= -github.com/vbatts/tar-split v0.12.2 h1:w/Y6tjxpeiFMR47yzZPlPj/FcPLpXbTUi/9H7d3CPa4= -github.com/vbatts/tar-split v0.12.2/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= +github.com/vbatts/tar-split v0.12.3 h1:Cd46rkGXI3Td4yrVNwU8ripbxFaQbmesqhjBUUYAJSw= +github.com/vbatts/tar-split v0.12.3/go.mod h1:sQOc6OlqGCr7HkGx/IDBeKiTIvqhmj8KffNhEXG4Nq0= +github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= +github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= +github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU= github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= @@ -2111,8 +1531,6 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -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/golem v0.29.0 h1:exAKRxX7ap5b9FuBLSFtPtdMkPBUqWV6h1DLN1m/pFg= github.com/zondax/golem v0.29.0/go.mod h1:MU2oVfrHeSg5d8oFvfuTKVddHebEXwgE/W24uPiRpWI= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= @@ -2128,8 +1546,8 @@ go-simpler.org/musttag v0.13.0/go.mod h1:FTzIGeK6OkKlUDVpj0iQUXZLUO1Js9+mvykDQy9 go-simpler.org/sloglint v0.9.0 h1:/40NQtjRx9txvsB/RN022KsUJU+zaaSb/9q9BSefSrE= go-simpler.org/sloglint v0.9.0/go.mod h1:G/OrAF6uxj48sHahCzrbarVMptL2kjWTaUeC8+fOGww= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.4.0-alpha.1 h1:3yrqQzbRRPFPdOMWS/QQIVxVnzSkAZQYeWlZFv1kbj4= -go.etcd.io/bbolt v1.4.0-alpha.1/go.mod h1:S/Z/Nm3iuOnyO1W4XuFfPci51Gj6F1Hv0z8hisyYYOw= +go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo= +go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.lsp.dev/jsonrpc2 v0.10.0 h1:Pr/YcXJoEOTMc/b6OTmcR1DPJ3mSWl/SWiU1Cct6VmI= go.lsp.dev/jsonrpc2 v0.10.0/go.mod h1:fmEzIdXPi/rf6d4uFcayi8HpFP1nBF99ERP1htC72Ac= @@ -2141,50 +1559,84 @@ go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo= go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I= 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= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -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/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.39.0 h1:kWRNZMsfBHZ+uHjiH4y7Etn2FK26LAGkNFw7RHv1DhE= -go.opentelemetry.io/contrib/detectors/gcp v1.39.0/go.mod h1:t/OGqzHBa5v6RHZwrDBJ2OirWc+4q/w2fTbLZwAKjTk= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0 h1:ssfIgGNANqpVFCndZvcuyKbl0g+UAVcbBcqGkG28H0Y= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0/go.mod h1:GQ/474YrbE4Jx8gZ4q5I4hrhUzM6UPzyrqJYV2AqPoQ= -go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= -go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= -go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= -go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= -go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= -go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= -go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= -go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= -go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= -go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +go.opentelemetry.io/contrib/bridges/otelslog v0.17.0 h1:NFIS6x7wyObQ7cR84x7bt1sr8nYBx89s3x3GwRjw40k= +go.opentelemetry.io/contrib/bridges/otelslog v0.17.0/go.mod h1:39SaByOyDMRMe872AE7uelMuQZidIw7LLFAnQi0FWTE= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= +go.opentelemetry.io/contrib/instrumentation/host v0.67.0 h1:TBZlpWERGQYejjjxOCaul34rx1gM8Dc3erQH3DDe1ng= +go.opentelemetry.io/contrib/instrumentation/host v0.67.0/go.mod h1:gY4HjuF4CJmklxYjdJNH3wxBlAehJfX/g/vQo+kL0TU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= +go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0 h1:fM78cKITJ2r08cl+nw5i+hI9zWAu3iak8o1Os/ca2Ck= +go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0/go.mod h1:ybmlzIqGcQzwt5lAfi8TpSnHo/CI3yv1Czodmm+OJa8= +go.opentelemetry.io/contrib/otelconf v0.22.0 h1:+kpcfczGOFM85zDZyqQCzWefhovegfn24D0WwmQz0n4= +go.opentelemetry.io/contrib/otelconf v0.22.0/go.mod h1:ojdbOukO+JRDJQmJY2PRIZEg0UYVzcOuZR59hp7xffc= +go.opentelemetry.io/contrib/propagators/autoprop v0.67.0 h1:XhcQRf4MeqwQw96FcnatDAj6gwE19SUrWZ1VwNg77iE= +go.opentelemetry.io/contrib/propagators/autoprop v0.67.0/go.mod h1:7OK06SuNIBIlc5Uq3JGQEsKHuXw29t9OJemvDYyP1dk= +go.opentelemetry.io/contrib/propagators/aws v1.42.0 h1:Kbr3xDxs6kcxp5ThXTKWK2OtwLhNoXBVtqguNYcsZL0= +go.opentelemetry.io/contrib/propagators/aws v1.42.0/go.mod h1:Jzw9hZHtxdpCN7x8S17UH59X/EiFivp6VXLs9bdM1OQ= +go.opentelemetry.io/contrib/propagators/b3 v1.42.0 h1:B2Pew5ufEtgkjLF+tSkXjgYZXQr9m7aCm1wLKB0URbU= +go.opentelemetry.io/contrib/propagators/b3 v1.42.0/go.mod h1:iPgUcSEF5DORW6+yNbdw/YevUy+QqJ508ncjhrRSCjc= +go.opentelemetry.io/contrib/propagators/jaeger v1.42.0 h1:jP8unWI6q5kcb3gpGLjKDGaUa+JW+nHKWvpS/q+YuWA= +go.opentelemetry.io/contrib/propagators/jaeger v1.42.0/go.mod h1:xd89e/pUyPatUP1C4z1UknD9jHptESO99tWyvd4mWD4= +go.opentelemetry.io/contrib/propagators/ot v1.42.0 h1:uQjD1NNqX1+DfcAoWParPt1egNg9vC9gH4xarJ9Khxo= +go.opentelemetry.io/contrib/propagators/ot v1.42.0/go.mod h1:yw/c2TCmQLIv109HBOCn6NlJ8Dp7MNfjMcqQZRnAMmg= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0 h1:deI9UQMoGFgrg5iLPgzueqFPHevDl+28YKfSpPTI6rY= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0/go.mod h1:PFx9NgpNUKXdf7J4Q3agRxMs3Y07QhTCVipKmLsMKnU= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.19.0 h1:HIBTQ3VO5aupLKjC90JgMqpezVXwFuq6Ryjn0/izoag= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.19.0/go.mod h1:ji9vId85hMxqfvICA0Jt8JqEdrXaAkcpkI9HPXya0ro= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0 h1:MdKucPl/HbzckWWEisiNqMPhRrAOQX8r4jTuGr636gk= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0/go.mod h1:RolT8tWtfHcjajEH5wFIZ4Dgh5jpPdFXYV9pTAk/qjc= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 h1:w1K+pCJoPpQifuVpsKamUdn9U0zM3xUziVOqsGksUrY= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0/go.mod h1:HBy4BjzgVE8139ieRI75oXm3EcDN+6GhD88JT1Kjvxg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 h1:3iZJKlCZufyRzPzlQhUIWVmfltrXuGyfjREgGP3UUjc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0/go.mod h1:/G+nUPfhq2e+qiXMGxMwumDrP5jtzU+mWN7/sjT2rak= +go.opentelemetry.io/otel/exporters/prometheus v0.64.0 h1:g0LRDXMX/G1SEZtK8zl8Chm4K6GBwRkjPKE36LxiTYs= +go.opentelemetry.io/otel/exporters/prometheus v0.64.0/go.mod h1:UrgcjnarfdlBDP3GjDIJWe6HTprwSazNjwsI+Ru6hro= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0 h1:KJVjPD3rcPb98rIs3HznyJlrfx9ge5oJvxxlGR+P/7s= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0/go.mod h1:K3kRa2ckmHWQaTWQdPRHc7qGXASuVuoEQXzrvlA98Ws= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0 h1:s/1iRkCKDfhlh1JF26knRneorus8aOwVIDhvYx9WoDw= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0/go.mod h1:UI3wi0FXg1Pofb8ZBiBLhtMzgoTm1TYkMvn71fAqDzs= +go.opentelemetry.io/otel/log v0.19.0 h1:KUZs/GOsw79TBBMfDWsXS+KZ4g2Ckzksd1ymzsIEbo4= +go.opentelemetry.io/otel/log v0.19.0/go.mod h1:5DQYeGmxVIr4n0/BcJvF4upsraHjg6vudJJpnkL6Ipk= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/log v0.19.0 h1:scYVLqT22D2gqXItnWiocLUKGH9yvkkeql5dBDiXyko= +go.opentelemetry.io/otel/sdk/log v0.19.0/go.mod h1:vFBowwXGLlW9AvpuF7bMgnNI95LiW10szrOdvzBHlAg= +go.opentelemetry.io/otel/sdk/log/logtest v0.19.0 h1:BEbF7ZBB6qQloV/Ub1+3NQoOUnVtcGkU3XX4Ws3GQfk= +go.opentelemetry.io/otel/sdk/log/logtest v0.19.0/go.mod h1:Lua81/3yM0wOmoHTokLj9y9ADeA02v1naRrVrkAZuKk= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -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.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= -go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= 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/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= +go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4= +go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= +go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg= +go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= @@ -2201,95 +1653,60 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= +go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= +go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/arch v0.17.0 h1:4O3dfLzd+lQewptAHqjewQZQDyEdejz3VwgeYwkZneU= -golang.org/x/arch v0.17.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.26.0 h1:jZ6dpec5haP/fUv1kLCbuJy6dnRrfX6iVK08lZBFpk4= +golang.org/x/arch v0.26.0/go.mod h1:0X+GdSIP+kL5wPmpK7sdkEVTt2XoYP0cSjQSbZBwOi8= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/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-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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= 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.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= -golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= -golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= -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/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= 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-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -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= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -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-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/exp v0.0.0-20260112195511-716be5621a96 h1:Z/6YuSHTLOHfNFdb8zVZomZr7cqNgTJvA8+Qz75D8gU= -golang.org/x/exp v0.0.0-20260112195511-716be5621a96/go.mod h1:nzimsREAkjBCIEFtHiYkrJyT+2uy9YZJB7H1k68CXZU= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= 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-20250210185358-939b2ce775ac h1:TSSpLIG4v+p0rPv1pNOQtl1I8knsO4S9trOxNMOLVP4= golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac/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-20181026193005-c67002cb31c3/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= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -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/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.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.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= @@ -2297,10 +1714,8 @@ 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.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= -golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= 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= @@ -2314,126 +1729,56 @@ golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73r 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-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-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-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-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= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -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-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-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= 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-20210503060351-7fd8e65b6420/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-20211015210444-4f30a5c0130f/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-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-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.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -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.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= -golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= -golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/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-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= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -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-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= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -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.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.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= -golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= 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-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= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= 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= @@ -2447,9 +1792,6 @@ golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-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-20190726091711-fc99dfbffb4e/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= @@ -2458,86 +1800,43 @@ golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/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-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-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-20200122134326-e047566fdf82/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-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= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-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-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/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-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/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-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-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/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-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-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= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/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-20210908233432-aa78b53d3365/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-20211105183446-c75c47738b0c/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-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-20220128215802-99c3d69c2c27/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-20220328115105-d36c6a25d886/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-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-20220704084225-05e143d24a9e/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-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-20220829200755-d48e67d00261/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= @@ -2545,20 +1844,15 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= -golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa h1:efT73AJZfAAUV7SOip6pWGkwJDzIGiKBZGVzHYa+ve4= +golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE= 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= 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= @@ -2566,117 +1860,57 @@ golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= -golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= -golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 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.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= 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-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/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= 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-20181030221726-6c7e314b6563/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-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/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-20190328211700-ab21143f2384/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-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-20190621195816-6e04913cbbac/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-20190816200558-6889da9d5479/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-20190927191325-030b2cf1153e/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-20191113191852-77e3bb0ad9e7/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-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-20200103221440-774c71fcf114/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-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-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= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= 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-20200501065659-ab2804fb9c9d/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-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-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-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-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/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-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= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= @@ -2684,9 +1918,8 @@ 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.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= -golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= @@ -2695,281 +1928,50 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T 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= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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/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.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/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -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= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= 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.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.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= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -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.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= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -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.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -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= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -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.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= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -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/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.256.0 h1:u6Khm8+F9sxbCTYNoBHg6/Hwv0N/i+V94MvkOSor6oI= -google.golang.org/api v0.256.0/go.mod h1:KIgPhksXADEKJlnEoRa9qAII4rXcy40vfI8HRqcU964= +google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY= +google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= 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.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.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/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 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-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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -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-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-20200115191322-ca5a22157cba/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= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -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-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= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 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-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -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-20201109203340-2640f1f9cdfb/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= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -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-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/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= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -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= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -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-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= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -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-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= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -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-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-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-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-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/genproto v0.0.0-20251124214823-79d6a2a48846 h1:dDbsTLIK7EzwUq36kCSAsk0slouq/S0tWHeeGi97cD8= -google.golang.org/genproto v0.0.0-20251124214823-79d6a2a48846/go.mod h1:PP0g88Dz3C7hRAfbQCQggeWAXjuqGsNPLE4s7jh0RGU= -google.golang.org/genproto/googleapis/api v0.0.0-20260122232226-8e98ce8d340d h1:tUKoKfdZnSjTf5LW7xpG4c6SZ3Ozisn5eumcoTuMEN4= -google.golang.org/genproto/googleapis/api v0.0.0-20260122232226-8e98ce8d340d/go.mod h1:p3MLuOwURrGBRoEyFHBT3GjUwaCQVKeNqqWxlcISGdw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d h1:xXzuihhT3gL/ntduUZwHECzAn57E8dA6l8SOtYWdD8Q= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 h1:aLsVTW0lZ8+IY5u/ERjZSCvAmhuR7slKzyha3YikDNA= +google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478/go.mod h1:YJAzKjfHIUHb9T+bfu8L7mthAp7VVXQBUs1PLdBWS7M= +google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 h1:yOzSCGPx+cp5VO7IxvZ9SBFF7j1tZVcNtlHR2iYKtVo= +google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:Q9HWtNeE7tM9npdIsEvqXj1QJIvVoeAV3rtXtS715Cw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 h1:tEkOQcXgF6dH1G+MVKZrfpYvozGrzb91k6ha7jireSM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= 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.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.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.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.42.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.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.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= +google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0 h1:6Al3kEFFP9VJhRz3DID6quisgPnTeZVr4lep9kkxdPA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0/go.mod h1:QLvsjh0OIR0TYBeiu2bkWGTJBUNQ64st52iWj/yA93I= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -2985,11 +1987,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba 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.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.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.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -3000,7 +1999,6 @@ 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/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.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= @@ -3028,49 +2026,12 @@ gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= honnef.co/go/tools v0.6.1 h1:R094WgE8K4JirYjBaOpz/AvTyUu/3wbmAoskKN/pxTI= honnef.co/go/tools v0.6.1/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4= -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/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/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.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.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/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg= +lukechampine.com/blake3 v1.4.1/go.mod h1:QFosUxmjB8mnrWFSNwKmvxHpfY72bmD2tQ0kBMM3kwo= mvdan.cc/gofumpt v0.7.0 h1:bg91ttqXmi9y2xawvkuMXyvAA/1ZGJqYAEGjXuP0JXU= mvdan.cc/gofumpt v0.7.0/go.mod h1:txVFJy/Sc/mvaycET54pV8SW8gWxTlUuGHVEcncmNUo= mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U= @@ -3084,12 +2045,9 @@ pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= pluginrpc.com/pluginrpc v0.5.0 h1:tOQj2D35hOmvHyPu8e7ohW2/QvAnEtKscy2IJYWQ2yo= pluginrpc.com/pluginrpc v0.5.0/go.mod h1:UNWZ941hcVAoOZUn8YZsMmOZBzbUjQa3XMns8RQLp9o= -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/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= diff --git a/install.sh b/install.sh index 6c9070c6..77321023 100755 --- a/install.sh +++ b/install.sh @@ -1,9 +1,9 @@ #!/bin/sh # BitBadges Chain — One-liner installer # Usage: -# curl -fsSL https://raw.githubusercontent.com/BitBadges/bitbadgeschain/master/install.sh | sh -# curl -fsSL https://raw.githubusercontent.com/BitBadges/bitbadgeschain/master/install.sh | sh -s -- --testnet -# curl -fsSL https://raw.githubusercontent.com/BitBadges/bitbadgeschain/master/install.sh | sh -s -- --version v28 +# curl -fsSL https://install.bitbadges.io | sh +# curl -fsSL https://install.bitbadges.io | sh -s -- --testnet +# curl -fsSL https://install.bitbadges.io | sh -s -- --version v28 # # Options: # --testnet Install testnet binary (default: mainnet) @@ -42,7 +42,7 @@ while [ $# -gt 0 ]; do --help) echo "BitBadges Chain Installer" echo "" - echo "Usage: curl -fsSL https://raw.githubusercontent.com/BitBadges/bitbadgeschain/master/install.sh | sh" + echo "Usage: curl -fsSL https://install.bitbadges.io | sh" echo "" echo "Options:" echo " --testnet Install testnet binary (default: mainnet)" @@ -186,8 +186,25 @@ main() { exit 1 fi + # Friendly alias for agents and humans — `bb` is the entry point + # documented in docs.bitbadges.io/for-developers/cli/. Skip on Windows + # where symlinks need elevated perms and the `.exe` suffix is mandatory. + if [ "$os" != "windows" ]; then + if [ -w "$INSTALL_DIR" ] || [ "$USE_SUDO" = "no" ]; then + ln -sfn "${INSTALL_DIR}/${BINARY_NAME}" "${INSTALL_DIR}/bb" + elif [ "$USE_SUDO" = "auto" ] && command -v sudo >/dev/null 2>&1; then + sudo ln -sfn "${INSTALL_DIR}/${BINARY_NAME}" "${INSTALL_DIR}/bb" + else + echo "Error: ${INSTALL_DIR} is not writable for bb symlink. Run with sudo or use --install-dir." >&2 + exit 1 + fi + fi + echo "" echo "Successfully installed bitbadgeschaind ${VERSION} (${NETWORK}) to ${INSTALL_DIR}/${BINARY_NAME}" + if [ "$os" != "windows" ]; then + echo "Linked ${INSTALL_DIR}/bb -> ${INSTALL_DIR}/${BINARY_NAME}" + fi echo "" # Verify @@ -213,8 +230,16 @@ main() { if command -v bitbadges-cli >/dev/null 2>&1; then echo "Successfully installed bitbadges-cli" - elif command -v bun >/dev/null 2>&1 || command -v npm >/dev/null 2>&1; then - echo "Note: bitbadges-cli installed but may not be in PATH. Check your global bin directory." + elif command -v bun >/dev/null 2>&1; then + bun_bin="$(bun pm bin -g 2>/dev/null || echo "$HOME/.bun/bin")" + echo "Note: bitbadges-cli installed via bun but may not be in PATH. Add it with:" + echo " export PATH=\"${bun_bin}:\$PATH\"" + elif command -v npm >/dev/null 2>&1; then + npm_prefix="$(npm config get prefix 2>/dev/null)" + if [ -n "$npm_prefix" ]; then + echo "Note: bitbadges-cli installed via npm but may not be in PATH. Add it with:" + echo " export PATH=\"${npm_prefix}/bin:\$PATH\"" + fi fi echo "" diff --git a/proto/buf.lock b/proto/buf.lock index 5f435c16..583aa03c 100644 --- a/proto/buf.lock +++ b/proto/buf.lock @@ -11,6 +11,11 @@ deps: repository: cosmos-sdk commit: 65fa41963e6a41dd95a35934239029df digest: shake256:f67571e6f86dba07c678908f1734ca5a855416e1ecd903c3ebcae49f93c2a7114cdc64538ee8012cc3bb45e9bfd4345395f43d2ac2c01821ca32e5d734cb4dfd + - remote: buf.build + owner: cosmos + repository: evm + commit: 5bbc59c5e38440cb8ede77505362af3a + digest: shake256:d7cc2e772d5ce3f2f8cfc5758212f769fce86b6a75caa843576e7f284765dceacfe80fe7c5fa8370b281448c3926e49504f7adf66376a69c1e70437acf52910e - remote: buf.build owner: cosmos repository: gogo-proto @@ -29,10 +34,10 @@ deps: - remote: buf.build owner: googleapis repository: googleapis - commit: 004180b77378443887d3b55cabc00384 - digest: shake256:d26c7c2fd95f0873761af33ca4a0c0d92c8577122b6feb74eb3b0a57ebe47a98ab24a209a0e91945ac4c77204e9da0c2de0020b2cedc27bdbcdea6c431eec69b + commit: c17df5b2beca46928cc87d5656bd5343 + digest: shake256:c62ecead9b13485a02893cd678a6c81e40879bf00ea509bbc6fd8f1b2cc33eccf6a85c259b08d1e0f052f693cbfc7dfda236e9665b1d6869b8e1132a794a61e2 - remote: buf.build owner: protocolbuffers repository: wellknowntypes - commit: 4e1ccfa6827947beb55974645a315b8d - digest: shake256:7535ac337929b4cfdd12d52bef75155277e715bdc364fcb41556a95fa0d3f58510b4e210f609cb91f9a47363a59c1643b6b1059d7702d0e900059271fde1c03a + commit: 9d16d599a978406980f6e2f081331a93 + digest: shake256:946278992baee216f7742401780df3727195ffc068a30e21769c7e808d16ee25e9e48e51f938b6ddbe405abe46c45091a56ad90aac1cad0d809d16cbad889ff1 diff --git a/proto/buf.yaml b/proto/buf.yaml index bc581b15..8cf29d06 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -1,25 +1,26 @@ breaking: - use: - - FILE + use: + - FILE deps: -- buf.build/protocolbuffers/wellknowntypes -- buf.build/cosmos/cosmos-sdk -- buf.build/cosmos/cosmos-proto -- buf.build/cosmos/gogo-proto -- buf.build/googleapis/googleapis -- buf.build/cosmos/ics23 -- buf.build/cosmos/ibc + - buf.build/protocolbuffers/wellknowntypes + - buf.build/cosmos/cosmos-sdk + - buf.build/cosmos/cosmos-proto + - buf.build/cosmos/gogo-proto + - buf.build/googleapis/googleapis + - buf.build/cosmos/ics23 + - buf.build/cosmos/ibc + - buf.build/cosmos/evm lint: - except: - - UNARY_RPC - - COMMENT_FIELD - - SERVICE_SUFFIX - - PACKAGE_VERSION_SUFFIX - - RPC_REQUEST_STANDARD_NAME - ignore: - - tendermint - use: - - DEFAULT - - COMMENTS - - FILE_LOWER_SNAKE_CASE + except: + - UNARY_RPC + - COMMENT_FIELD + - SERVICE_SUFFIX + - PACKAGE_VERSION_SUFFIX + - RPC_REQUEST_STANDARD_NAME + ignore: + - tendermint + use: + - DEFAULT + - COMMENTS + - FILE_LOWER_SNAKE_CASE version: v1 diff --git a/testing/ibc/app.go b/testing/ibc/app.go index 9affab51..838fd8bf 100644 --- a/testing/ibc/app.go +++ b/testing/ibc/app.go @@ -12,7 +12,7 @@ import ( sdkmath "cosmossdk.io/math" clienthelpers "cosmossdk.io/client/v2/helpers" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/crypto/ed25519" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" @@ -23,7 +23,7 @@ import ( 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" - ibctesting "github.com/cosmos/ibc-go/v10/testing" + ibctesting "github.com/cosmos/ibc-go/v11/testing" evmtypes "github.com/cosmos/evm/x/vm/types" diff --git a/testing/ibc/e2e/ibc_denom_resolution_test.go b/testing/ibc/e2e/ibc_denom_resolution_test.go index cd50160f..8286db1c 100644 --- a/testing/ibc/e2e/ibc_denom_resolution_test.go +++ b/testing/ibc/e2e/ibc_denom_resolution_test.go @@ -9,9 +9,9 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v10/testing" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v11/testing" "github.com/stretchr/testify/suite" ibctest "github.com/bitbadges/bitbadgeschain/testing/ibc" diff --git a/testing/ibc/e2e/ibc_escrow_test.go b/testing/ibc/e2e/ibc_escrow_test.go index d59fb812..589ebd9b 100644 --- a/testing/ibc/e2e/ibc_escrow_test.go +++ b/testing/ibc/e2e/ibc_escrow_test.go @@ -8,9 +8,9 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v10/testing" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v11/testing" "github.com/stretchr/testify/suite" "github.com/bitbadges/bitbadgeschain/third_party/osmomath" diff --git a/testing/ibc/e2e/ibc_hooks_comprehensive_test.go b/testing/ibc/e2e/ibc_hooks_comprehensive_test.go index a802a485..90b71f98 100644 --- a/testing/ibc/e2e/ibc_hooks_comprehensive_test.go +++ b/testing/ibc/e2e/ibc_hooks_comprehensive_test.go @@ -11,12 +11,12 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v10/testing" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v11/testing" "github.com/stretchr/testify/suite" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" ibctest "github.com/bitbadges/bitbadgeschain/testing/ibc" "github.com/bitbadges/bitbadgeschain/third_party/osmomath" diff --git a/testing/ibc/e2e/ibc_hooks_test.go b/testing/ibc/e2e/ibc_hooks_test.go index fbbd53db..8dc11759 100644 --- a/testing/ibc/e2e/ibc_hooks_test.go +++ b/testing/ibc/e2e/ibc_hooks_test.go @@ -9,9 +9,9 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v10/testing" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v11/testing" "github.com/stretchr/testify/suite" customhookstypes "github.com/bitbadges/bitbadgeschain/x/custom-hooks/types" diff --git a/testing/ibc/e2e/ibc_rate_limit_test.go b/testing/ibc/e2e/ibc_rate_limit_test.go index b3cf906c..9be577bd 100644 --- a/testing/ibc/e2e/ibc_rate_limit_test.go +++ b/testing/ibc/e2e/ibc_rate_limit_test.go @@ -8,9 +8,9 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v10/testing" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v11/testing" "github.com/stretchr/testify/suite" ibctest "github.com/bitbadges/bitbadgeschain/testing/ibc" diff --git a/testing/ibc/e2e/ibc_transfer_test.go b/testing/ibc/e2e/ibc_transfer_test.go index f1914318..43a69ef0 100644 --- a/testing/ibc/e2e/ibc_transfer_test.go +++ b/testing/ibc/e2e/ibc_transfer_test.go @@ -8,9 +8,9 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - ibctesting "github.com/cosmos/ibc-go/v10/testing" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + ibctesting "github.com/cosmos/ibc-go/v11/testing" "github.com/stretchr/testify/suite" ibctest "github.com/bitbadges/bitbadgeschain/testing/ibc" diff --git a/testing/ibc/e2e/suite_test.go b/testing/ibc/e2e/suite_test.go index 21e603e4..6369c912 100644 --- a/testing/ibc/e2e/suite_test.go +++ b/testing/ibc/e2e/suite_test.go @@ -8,8 +8,8 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - ibctesting "github.com/cosmos/ibc-go/v10/testing" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + ibctesting "github.com/cosmos/ibc-go/v11/testing" "github.com/stretchr/testify/suite" "github.com/bitbadges/bitbadgeschain/app" diff --git a/testing/ibc/helpers.go b/testing/ibc/helpers.go index 21c4dda9..5fe0c373 100644 --- a/testing/ibc/helpers.go +++ b/testing/ibc/helpers.go @@ -8,10 +8,10 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - ibctesting "github.com/cosmos/ibc-go/v10/testing" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + ibctesting "github.com/cosmos/ibc-go/v11/testing" "github.com/bitbadges/bitbadgeschain/app" ) diff --git a/testutil/keeper/ibc_helpers.go b/testutil/keeper/ibc_helpers.go index 394b65dc..f8838d08 100644 --- a/testutil/keeper/ibc_helpers.go +++ b/testutil/keeper/ibc_helpers.go @@ -6,29 +6,14 @@ import ( "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" - sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - storetypes "cosmossdk.io/store/types" - upgradekeeper "cosmossdk.io/x/upgrade/keeper" - upgradetypes "cosmossdk.io/x/upgrade/types" - ibcclienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - ibctypes "github.com/cosmos/ibc-go/v10/modules/core/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" + upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + ibcclienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" ) -// noopParamSubspace is a no-op implementation of ParamSubspace for testing -type noopParamSubspace struct{} - -var _ ibctypes.ParamSubspace = (*noopParamSubspace)(nil) - -// GetParamSet implements ibctypes.ParamSubspace -func (n *noopParamSubspace) GetParamSet(ctx sdk.Context, ps paramtypes.ParamSet) { - // No-op -} - -// NewNoopParamSubspace creates a new no-op ParamSubspace -func NewNoopParamSubspace() ibctypes.ParamSubspace { - return &noopParamSubspace{} -} +// IBC v11 removed ibctypes.ParamSubspace entirely; the noop helper that +// previously lived here is no longer needed. // noopUpgradeKeeper is a no-op implementation of UpgradeKeeper for testing type noopUpgradeKeeper struct{} diff --git a/third_party/apptesting/test_suite.go b/third_party/apptesting/test_suite.go index a1102995..04fb6464 100644 --- a/third_party/apptesting/test_suite.go +++ b/third_party/apptesting/test_suite.go @@ -8,10 +8,10 @@ import ( "time" coreheader "cosmossdk.io/core/header" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" "cosmossdk.io/math" - "cosmossdk.io/store/rootmulti" - storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/store/v2/rootmulti" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/crypto/ed25519" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" @@ -38,7 +38,6 @@ import ( "github.com/bitbadges/bitbadgeschain/x/gamm/poolmodels/balancer" gammtypes "github.com/bitbadges/bitbadgeschain/x/gamm/types" - storemetrics "cosmossdk.io/store/metrics" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" @@ -216,7 +215,7 @@ func (s *KeeperTestHelper) CreateTestContextWithMultiStore() (sdk.Context, store db := dbm.NewMemDB() logger := log.NewNopLogger() - ms := rootmulti.NewStore(db, logger, storemetrics.NewNoOpMetrics()) + ms := rootmulti.NewStore(db, logger) return sdk.NewContext(ms, cmtproto.Header{}, false, logger), ms } @@ -238,7 +237,7 @@ func (s *KeeperTestHelper) Commit() { header.Time = newBlockTime header.Height++ - s.Ctx = s.App.BaseApp.NewUncachedContext(false, header).WithHeaderInfo(coreheader.Info{ + s.Ctx = s.App.BaseApp.NewNextBlockContext(header).WithHeaderInfo(coreheader.Info{ Height: header.Height, Time: header.Time, }) diff --git a/third_party/osmoutils/cache_ctx.go b/third_party/osmoutils/cache_ctx.go index 292b3e9f..d27d7af1 100644 --- a/third_party/osmoutils/cache_ctx.go +++ b/third_party/osmoutils/cache_ctx.go @@ -6,7 +6,7 @@ import ( "runtime" "runtime/debug" - "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/store/v2/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/third_party/osmoutils/store_helper.go b/third_party/osmoutils/store_helper.go index 82739651..14acfeb7 100644 --- a/third_party/osmoutils/store_helper.go +++ b/third_party/osmoutils/store_helper.go @@ -5,15 +5,15 @@ import ( "errors" "fmt" - "cosmossdk.io/store/prefix" + "github.com/cosmos/cosmos-sdk/store/v2/prefix" db "github.com/cosmos/cosmos-db" sdk "github.com/cosmos/cosmos-sdk/types" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" "github.com/bitbadges/bitbadgeschain/third_party/osmomath" - "cosmossdk.io/store" + store "github.com/cosmos/cosmos-sdk/store/v2" "github.com/cosmos/gogoproto/proto" ) diff --git a/vendor-shims/cosmossdk-x-upgrade/CHANGELOG.md b/vendor-shims/cosmossdk-x-upgrade/CHANGELOG.md new file mode 100644 index 00000000..f7a5947e --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/CHANGELOG.md @@ -0,0 +1,81 @@ + + +# Changelog + +## [Unreleased] + +## [v0.2.0](https://github.com/cosmos/cosmos-sdk/releases/tag/x/upgrade/v0.2.0) - 2025-04-24 + +* SDK v0.53.x support. + +## [v0.1.4](https://github.com/cosmos/cosmos-sdk/releases/tag/x/upgrade/v0.1.4) - 2024-07-15 + +### Improvements + +* [#20771](https://github.com/cosmos/cosmos-sdk/pull/20771) Create upgrade directory only when necessary (upgrade flow and not init flow). + +## [v0.1.3](https://github.com/cosmos/cosmos-sdk/releases/tag/x/upgrade/v0.1.3) - 2024-06-04 + +* (deps) [#20530](https://github.com/cosmos/cosmos-sdk/pull/20530) Bump vulnerable `github.com/hashicorp/go-getter` to v1.7.4. + * In theory, we do not need a new release for this, but we are doing it as `x/upgrade` is used in Cosmovisor. + +## [v0.1.2](https://github.com/cosmos/cosmos-sdk/releases/tag/x/upgrade/v0.1.2) - 2024-04-22 + +### Improvements + +* (deps) [#19810](https://github.com/cosmos/cosmos-sdk/pull/19810) Upgrade SDK version due to prometheus breaking change. +* (deps) [#19810](https://github.com/cosmos/cosmos-sdk/pull/19810) Bump `cosmossdk.io/store` to v1.1.0. + +### Bug Fixes + +* [#19706](https://github.com/cosmos/cosmos-sdk/pull/19706) Stop treating inline JSON as a URL. + +## [v0.1.1](https://github.com/cosmos/cosmos-sdk/releases/tag/x/upgrade/v0.1.1) - 2023-12-11 + +### Improvements + +* [#18470](https://github.com/cosmos/cosmos-sdk/pull/18470) Improve go-getter settings. + +## [v0.1.0](https://github.com/cosmos/cosmos-sdk/releases/tag/x/upgrade/v0.1.0) - 2023-11-07 + +### Features + +* [#14880](https://github.com/cosmos/cosmos-sdk/pull/14880) Switch from using gov v1beta1 to gov v1 in upgrade CLIs. +* [#14764](https://github.com/cosmos/cosmos-sdk/pull/14764) The `x/upgrade` module is extracted to have a separate go.mod file which allows it be a standalone module. + +### Improvements + +* [#16903](https://github.com/cosmos/cosmos-sdk/pull/16903) Use AutoCLI for upgrade querying commands. + +### API Breaking Changes + +* [#16845](https://github.com/cosmos/cosmos-sdk/pull/16845) Remove gov v1beta1 handler. Use gov v1 proposals directly, or replicate the handler in your app. +* [#16511](https://github.com/cosmos/cosmos-sdk/pull/16511) `BinaryDownloadURLMap.ValidateBasic()` and `BinaryDownloadURLMap.CheckURLs` now both take a checksum parameter when willing to ensure a checksum is provided for each URL. +* [#16511](https://github.com/cosmos/cosmos-sdk/pull/16511) `plan.DownloadURLWithChecksum` has been renamed to `plan.DownloadURL` and does not validate the URL anymore. Call `plan.ValidateURL` before calling `plan.DownloadURL` to validate the URL. +* [#16511](https://github.com/cosmos/cosmos-sdk/pull/16511) `plan.DownloadUpgrade` does not validate URL anymore. Call `plan.ValidateURL` before calling `plan.DownloadUpgrade` to validate the URL. +* [#16227](https://github.com/cosmos/cosmos-sdk/issues/16227) `NewKeeper` now takes a `KVStoreService` instead of a `StoreKey`, methods in the `Keeper` now take a `context.Context` instead of a `sdk.Context` and return an `error`. `UpgradeHandler` now receives a `context.Context`. `GetUpgradedClient`, `GetUpgradedConsensusState`, `GetUpgradePlan` now return a specific error for "not found". + +### Bug Fixes + +* [#17421](https://github.com/cosmos/cosmos-sdk/pull/17421) Replace `BeginBlock` by `PreBlock`. Read [ADR-68](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-068-preblock.md) for more information. diff --git a/vendor-shims/cosmossdk-x-upgrade/LICENSE b/vendor-shims/cosmossdk-x-upgrade/LICENSE new file mode 100644 index 00000000..105133ec --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright Cosmos-SDK Authors + Copyright 2016 All in Bits, 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. diff --git a/vendor-shims/cosmossdk-x-upgrade/README.md b/vendor-shims/cosmossdk-x-upgrade/README.md new file mode 100644 index 00000000..46e4061a --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/README.md @@ -0,0 +1,609 @@ +--- +sidebar_position: 1 +--- + +# `x/upgrade` + +## Abstract + +`x/upgrade` is an implementation of a Cosmos SDK module that facilitates smoothly +upgrading a live Cosmos chain to a new (breaking) software version. It accomplishes this by +providing a `PreBlocker` hook that prevents the blockchain state machine from +proceeding once a pre-defined upgrade block height has been reached. + +The module does not prescribe anything regarding how governance decides to do an +upgrade, but just the mechanism for coordinating the upgrade safely. Without software +support for upgrades, upgrading a live chain is risky because all of the validators +need to pause their state machines at exactly the same point in the process. If +this is not done correctly, there can be state inconsistencies which are hard to +recover from. + +* [Concepts](#concepts) +* [State](#state) +* [Events](#events) +* [Client](#client) + * [CLI](#cli) + * [REST](#rest) + * [gRPC](#grpc) +* [Resources](#resources) + +## Concepts + +### Plan + +The `x/upgrade` module defines a `Plan` type in which a live upgrade is scheduled +to occur. A `Plan` can be scheduled at a specific block height. +A `Plan` is created once a (frozen) release candidate along with an appropriate upgrade +`Handler` (see below) is agreed upon, where the `Name` of a `Plan` corresponds to a +specific `Handler`. Typically, a `Plan` is created through a governance proposal +process, where if voted upon and passed, will be scheduled. The `Info` of a `Plan` +may contain various metadata about the upgrade, typically application specific +upgrade info to be included on-chain such as a git commit that validators could +automatically upgrade to. + +```go +type Plan struct { + Name string + Height int64 + Info string +} +``` + +#### Sidecar Process + +If an operator running the application binary also runs a sidecar process to assist +in the automatic download and upgrade of a binary, the `Info` allows this process to +be seamless. This tool is [Cosmovisor](https://github.com/cosmos/cosmos-sdk/tree/main/tools/cosmovisor#readme). + +### Handler + +The `x/upgrade` module facilitates upgrading from major version X to major version Y. To +accomplish this, node operators must first upgrade their current binary to a new +binary that has a corresponding `Handler` for the new version Y. It is assumed that +this version has fully been tested and approved by the community at large. This +`Handler` defines what state migrations need to occur before the new binary Y +can successfully run the chain. Naturally, this `Handler` is application specific +and not defined on a per-module basis. Registering a `Handler` is done via +`Keeper#SetUpgradeHandler` in the application. + +```go +type UpgradeHandler func(Context, Plan, VersionMap) (VersionMap, error) +``` + +During each `EndBlock` execution, the `x/upgrade` module checks if there exists a +`Plan` that should execute (is scheduled at that height). If so, the corresponding +`Handler` is executed. If the `Plan` is expected to execute but no `Handler` is registered +or if the binary was upgraded too early, the node will gracefully panic and exit. + +### StoreLoader + +The `x/upgrade` module also facilitates store migrations as part of the upgrade. The +`StoreLoader` sets the migrations that need to occur before the new binary can +successfully run the chain. This `StoreLoader` is also application specific and +not defined on a per-module basis. Registering this `StoreLoader` is done via +`app#SetStoreLoader` in the application. + +```go +func UpgradeStoreLoader (upgradeHeight int64, storeUpgrades *store.StoreUpgrades) baseapp.StoreLoader +``` + +If there's a planned upgrade and the upgrade height is reached, the old binary writes `Plan` to the disk before panicking. + +This information is critical to ensure the `StoreUpgrades` happens smoothly at correct height and +expected upgrade. It eliminiates the chances for the new binary to execute `StoreUpgrades` multiple +times everytime on restart. Also if there are multiple upgrades planned on same height, the `Name` +will ensure these `StoreUpgrades` takes place only in planned upgrade handler. + +### Proposal + +Typically, a `Plan` is proposed and submitted through governance via a proposal +containing a `MsgSoftwareUpgrade` message. +This proposal prescribes to the standard governance process. If the proposal passes, +the `Plan`, which targets a specific `Handler`, is persisted and scheduled. The +upgrade can be delayed or hastened by updating the `Plan.Height` in a new proposal. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/upgrade/v1beta1/tx.proto#L29-L41 +``` + +#### Cancelling Upgrade Proposals + +Upgrade proposals can be cancelled. There exists a gov-enabled `MsgCancelUpgrade` +message type, which can be embedded in a proposal, voted on and, if passed, will +remove the scheduled upgrade `Plan`. +Of course this requires that the upgrade was known to be a bad idea well before the +upgrade itself, to allow time for a vote. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/upgrade/v1beta1/tx.proto#L48-L57 +``` + +If such a possibility is desired, the upgrade height is to be +`2 * (VotingPeriod + DepositPeriod) + (SafetyDelta)` from the beginning of the +upgrade proposal. The `SafetyDelta` is the time available from the success of an +upgrade proposal and the realization it was a bad idea (due to external social consensus). + +A `MsgCancelUpgrade` proposal can also be made while the original +`MsgSoftwareUpgrade` proposal is still being voted upon, as long as the `VotingPeriod` +ends after the `MsgSoftwareUpgrade` proposal. + +## State + +The internal state of the `x/upgrade` module is relatively minimal and simple. The +state contains the currently active upgrade `Plan` (if one exists) by key +`0x0` and if a `Plan` is marked as "done" by key `0x1`. The state +contains the consensus versions of all app modules in the application. The versions +are stored as big endian `uint64`, and can be accessed with prefix `0x2` appended +by the corresponding module name of type `string`. The state maintains a +`Protocol Version` which can be accessed by key `0x3`. + +* Plan: `0x0 -> Plan` +* Done: `0x1 | byte(plan name) -> BigEndian(Block Height)` +* ConsensusVersion: `0x2 | byte(module name) -> BigEndian(Module Consensus Version)` +* ProtocolVersion: `0x3 -> BigEndian(Protocol Version)` + +The `x/upgrade` module contains no genesis state. + +## Events + +The `x/upgrade` does not emit any events by itself. Any and all proposal related +events are emitted through the `x/gov` module. + +## Client + +### CLI + +A user can query and interact with the `upgrade` module using the CLI. + +#### Query + +The `query` commands allow users to query `upgrade` state. + +```bash +simd query upgrade --help +``` + +##### applied + +The `applied` command allows users to query the block header for height at which a completed upgrade was applied. + +```bash +simd query upgrade applied [upgrade-name] [flags] +``` + +If upgrade-name was previously executed on the chain, this returns the header for the block at which it was applied. +This helps a client determine which binary was valid over a given range of blocks, as well as more context to understand past migrations. + +Example: + +```bash +simd query upgrade applied "test-upgrade" +``` + +Example Output: + +```bash +"block_id": { + "hash": "A769136351786B9034A5F196DC53F7E50FCEB53B48FA0786E1BFC45A0BB646B5", + "parts": { + "total": 1, + "hash": "B13CBD23011C7480E6F11BE4594EE316548648E6A666B3575409F8F16EC6939E" + } + }, + "block_size": "7213", + "header": { + "version": { + "block": "11" + }, + "chain_id": "testnet-2", + "height": "455200", + "time": "2021-04-10T04:37:57.085493838Z", + "last_block_id": { + "hash": "0E8AD9309C2DC411DF98217AF59E044A0E1CCEAE7C0338417A70338DF50F4783", + "parts": { + "total": 1, + "hash": "8FE572A48CD10BC2CBB02653CA04CA247A0F6830FF19DC972F64D339A355E77D" + } + }, + "last_commit_hash": "DE890239416A19E6164C2076B837CC1D7F7822FC214F305616725F11D2533140", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "validators_hash": "A31047ADE54AE9072EE2A12FF260A8990BA4C39F903EAF5636B50D58DBA72582", + "next_validators_hash": "A31047ADE54AE9072EE2A12FF260A8990BA4C39F903EAF5636B50D58DBA72582", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "app_hash": "28ECC486AFC332BA6CC976706DBDE87E7D32441375E3F10FD084CD4BAF0DA021", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "proposer_address": "2ABC4854B1A1C5AA8403C4EA853A81ACA901CC76" + }, + "num_txs": "0" +} +``` + +##### module versions + +The `module_versions` command gets a list of module names and their respective consensus versions. + +Following the command with a specific module name will return only +that module's information. + +```bash +simd query upgrade module_versions [optional module_name] [flags] +``` + +Example: + +```bash +simd query upgrade module_versions +``` + +Example Output: + +```bash +module_versions: +- name: auth + version: "2" +- name: authz + version: "1" +- name: bank + version: "2" +- name: distribution + version: "2" +- name: evidence + version: "1" +- name: feegrant + version: "1" +- name: genutil + version: "1" +- name: gov + version: "2" +- name: ibc + version: "2" +- name: mint + version: "1" +- name: params + version: "1" +- name: slashing + version: "2" +- name: staking + version: "2" +- name: transfer + version: "1" +- name: upgrade + version: "1" +- name: vesting + version: "1" +``` + +Example: + +```bash +regen query upgrade module_versions ibc +``` + +Example Output: + +```bash +module_versions: +- name: ibc + version: "2" +``` + +##### plan + +The `plan` command gets the currently scheduled upgrade plan, if one exists. + +```bash +regen query upgrade plan [flags] +``` + +Example: + +```bash +simd query upgrade plan +``` + +Example Output: + +```bash +height: "130" +info: "" +name: test-upgrade +time: "0001-01-01T00:00:00Z" +upgraded_client_state: null +``` + +#### Transactions + +The upgrade module supports the following transactions: + +* `software-proposal` - submits an upgrade proposal: + +```bash +simd tx upgrade software-upgrade v2 --title="Test Proposal" --summary="testing" --deposit="100000000stake" --upgrade-height 1000000 \ +--upgrade-info '{ "binaries": { "linux/amd64":"https://example.com/simd.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f" } }' --from cosmos1.. +``` + +* `cancel-software-upgrade` - cancels a previously submitted upgrade proposal: + +```bash +simd tx upgrade cancel-software-upgrade --title="Test Proposal" --summary="testing" --deposit="100000000stake" --from cosmos1.. +``` + +### REST + +A user can query the `upgrade` module using REST endpoints. + +#### Applied Plan + +`AppliedPlan` queries a previously applied upgrade plan by its name. + +```bash +/cosmos/upgrade/v1beta1/applied_plan/{name} +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/upgrade/v1beta1/applied_plan/v2.0-upgrade" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "height": "30" +} +``` + +#### Current Plan + +`CurrentPlan` queries the current upgrade plan. + +```bash +/cosmos/upgrade/v1beta1/current_plan +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/upgrade/v1beta1/current_plan" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "plan": "v2.1-upgrade" +} +``` + +#### Module versions + +`ModuleVersions` queries the list of module versions from state. + +```bash +/cosmos/upgrade/v1beta1/module_versions +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/upgrade/v1beta1/module_versions" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "module_versions": [ + { + "name": "auth", + "version": "2" + }, + { + "name": "authz", + "version": "1" + }, + { + "name": "bank", + "version": "2" + }, + { + "name": "distribution", + "version": "2" + }, + { + "name": "evidence", + "version": "1" + }, + { + "name": "feegrant", + "version": "1" + }, + { + "name": "genutil", + "version": "1" + }, + { + "name": "gov", + "version": "2" + }, + { + "name": "ibc", + "version": "2" + }, + { + "name": "mint", + "version": "1" + }, + { + "name": "params", + "version": "1" + }, + { + "name": "slashing", + "version": "2" + }, + { + "name": "staking", + "version": "2" + }, + { + "name": "transfer", + "version": "1" + }, + { + "name": "upgrade", + "version": "1" + }, + { + "name": "vesting", + "version": "1" + } + ] +} +``` + +### gRPC + +A user can query the `upgrade` module using gRPC endpoints. + +#### Applied Plan + +`AppliedPlan` queries a previously applied upgrade plan by its name. + +```bash +cosmos.upgrade.v1beta1.Query/AppliedPlan +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"name":"v2.0-upgrade"}' \ + localhost:9090 \ + cosmos.upgrade.v1beta1.Query/AppliedPlan +``` + +Example Output: + +```bash +{ + "height": "30" +} +``` + +#### Current Plan + +`CurrentPlan` queries the current upgrade plan. + +```bash +cosmos.upgrade.v1beta1.Query/CurrentPlan +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/CurrentPlan +``` + +Example Output: + +```bash +{ + "plan": "v2.1-upgrade" +} +``` + +#### Module versions + +`ModuleVersions` queries the list of module versions from state. + +```bash +cosmos.upgrade.v1beta1.Query/ModuleVersions +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/ModuleVersions +``` + +Example Output: + +```bash +{ + "module_versions": [ + { + "name": "auth", + "version": "2" + }, + { + "name": "authz", + "version": "1" + }, + { + "name": "bank", + "version": "2" + }, + { + "name": "distribution", + "version": "2" + }, + { + "name": "evidence", + "version": "1" + }, + { + "name": "feegrant", + "version": "1" + }, + { + "name": "genutil", + "version": "1" + }, + { + "name": "gov", + "version": "2" + }, + { + "name": "ibc", + "version": "2" + }, + { + "name": "mint", + "version": "1" + }, + { + "name": "params", + "version": "1" + }, + { + "name": "slashing", + "version": "2" + }, + { + "name": "staking", + "version": "2" + }, + { + "name": "transfer", + "version": "1" + }, + { + "name": "upgrade", + "version": "1" + }, + { + "name": "vesting", + "version": "1" + } + ] +} +``` + +## Resources + +A list of (external) resources to learn more about the `x/upgrade` module. + +* [Cosmos Dev Series: Cosmos Blockchain Upgrade](https://medium.com/web3-surfers/cosmos-dev-series-cosmos-sdk-based-blockchain-upgrade-b5e99181554c) - The blog post that explains how software upgrades work in detail. diff --git a/vendor-shims/cosmossdk-x-upgrade/abci.go b/vendor-shims/cosmossdk-x-upgrade/abci.go new file mode 100644 index 00000000..6f2cabcc --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/abci.go @@ -0,0 +1,134 @@ +package upgrade + +import ( + "context" + "errors" + "fmt" + + "cosmossdk.io/core/appmodule" + storetypes "cosmossdk.io/store/types" + "cosmossdk.io/x/upgrade/keeper" + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/telemetry" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// PreBlocker will check if there is a scheduled plan and if it is ready to be executed. +// If the current height is in the provided set of heights to skip, it will skip and clear the upgrade plan. +// If it is ready, it will execute it if the handler is installed, and panic/abort otherwise. +// If the plan is not ready, it will ensure the handler is not registered too early (and abort otherwise). +// +// The purpose is to ensure the binary is switched EXACTLY at the desired block, and to allow +// a migration to be executed if needed upon this switch (migration defined in the new binary) +// skipUpgradeHeightArray is a set of block heights for which the upgrade must be skipped +// +// Note: The MetricKey will change to MetricKeyPreBlocker in v0.54.0. +func PreBlocker(ctx context.Context, k *keeper.Keeper) (appmodule.ResponsePreBlock, error) { + defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyBeginBlocker) + + sdkCtx := sdk.UnwrapSDKContext(ctx) + blockHeight := sdkCtx.HeaderInfo().Height + plan, err := k.GetUpgradePlan(ctx) + if err != nil && !errors.Is(err, types.ErrNoUpgradePlanFound) { + return nil, err + } + found := err == nil + + if !k.DowngradeVerified() { + k.SetDowngradeVerified(true) + // This check will make sure that we are using a valid binary. + // It'll panic in these cases if there is no upgrade handler registered for the last applied upgrade. + // 1. If there is no scheduled upgrade. + // 2. If the plan is not ready. + // 3. If the plan is ready and skip upgrade height is set for current height. + if !found || !plan.ShouldExecute(blockHeight) || (plan.ShouldExecute(blockHeight) && k.IsSkipHeight(blockHeight)) { + lastAppliedPlan, _, err := k.GetLastCompletedUpgrade(ctx) + if err != nil { + return nil, err + } + + if lastAppliedPlan != "" && !k.HasHandler(lastAppliedPlan) { + var appVersion uint64 + + cp := sdkCtx.ConsensusParams() + if cp.Version != nil { + appVersion = cp.Version.App + } + + return nil, fmt.Errorf("wrong app version %d, upgrade handler is missing for %s upgrade plan", appVersion, lastAppliedPlan) + } + } + } + + if !found { + return &sdk.ResponsePreBlock{ + ConsensusParamsChanged: false, + }, nil + } + + logger := k.Logger(ctx) + + // To make sure clear upgrade is executed at the same block + if plan.ShouldExecute(blockHeight) { + // If skip upgrade has been set for current height, we clear the upgrade plan + if k.IsSkipHeight(blockHeight) { + skipUpgradeMsg := fmt.Sprintf("UPGRADE \"%s\" SKIPPED at %d: %s", plan.Name, plan.Height, plan.Info) + logger.Info(skipUpgradeMsg) + + // Clear the upgrade plan at current height + if err := k.ClearUpgradePlan(ctx); err != nil { + return nil, err + } + return &sdk.ResponsePreBlock{ + ConsensusParamsChanged: false, + }, nil + } + + // Prepare shutdown if we don't have an upgrade handler for this upgrade name (meaning this software is out of date) + if !k.HasHandler(plan.Name) { + // Write the upgrade info to disk. The UpgradeStoreLoader uses this info to perform or skip + // store migrations. + err := k.DumpUpgradeInfoToDisk(blockHeight, plan) + if err != nil { + return nil, fmt.Errorf("unable to write upgrade info to filesystem: %w", err) + } + + upgradeMsg := BuildUpgradeNeededMsg(plan) + logger.Error(upgradeMsg) + + // Returning an error will end up in a panic + return nil, errors.New(upgradeMsg) + } + + // We have an upgrade handler for this upgrade name, so apply the upgrade + logger.Info(fmt.Sprintf("applying upgrade \"%s\" at %s", plan.Name, plan.DueAt())) + sdkCtx = sdkCtx.WithBlockGasMeter(storetypes.NewInfiniteGasMeter()) + if err := k.ApplyUpgrade(sdkCtx, plan); err != nil { + return nil, err + } + return &sdk.ResponsePreBlock{ + // the consensus parameters might be modified in the migration, + // refresh the consensus parameters in context. + ConsensusParamsChanged: true, + }, nil + } + + // if we have a pending upgrade, but it is not yet time, make sure we did not + // set the handler already + if k.HasHandler(plan.Name) { + downgradeMsg := fmt.Sprintf("BINARY UPDATED BEFORE TRIGGER! UPGRADE \"%s\" - in binary but not executed on chain. Downgrade your binary", plan.Name) + logger.Error(downgradeMsg) + + // Returning an error will end up in a panic + return nil, errors.New(downgradeMsg) + } + return &sdk.ResponsePreBlock{ + ConsensusParamsChanged: false, + }, nil +} + +// BuildUpgradeNeededMsg prints the message that notifies that an upgrade is needed. +func BuildUpgradeNeededMsg(plan types.Plan) string { + return fmt.Sprintf("UPGRADE \"%s\" NEEDED at %s: %s", plan.Name, plan.DueAt(), plan.Info) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/abci_test.go b/vendor-shims/cosmossdk-x-upgrade/abci_test.go new file mode 100644 index 00000000..9019bd83 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/abci_test.go @@ -0,0 +1,529 @@ +package upgrade_test + +import ( + "context" + "errors" + "os" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/header" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + "cosmossdk.io/x/upgrade" + "cosmossdk.io/x/upgrade/keeper" + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/baseapp" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + "github.com/cosmos/cosmos-sdk/runtime" + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/module" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" +) + +type TestSuite struct { + preModule appmodule.HasPreBlocker + keeper *keeper.Keeper + ctx sdk.Context + baseApp *baseapp.BaseApp + encCfg moduletestutil.TestEncodingConfig +} + +func (s *TestSuite) VerifyDoUpgrade(t *testing.T) { + t.Helper() + t.Log("Verify that a panic happens at the upgrade height") + newCtx := s.ctx.WithHeaderInfo(header.Info{Height: s.ctx.HeaderInfo().Height + 1, Time: time.Now()}) + + _, err := s.preModule.PreBlock(newCtx) + require.ErrorContains(t, err, "UPGRADE \"test\" NEEDED at height: 11: ") + + t.Log("Verify that the upgrade can be successfully applied with a handler") + s.keeper.SetUpgradeHandler("test", func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + + _, err = s.preModule.PreBlock(newCtx) + require.NoError(t, err) + + s.VerifyCleared(t, newCtx) +} + +func (s *TestSuite) VerifyDoUpgradeWithCtx(t *testing.T, newCtx sdk.Context, proposalName string) { + t.Helper() + t.Log("Verify that a panic happens at the upgrade height") + + _, err := s.preModule.PreBlock(newCtx) + require.ErrorContains(t, err, "UPGRADE \""+proposalName+"\" NEEDED at height: ") + + t.Log("Verify that the upgrade can be successfully applied with a handler") + s.keeper.SetUpgradeHandler(proposalName, func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + + _, err = s.preModule.PreBlock(newCtx) + require.NoError(t, err) + + s.VerifyCleared(t, newCtx) +} + +func (s *TestSuite) VerifyCleared(t *testing.T, newCtx sdk.Context) { + t.Helper() + t.Log("Verify that the upgrade plan has been cleared") + _, err := s.keeper.GetUpgradePlan(newCtx) + require.ErrorIs(t, err, types.ErrNoUpgradePlanFound) +} + +func (s *TestSuite) VerifyNotDone(t *testing.T, newCtx sdk.Context, name string) { + t.Helper() + t.Log("Verify that upgrade was not done") + height, err := s.keeper.GetDoneHeight(newCtx, name) + require.Zero(t, height) + require.NoError(t, err) +} + +func (s *TestSuite) VerifyDone(t *testing.T, newCtx sdk.Context, name string) { + t.Helper() + t.Log("Verify that the upgrade plan has been executed") + height, err := s.keeper.GetDoneHeight(newCtx, name) + require.NotZero(t, height) + require.NoError(t, err) +} + +func (s *TestSuite) VerifySet(t *testing.T, skipUpgradeHeights map[int64]bool) { + t.Helper() + t.Log("Verify if the skip upgrade has been set") + + for k := range skipUpgradeHeights { + require.True(t, s.keeper.IsSkipHeight(k)) + } +} + +func setupTest(t *testing.T, height int64, skip map[int64]bool) *TestSuite { + t.Helper() + s := TestSuite{} + s.encCfg = moduletestutil.MakeTestEncodingConfig(upgrade.AppModuleBasic{}) + key := storetypes.NewKVStoreKey(types.StoreKey) + storeService := runtime.NewKVStoreService(key) + testCtx := testutil.DefaultContextWithDB(t, key, storetypes.NewTransientStoreKey("transient_test")) + + s.baseApp = baseapp.NewBaseApp( + "upgrade", + log.NewNopLogger(), + testCtx.DB, + s.encCfg.TxConfig.TxDecoder(), + ) + + s.keeper = keeper.NewKeeper(skip, storeService, s.encCfg.Codec, t.TempDir(), nil, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + s.keeper.SetVersionSetter(s.baseApp) + + s.ctx = testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now(), Height: height}) + + s.preModule = upgrade.NewAppModule(s.keeper, addresscodec.NewBech32Codec("cosmos")) + return &s +} + +func TestRequireFutureBlock(t *testing.T) { + s := setupTest(t, 10, map[int64]bool{}) + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: s.ctx.HeaderInfo().Height - 1}) + require.Error(t, err) + require.True(t, errors.Is(err, sdkerrors.ErrInvalidRequest), err) +} + +func TestDoHeightUpgrade(t *testing.T) { + s := setupTest(t, 10, map[int64]bool{}) + t.Log("Verify can schedule an upgrade") + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: s.ctx.HeaderInfo().Height + 1}) + require.NoError(t, err) + + s.VerifyDoUpgrade(t) +} + +func TestCanOverwriteScheduleUpgrade(t *testing.T) { + s := setupTest(t, 10, map[int64]bool{}) + t.Log("Can overwrite plan") + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "bad_test", Height: s.ctx.HeaderInfo().Height + 10}) + require.NoError(t, err) + err = s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: s.ctx.HeaderInfo().Height + 1}) + require.NoError(t, err) + + s.VerifyDoUpgrade(t) +} + +func TestHaltIfTooNew(t *testing.T) { + s := setupTest(t, 10, map[int64]bool{}) + t.Log("Verify that we don't panic with registered plan not in database at all") + var called int + s.keeper.SetUpgradeHandler("future", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + called++ + return vm, nil + }) + + newCtx := s.ctx.WithHeaderInfo(header.Info{Height: s.ctx.HeaderInfo().Height + 1, Time: time.Now()}) + _, err := s.preModule.PreBlock(newCtx) + require.NoError(t, err) + require.Equal(t, 0, called) + + t.Log("Verify we error if we have a registered handler ahead of time") + err = s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "future", Height: s.ctx.HeaderInfo().Height + 3}) + require.NoError(t, err) + _, err = s.preModule.PreBlock(newCtx) + require.EqualError(t, err, "BINARY UPDATED BEFORE TRIGGER! UPGRADE \"future\" - in binary but not executed on chain. Downgrade your binary") + require.Equal(t, 0, called) + + t.Log("Verify we no longer panic if the plan is on time") + + futCtx := s.ctx.WithHeaderInfo(header.Info{Height: s.ctx.HeaderInfo().Height + 3, Time: time.Now()}) + _, err = s.preModule.PreBlock(futCtx) + require.NoError(t, err) + require.Equal(t, 1, called) + + s.VerifyCleared(t, futCtx) +} + +func TestCanClear(t *testing.T) { + s := setupTest(t, 10, map[int64]bool{}) + t.Log("Verify upgrade is scheduled") + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: s.ctx.HeaderInfo().Height + 100}) + require.NoError(t, err) + + err = s.keeper.ClearUpgradePlan(s.ctx) + require.NoError(t, err) + + s.VerifyCleared(t, s.ctx) +} + +func TestCantApplySameUpgradeTwice(t *testing.T) { + s := setupTest(t, 10, map[int64]bool{}) + height := s.ctx.HeaderInfo().Height + 1 + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: height}) + require.NoError(t, err) + s.VerifyDoUpgrade(t) + t.Log("Verify an executed upgrade \"test\" can't be rescheduled") + err = s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: height}) + require.Error(t, err) + require.True(t, errors.Is(err, sdkerrors.ErrInvalidRequest), err) +} + +func TestNoSpuriousUpgrades(t *testing.T) { + s := setupTest(t, 10, map[int64]bool{}) + t.Log("Verify that no upgrade panic is triggered in the BeginBlocker when we haven't scheduled an upgrade") + _, err := s.preModule.PreBlock(s.ctx) + require.NoError(t, err) +} + +func TestPlanStringer(t *testing.T) { + require.Equal(t, "name:\"test\" time: height:100 ", (&types.Plan{Name: "test", Height: 100, Info: ""}).String()) + require.Equal(t, `name:"test" time: height:100 `, (&types.Plan{Name: "test", Height: 100, Info: ""}).String()) +} + +func TestContains(t *testing.T) { + var skipOne int64 = 11 + s := setupTest(t, 10, map[int64]bool{skipOne: true}) + + s.VerifySet(t, map[int64]bool{skipOne: true}) + t.Log("case where array contains the element") + require.True(t, s.keeper.IsSkipHeight(11)) + + t.Log("case where array doesn't contain the element") + require.False(t, s.keeper.IsSkipHeight(4)) +} + +func TestSkipUpgradeSkippingAll(t *testing.T) { + var ( + skipOne int64 = 11 + skipTwo int64 = 20 + ) + s := setupTest(t, 10, map[int64]bool{skipOne: true, skipTwo: true}) + + newCtx := s.ctx + + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: skipOne}) + require.NoError(t, err) + + t.Log("Verify if skip upgrade flag clears upgrade plan in both cases") + s.VerifySet(t, map[int64]bool{skipOne: true, skipTwo: true}) + + newCtx = newCtx.WithHeaderInfo(header.Info{Height: skipOne}) + _, err = s.preModule.PreBlock(newCtx) + require.NoError(t, err) + + t.Log("Verify a second proposal also is being cleared") + err = s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test2", Height: skipTwo}) + require.NoError(t, err) + + newCtx = newCtx.WithHeaderInfo(header.Info{Height: skipTwo}) + _, err = s.preModule.PreBlock(newCtx) + require.NoError(t, err) + + // To ensure verification is being done only after both upgrades are cleared + t.Log("Verify if both proposals are cleared") + s.VerifyCleared(t, s.ctx) + s.VerifyNotDone(t, s.ctx, "test") + s.VerifyNotDone(t, s.ctx, "test2") +} + +func TestUpgradeSkippingOne(t *testing.T) { + var ( + skipOne int64 = 11 + skipTwo int64 = 20 + ) + s := setupTest(t, 10, map[int64]bool{skipOne: true}) + + newCtx := s.ctx + + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: skipOne}) + require.NoError(t, err) + + t.Log("Verify if skip upgrade flag clears upgrade plan in one case and does upgrade on another") + s.VerifySet(t, map[int64]bool{skipOne: true}) + + // Setting block height of proposal test + newCtx = newCtx.WithHeaderInfo(header.Info{Height: skipOne}) + _, err = s.preModule.PreBlock(newCtx) + require.NoError(t, err) + + t.Log("Verify the second proposal is not skipped") + err = s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test2", Height: skipTwo}) + require.NoError(t, err) + // Setting block height of proposal test2 + newCtx = newCtx.WithHeaderInfo(header.Info{Height: skipTwo}) + s.VerifyDoUpgradeWithCtx(t, newCtx, "test2") + + t.Log("Verify first proposal is cleared and second is done") + s.VerifyNotDone(t, s.ctx, "test") + s.VerifyDone(t, s.ctx, "test2") +} + +func TestUpgradeSkippingOnlyTwo(t *testing.T) { + var ( + skipOne int64 = 11 + skipTwo int64 = 20 + skipThree int64 = 25 + ) + s := setupTest(t, 10, map[int64]bool{skipOne: true, skipTwo: true}) + + newCtx := s.ctx + + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: skipOne}) + require.NoError(t, err) + + t.Log("Verify if skip upgrade flag clears upgrade plan in both cases and does third upgrade") + s.VerifySet(t, map[int64]bool{skipOne: true, skipTwo: true}) + + // Setting block height of proposal test + newCtx = newCtx.WithHeaderInfo(header.Info{Height: skipOne}) + _, err = s.preModule.PreBlock(newCtx) + require.NoError(t, err) + + // A new proposal with height in skipUpgradeHeights + err = s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test2", Height: skipTwo}) + require.NoError(t, err) + // Setting block height of proposal test2 + newCtx = newCtx.WithHeaderInfo(header.Info{Height: skipTwo}) + _, err = s.preModule.PreBlock(newCtx) + require.NoError(t, err) + + t.Log("Verify a new proposal is not skipped") + err = s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test3", Height: skipThree}) + require.NoError(t, err) + newCtx = newCtx.WithHeaderInfo(header.Info{Height: skipThree}) + s.VerifyDoUpgradeWithCtx(t, newCtx, "test3") + + t.Log("Verify two proposals are cleared and third is done") + s.VerifyNotDone(t, s.ctx, "test") + s.VerifyNotDone(t, s.ctx, "test2") + s.VerifyDone(t, s.ctx, "test3") +} + +func TestUpgradeWithoutSkip(t *testing.T) { + s := setupTest(t, 10, map[int64]bool{}) + newCtx := s.ctx.WithHeaderInfo(header.Info{Height: s.ctx.HeaderInfo().Height + 1, Time: time.Now()}) + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test", Height: s.ctx.HeaderInfo().Height + 1}) + require.NoError(t, err) + t.Log("Verify if upgrade happens without skip upgrade") + _, err = s.preModule.PreBlock(newCtx) + require.ErrorContains(t, err, "UPGRADE \"test\" NEEDED at height:") + + s.VerifyDoUpgrade(t) + s.VerifyDone(t, s.ctx, "test") +} + +func TestDumpUpgradeInfoToFile(t *testing.T) { + s := setupTest(t, 10, map[int64]bool{}) + + // require no error when the upgrade info file does not exist + _, err := s.keeper.ReadUpgradeInfoFromDisk() + require.NoError(t, err) + + planHeight := s.ctx.HeaderInfo().Height + 1 + plan := types.Plan{ + Name: "test", + Height: 0, // this should be overwritten by DumpUpgradeInfoToFile + } + t.Log("verify if upgrade height is dumped to file") + err = s.keeper.DumpUpgradeInfoToDisk(planHeight, plan) + require.Nil(t, err) + + upgradeInfo, err := s.keeper.ReadUpgradeInfoFromDisk() + require.NoError(t, err) + + t.Log("Verify upgrade height from file matches ") + require.Equal(t, upgradeInfo.Height, planHeight) + require.Equal(t, upgradeInfo.Name, plan.Name) + + // clear the test file + upgradeInfoFilePath, err := s.keeper.GetUpgradeInfoPath() + require.Nil(t, err) + err = os.Remove(upgradeInfoFilePath) + require.Nil(t, err) +} + +// TODO: add testcase to for `no upgrade handler is present for last applied upgrade`. +func TestBinaryVersion(t *testing.T) { + var skipHeight int64 = 15 + s := setupTest(t, 10, map[int64]bool{skipHeight: true}) + + testCases := []struct { + name string + preRun func() sdk.Context + expectError bool + }{ + { + "test not panic: no scheduled upgrade or applied upgrade is present", + func() sdk.Context { + return s.ctx + }, + false, + }, + { + "test not panic: upgrade handler is present for last applied upgrade", + func() sdk.Context { + s.keeper.SetUpgradeHandler("test0", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test0", Height: s.ctx.HeaderInfo().Height + 2}) + require.NoError(t, err) + + newCtx := s.ctx.WithHeaderInfo(header.Info{Height: 12}) + require.NoError(t, s.keeper.ApplyUpgrade(newCtx, types.Plan{ + Name: "test0", + Height: 12, + })) + + return newCtx + }, + false, + }, + { + "test panic: upgrade needed", + func() sdk.Context { + err := s.keeper.ScheduleUpgrade(s.ctx, types.Plan{Name: "test2", Height: 13}) + require.NoError(t, err) + + newCtx := s.ctx.WithHeaderInfo(header.Info{Height: 13}) + return newCtx + }, + true, + }, + } + + for _, tc := range testCases { + ctx := tc.preRun() + _, err := s.preModule.PreBlock(ctx) + if tc.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + } +} + +func TestDowngradeVerification(t *testing.T) { + // could not use setupTest() here, because we have to use the same key + // for the two keepers. + encCfg := moduletestutil.MakeTestEncodingConfig(upgrade.AppModuleBasic{}) + key := storetypes.NewKVStoreKey(types.StoreKey) + storeService := runtime.NewKVStoreService(key) + testCtx := testutil.DefaultContextWithDB(t, key, storetypes.NewTransientStoreKey("transient_test")) + ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now(), Height: 10}) + + skip := map[int64]bool{} + k := keeper.NewKeeper(skip, storeService, encCfg.Codec, t.TempDir(), nil, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + m := upgrade.NewAppModule(k, addresscodec.NewBech32Codec("cosmos")) + + // submit a plan. + planName := "downgrade" + err := k.ScheduleUpgrade(ctx, types.Plan{Name: planName, Height: ctx.HeaderInfo().Height + 1}) + require.NoError(t, err) + ctx = ctx.WithHeaderInfo(header.Info{Height: ctx.HeaderInfo().Height + 1}) + + // set the handler. + k.SetUpgradeHandler(planName, func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + + // successful upgrade. + _, err = m.PreBlock(ctx) + require.NoError(t, err) + ctx = ctx.WithHeaderInfo(header.Info{Height: ctx.HeaderInfo().Height + 1}) + + testCases := map[string]struct { + preRun func(*keeper.Keeper, sdk.Context, string) + expectError bool + }{ + "valid binary": { + preRun: func(k *keeper.Keeper, ctx sdk.Context, name string) { + k.SetUpgradeHandler(planName, func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + }, + }, + "downgrade with an active plan": { + preRun: func(k *keeper.Keeper, ctx sdk.Context, name string) { + err := k.ScheduleUpgrade(ctx, types.Plan{Name: "another" + planName, Height: ctx.HeaderInfo().Height + 1}) + require.NoError(t, err, name) + }, + expectError: true, + }, + "downgrade without any active plan": { + expectError: true, + }, + } + + for name, tc := range testCases { + ctx, _ := ctx.CacheContext() + + // downgrade. now keeper does not have the handler. + k := keeper.NewKeeper(skip, storeService, encCfg.Codec, t.TempDir(), nil, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + m := upgrade.NewAppModule(k, addresscodec.NewBech32Codec("cosmos")) + + // assertions + lastAppliedPlan, _, err := k.GetLastCompletedUpgrade(ctx) + require.NoError(t, err) + require.Equal(t, planName, lastAppliedPlan) + require.False(t, k.HasHandler(planName)) + require.False(t, k.DowngradeVerified()) + _, err = k.GetUpgradePlan(ctx) + require.ErrorIs(t, err, types.ErrNoUpgradePlanFound) + + if tc.preRun != nil { + tc.preRun(k, ctx, name) + } + + _, err = m.PreBlock(ctx) + if tc.expectError { + require.Error(t, err, name) + } else { + require.NoError(t, err, name) + } + } +} diff --git a/vendor-shims/cosmossdk-x-upgrade/autocli.go b/vendor-shims/cosmossdk-x-upgrade/autocli.go new file mode 100644 index 00000000..36265aea --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/autocli.go @@ -0,0 +1,66 @@ +package upgrade + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + upgradev1beta1 "cosmossdk.io/api/cosmos/upgrade/v1beta1" +) + +func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: upgradev1beta1.Query_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "CurrentPlan", + Use: "plan", + Short: "Query the upgrade plan (if one exists)", + Long: "Gets the currently scheduled upgrade plan, if one exists", + }, + { + RpcMethod: "AppliedPlan", + Use: "applied [upgrade-name]", + Short: "Query the block header for height at which a completed upgrade was applied", + Long: "If upgrade-name was previously executed on the chain, this returns the header for the block at which it was applied. This helps a client determine which binary was valid over a given range of blocks, as well as more context to understand past migrations.", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "name"}, + }, + }, + { + RpcMethod: "ModuleVersions", + Use: "module-versions [optional module_name]", + Alias: []string{"module_versions"}, + Short: "Query the list of module versions", + Long: "Gets a list of module names and their respective consensus versions. Following the command with a specific module name will return only that module's information.", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "module_name", Optional: true}, + }, + }, + { + RpcMethod: "Authority", + Use: "authority", + Short: "Get the upgrade authority address", + }, + { + RpcMethod: "UpgradedConsensusState", + Skip: true, // Skipping this command as the query is deprecated. + }, + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: upgradev1beta1.Msg_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "CancelUpgrade", + Use: "cancel-upgrade-proposal", + Short: "Submit a proposal to cancel a planned chain upgrade.", + GovProposal: true, + }, + { + RpcMethod: "SoftwareUpgrade", + Skip: true, // skipped because authority gated + }, + }, + EnhanceCustomCommand: true, + }, + } +} diff --git a/vendor-shims/cosmossdk-x-upgrade/client/cli/parse.go b/vendor-shims/cosmossdk-x-upgrade/client/cli/parse.go new file mode 100644 index 00000000..8171ba2f --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/client/cli/parse.go @@ -0,0 +1,21 @@ +package cli + +import ( + "github.com/spf13/pflag" + + "cosmossdk.io/x/upgrade/types" +) + +func parsePlan(fs *pflag.FlagSet, name string) (types.Plan, error) { + height, err := fs.GetInt64(FlagUpgradeHeight) + if err != nil { + return types.Plan{}, err + } + + info, err := fs.GetString(FlagUpgradeInfo) + if err != nil { + return types.Plan{}, err + } + + return types.Plan{Name: name, Height: height, Info: info}, nil +} diff --git a/vendor-shims/cosmossdk-x-upgrade/client/cli/parse_test.go b/vendor-shims/cosmossdk-x-upgrade/client/cli/parse_test.go new file mode 100644 index 00000000..d4f9b4bb --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/client/cli/parse_test.go @@ -0,0 +1,33 @@ +package cli + +import ( + "strconv" + "testing" + + "github.com/stretchr/testify/require" + + "cosmossdk.io/x/upgrade/types" + + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" +) + +func TestParsePlan(t *testing.T) { + fs := NewCmdSubmitUpgradeProposal(addresscodec.NewBech32Codec("cosmos")).Flags() + + proposal := types.MsgSoftwareUpgrade{ + Plan: types.Plan{ + Name: "plan name", + Height: 123456, + Info: "plan info", + }, + } + + require.NoError(t, fs.Set(FlagUpgradeHeight, strconv.FormatInt(proposal.Plan.Height, 10))) + require.NoError(t, fs.Set(FlagUpgradeInfo, proposal.Plan.Info)) + + p, err := parsePlan(fs, proposal.Plan.Name) + require.NoError(t, err) + require.Equal(t, p.Name, proposal.Plan.Name) + require.Equal(t, p.Height, proposal.Plan.Height) + require.Equal(t, p.Info, proposal.Plan.Info) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/client/cli/tx.go b/vendor-shims/cosmossdk-x-upgrade/client/cli/tx.go new file mode 100644 index 00000000..d798dd79 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/client/cli/tx.go @@ -0,0 +1,194 @@ +package cli + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/spf13/cobra" + + addresscodec "cosmossdk.io/core/address" + "cosmossdk.io/x/upgrade/plan" + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" + "github.com/cosmos/cosmos-sdk/x/gov/client/cli" +) + +const ( + FlagUpgradeHeight = "upgrade-height" + FlagUpgradeInfo = "upgrade-info" + FlagNoValidate = "no-validate" + FlagNoChecksumRequired = "no-checksum-required" + FlagDaemonName = "daemon-name" + FlagAuthority = "authority" +) + +// GetTxCmd returns the transaction commands for this module +func GetTxCmd(ac addresscodec.Codec) *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: "Upgrade transaction subcommands", + } + + cmd.AddCommand( + NewCmdSubmitUpgradeProposal(ac), + NewCmdSubmitCancelUpgradeProposal(ac), + ) + + return cmd +} + +// NewCmdSubmitUpgradeProposal implements a command handler for submitting a software upgrade proposal transaction. +func NewCmdSubmitUpgradeProposal(ac addresscodec.Codec) *cobra.Command { + cmd := &cobra.Command{ + Use: "software-upgrade [name] (--upgrade-height [height]) (--upgrade-info [info]) [flags]", + Args: cobra.ExactArgs(1), + Short: "Submit a software upgrade proposal", + Long: "Submit a software upgrade along with an initial deposit.\n" + + "Please specify a unique name and height for the upgrade to take effect.\n" + + "You may include info to reference a binary download link, in a format compatible with: https://docs.cosmos.network/main/tooling/cosmovisor", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + proposal, err := cli.ReadGovPropFlags(clientCtx, cmd.Flags()) + if err != nil { + return err + } + + name := args[0] + p, err := parsePlan(cmd.Flags(), name) + if err != nil { + return err + } + + noValidate, err := cmd.Flags().GetBool(FlagNoValidate) + if err != nil { + return err + } + + if !noValidate { + daemonName, err := cmd.Flags().GetString(FlagDaemonName) + if err != nil { + return err + } + + noChecksum, err := cmd.Flags().GetBool(FlagNoChecksumRequired) + if err != nil { + return err + } + + var planInfo *plan.Info + if planInfo, err = plan.ParseInfo(p.Info, plan.ParseOptionEnforceChecksum(!noChecksum)); err != nil { + return err + } + + if err = planInfo.ValidateFull(daemonName); err != nil { + return err + } + } + + authority, _ := cmd.Flags().GetString(FlagAuthority) + if authority != "" { + if _, err = ac.StringToBytes(authority); err != nil { + return fmt.Errorf("invalid authority address: %w", err) + } + } else { + authority = sdk.AccAddress(address.Module("gov")).String() + } + + if err := proposal.SetMsgs([]sdk.Msg{ + &types.MsgSoftwareUpgrade{ + Authority: authority, + Plan: p, + }, + }); err != nil { + return fmt.Errorf("failed to create submit upgrade proposal message: %w", err) + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), proposal) + }, + } + + cmd.Flags().Int64(FlagUpgradeHeight, 0, "The height at which the upgrade must happen") + cmd.Flags().String(FlagUpgradeInfo, "", "Info for the upgrade plan such as new version download urls, etc.") + cmd.Flags().Bool(FlagNoValidate, false, "Skip validation of the upgrade info (dangerous!)") + cmd.Flags().Bool(FlagNoChecksumRequired, false, "Skip requirement of checksums for binaries in the upgrade info") + cmd.Flags().String(FlagDaemonName, getDefaultDaemonName(), "The name of the executable being upgraded (for upgrade-info validation). Default is the DAEMON_NAME env var if set, or else this executable") + cmd.Flags().String(FlagAuthority, "", "The address of the upgrade module authority (defaults to gov)") + + // add common proposal flags + flags.AddTxFlagsToCmd(cmd) + cli.AddGovPropFlagsToCmd(cmd) + _ = cmd.MarkFlagRequired(cli.FlagTitle) + + return cmd +} + +// NewCmdSubmitCancelUpgradeProposal implements a command handler for submitting a software upgrade cancel proposal transaction. +func NewCmdSubmitCancelUpgradeProposal(ac addresscodec.Codec) *cobra.Command { + cmd := &cobra.Command{ + Use: "cancel-software-upgrade [flags]", + Args: cobra.ExactArgs(0), + Short: "Cancel the current software upgrade proposal", + Long: "Cancel a software upgrade along with an initial deposit.", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + proposal, err := cli.ReadGovPropFlags(clientCtx, cmd.Flags()) + if err != nil { + return err + } + + authority, _ := cmd.Flags().GetString(FlagAuthority) + if authority != "" { + if _, err = ac.StringToBytes(authority); err != nil { + return fmt.Errorf("invalid authority address: %w", err) + } + } else { + authority = sdk.AccAddress(address.Module("gov")).String() + } + + if err := proposal.SetMsgs([]sdk.Msg{ + &types.MsgCancelUpgrade{ + Authority: authority, + }, + }); err != nil { + return fmt.Errorf("failed to create cancel upgrade proposal message: %w", err) + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), proposal) + }, + } + + cmd.Flags().String(FlagAuthority, "", "The address of the upgrade module authority (defaults to gov)") + + // add common proposal flags + flags.AddTxFlagsToCmd(cmd) + cli.AddGovPropFlagsToCmd(cmd) + _ = cmd.MarkFlagRequired(cli.FlagTitle) + + return cmd +} + +// getDefaultDaemonName gets the default name to use for the daemon. +// If a DAEMON_NAME env var is set, that is used. +// Otherwise, the last part of the currently running executable is used. +func getDefaultDaemonName() string { + // DAEMON_NAME is specifically used here to correspond with the Cosmovisor setup env vars. + name := os.Getenv("DAEMON_NAME") + if len(name) == 0 { + _, name = filepath.Split(os.Args[0]) + } + return name +} diff --git a/vendor-shims/cosmossdk-x-upgrade/doc.go b/vendor-shims/cosmossdk-x-upgrade/doc.go new file mode 100644 index 00000000..a66ab41e --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/doc.go @@ -0,0 +1,12 @@ +/* +Package upgrade provides a Cosmos SDK module that can be used for smoothly upgrading a live Cosmos chain to a +new software version. It accomplishes this by providing a BeginBlocker hook that prevents the blockchain state +machine from proceeding once a pre-defined upgrade block height has been reached. The module does not prescribe +anything regarding how governance decides to do an upgrade, but just the mechanism for coordinating the upgrade safely. +Without software support for upgrades, upgrading a live chain is risky because all of the validators need to pause +their state machines at exactly the same point in the process. If this is not done correctly, there can be state +inconsistencies which are hard to recover from. + +For more information, read the documentation on https://docs.cosmos.network/main/modules/upgrade. +*/ +package upgrade diff --git a/vendor-shims/cosmossdk-x-upgrade/exported/exported.go b/vendor-shims/cosmossdk-x-upgrade/exported/exported.go new file mode 100644 index 00000000..859f7fe1 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/exported/exported.go @@ -0,0 +1,7 @@ +package exported + +// ProtocolVersionSetter defines the interface fulfilled by BaseApp +// which allows setting it's appVersion field. +type ProtocolVersionSetter interface { + SetProtocolVersion(uint64) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/go.mod b/vendor-shims/cosmossdk-x-upgrade/go.mod new file mode 100644 index 00000000..4bd517e8 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/go.mod @@ -0,0 +1,211 @@ +module cosmossdk.io/x/upgrade + +go 1.23.2 + +require ( + cosmossdk.io/api v0.9.2 + cosmossdk.io/core v0.11.3 + cosmossdk.io/depinject v1.2.0 + cosmossdk.io/errors v1.0.2 + cosmossdk.io/log v1.5.1 + cosmossdk.io/store v1.1.2 + github.com/cometbft/cometbft v0.38.17 + github.com/cosmos/cosmos-db v1.1.1 + github.com/cosmos/cosmos-proto v1.0.0-beta.5 + github.com/cosmos/cosmos-sdk v0.53.0 + github.com/cosmos/gogoproto v1.7.0 + github.com/golang/protobuf v1.5.4 + github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/hashicorp/go-cleanhttp v0.5.2 + github.com/hashicorp/go-getter v1.7.8 + github.com/hashicorp/go-metrics v0.5.4 + github.com/spf13/cast v1.7.1 + github.com/spf13/cobra v1.9.1 + github.com/spf13/pflag v1.0.6 + github.com/spf13/viper v1.20.1 + github.com/stretchr/testify v1.10.0 + google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 + google.golang.org/grpc v1.72.0 + google.golang.org/protobuf v1.36.6 +) + +require ( + cel.dev/expr v0.20.0 // indirect + cloud.google.com/go v0.116.0 // indirect + cloud.google.com/go/auth v0.14.1 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect + cloud.google.com/go/compute/metadata v0.6.0 // indirect + cloud.google.com/go/iam v1.2.2 // indirect + cloud.google.com/go/monitoring v1.21.2 // indirect + cloud.google.com/go/storage v1.49.0 // indirect + cosmossdk.io/collections v1.2.0 // indirect + cosmossdk.io/math v1.5.3 // indirect + cosmossdk.io/schema v1.1.0 // indirect + cosmossdk.io/x/tx v0.14.0 // indirect + filippo.io/edwards25519 v1.1.0 // indirect + github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect + github.com/99designs/keyring v1.2.1 // indirect + github.com/DataDog/datadog-go v3.2.0+incompatible // indirect + github.com/DataDog/zstd v1.5.7 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect + github.com/aws/aws-sdk-go v1.44.224 // 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.2.0 // indirect + github.com/bytedance/sonic v1.13.2 // indirect + github.com/bytedance/sonic/loader v0.2.4 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chzyer/readline v1.5.1 // indirect + github.com/cloudwego/base64x v0.1.5 // indirect + github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect + github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble v1.1.5 // indirect + github.com/cockroachdb/redact v1.1.6 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/cometbft/cometbft-db v0.14.1 // indirect + github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/go-bip39 v1.0.0 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/iavl v1.2.2 // indirect + github.com/cosmos/ics23/go v0.11.0 // indirect + github.com/cosmos/ledger-cosmos-go v0.14.0 // indirect + github.com/danieljoos/wincred v1.1.2 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect + github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect + github.com/dgraph-io/badger/v4 v4.2.0 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dvsekhvalnov/jose2go v1.6.0 // indirect + github.com/emicklei/dot v1.6.2 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect + github.com/go-jose/go-jose/v4 v4.0.5 // indirect + github.com/go-kit/kit v0.13.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.2.4 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/flatbuffers v2.0.8+incompatible // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/orderedcode v0.0.1 // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect + github.com/googleapis/gax-go/v2 v2.14.1 // indirect + github.com/gorilla/handlers v1.5.2 // indirect + github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-plugin v1.6.3 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/hashicorp/yamux v0.1.2 // indirect + github.com/hdevalence/ed25519consensus v0.2.0 // indirect + github.com/huandu/skiplist v1.2.1 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect + github.com/improbable-eng/grpc-web v0.15.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/cpuid/v2 v2.2.10 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/linxGnu/grocksdb v1.8.14 // indirect + github.com/manifoldco/promptui v0.9.0 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/minio/highwayhash v1.0.3 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mtibben/percent v0.2.1 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect + github.com/oklog/run v1.1.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.63.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/rs/cors v1.11.1 // indirect + github.com/rs/zerolog v1.34.0 // indirect + github.com/sagikazarmark/locafero v0.7.0 // indirect + github.com/sasha-s/go-deadlock v0.3.5 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.12.0 // indirect + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tidwall/btree v1.7.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/zeebo/errs v1.4.0 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v0.14.3 // indirect + go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.34.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect + go.opentelemetry.io/otel v1.34.0 // indirect + go.opentelemetry.io/otel/metric v1.34.0 // indirect + go.opentelemetry.io/otel/sdk v1.34.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect + go.opentelemetry.io/otel/trace v1.34.0 // indirect + go.uber.org/mock v0.5.2 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/arch v0.15.0 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect + golang.org/x/net v0.39.0 // indirect + golang.org/x/oauth2 v0.27.0 // indirect + golang.org/x/sync v0.13.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/term v0.31.0 // indirect + golang.org/x/text v0.24.0 // indirect + golang.org/x/time v0.10.0 // indirect + google.golang.org/api v0.222.0 // indirect + google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250422160041-2d3770c4ea7f // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + gotest.tools/v3 v3.5.2 // indirect + nhooyr.io/websocket v1.8.6 // indirect + pgregory.net/rapid v1.2.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) + +// Fix upstream GHSA-h395-qcrw-5vmq and GHSA-3vp4-m3rf-835h vulnerabilities. +// TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 +replace github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.1 diff --git a/vendor-shims/cosmossdk-x-upgrade/go.sum b/vendor-shims/cosmossdk-x-upgrade/go.sum new file mode 100644 index 00000000..7f6c3109 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/go.sum @@ -0,0 +1,2460 @@ +cel.dev/expr v0.20.0 h1:OunBvVCfvpWlt4dN7zg3FM6TDkzOePe1+foGJ9AXeeI= +cel.dev/expr v0.20.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cloud.google.com/go v0.26.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.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +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= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +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.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= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +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.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.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= +cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= +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/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +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/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/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/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +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/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/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/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/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/auth v0.14.1 h1:AwoJbzUdxA/whv1qj3TLKwh3XX5sikny2fc40wUl+h0= +cloud.google.com/go/auth v0.14.1/go.mod h1:4JHUxlGXisL0AW8kXPtUF6ztuOksyfUQNFjfsOCXkPM= +cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M= +cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc= +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/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +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= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +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/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/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/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +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/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/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +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/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/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/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= +cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +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/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/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/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/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/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +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/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +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/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +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/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/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/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/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +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/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +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/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +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/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/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/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/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +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/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.2.2 h1:ozUSofHUGf/F4tCNy/mu9tHLTaxZFLOUiKzjcgWHGIA= +cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY= +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/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/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +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/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/logging v1.12.0 h1:ex1igYcGFd4S/RZWOCU51StlIEuey5bjqwH9ZYjHibk= +cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT7RejksUAM= +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.6.2 h1:xjDfh1pQcWPEvnfjZmwjKQEcHnpz6lHjfy7Fo0MK+hc= +cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI= +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/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/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/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/monitoring v1.21.2 h1:FChwVtClH19E7pJ+e0xUhJPGksctZNVOk2UhMmblmdU= +cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU= +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/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/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +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/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/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +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/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.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/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/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/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/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/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/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/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/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +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/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/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/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/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/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= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +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/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.49.0 h1:zenOPBOWHCnojRd9aJZAyQXBYqkJkdQS42dxL55CIMw= +cloud.google.com/go/storage v1.49.0/go.mod h1:k1eHhhpLvrPjVGfo0mOUPEJ4Y2+a/Hv5PiwehZI9qGU= +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/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/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/trace v1.11.2 h1:4ZmaBdL8Ng/ajrgKqY5jfvzqMXbrDcBsUGXOT9aqTtI= +cloud.google.com/go/trace v1.11.2/go.mod h1:bn7OwXd4pd5rFuAnTrzBuoZ4ax2XQeG3qNgYmfCy0Io= +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/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/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/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +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/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/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= +cosmossdk.io/api v0.9.2 h1:9i9ptOBdmoIEVEVWLtYYHjxZonlF/aOVODLFaxpmNtg= +cosmossdk.io/api v0.9.2/go.mod h1:CWt31nVohvoPMTlPv+mMNCtC0a7BqRdESjCsstHcTkU= +cosmossdk.io/collections v1.2.0 h1:IesfVG8G/+FYCMVMP01frS/Cw99Omk5vBh3cHbO01Gg= +cosmossdk.io/collections v1.2.0/go.mod h1:4NkMoYw6qRA8fnSH/yn1D/MOutr8qyQnwsO50Mz9ItU= +cosmossdk.io/core v0.11.3 h1:mei+MVDJOwIjIniaKelE3jPDqShCc/F4LkNNHh+4yfo= +cosmossdk.io/core v0.11.3/go.mod h1:9rL4RE1uDt5AJ4Tg55sYyHWXA16VmpHgbe0PbJc6N2Y= +cosmossdk.io/depinject v1.2.0 h1:6NW/FSK1IkWTrX7XxUpBmX1QMBozpEI9SsWkKTBc5zw= +cosmossdk.io/depinject v1.2.0/go.mod h1:pvitjtUxZZZTQESKNS9KhGjWVslJZxtO9VooRJYyPjk= +cosmossdk.io/errors v1.0.2 h1:wcYiJz08HThbWxd/L4jObeLaLySopyyuUFB5w4AGpCo= +cosmossdk.io/errors v1.0.2/go.mod h1:0rjgiHkftRYPj//3DrD6y8hcm40HcPv/dR4R/4efr0k= +cosmossdk.io/log v1.5.1 h1:wLwiYXmfrort/O+j6EkjF+HvbdrRQd+4cYCPKFSm+zM= +cosmossdk.io/log v1.5.1/go.mod h1:5cXXBvfBkR2/BcXmosdCSLXllvgSjphrrDVdfVRmBGM= +cosmossdk.io/math v1.5.3 h1:WH6tu6Z3AUCeHbeOSHg2mt9rnoiUWVWaQ2t6Gkll96U= +cosmossdk.io/math v1.5.3/go.mod h1:uqcZv7vexnhMFJF+6zh9EWdm/+Ylyln34IvPnBauPCQ= +cosmossdk.io/schema v1.1.0 h1:mmpuz3dzouCoyjjcMcA/xHBEmMChN+EHh8EHxHRHhzE= +cosmossdk.io/schema v1.1.0/go.mod h1:Gb7pqO+tpR+jLW5qDcNOSv0KtppYs7881kfzakguhhI= +cosmossdk.io/store v1.1.2 h1:3HOZG8+CuThREKv6cn3WSohAc6yccxO3hLzwK6rBC7o= +cosmossdk.io/store v1.1.2/go.mod h1:60rAGzTHevGm592kFhiUVkNC9w7gooSEn5iUBPzHQ6A= +cosmossdk.io/x/tx v0.14.0 h1:hB3O25kIcyDW/7kMTLMaO8Ripj3yqs5imceVd6c/heA= +cosmossdk.io/x/tx v0.14.0/go.mod h1:Tn30rSRA1PRfdGB3Yz55W4Sn6EIutr9xtMKSHij+9PM= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +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/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE= +github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0 h1:f2Qw/Ehhimh5uO1fayV0QIW7DShEQqhtUfhYc+cBPlw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 h1:UQ0AhxogsIRZDkElkblfnwjc3IaltCm2HUMvezQaL7s= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1 h1:oTX4vsorBZo/Zdum6OKPA4o7544hm6smoRv1QjpTwGo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1/go.mod h1:0wEl7vrAD8mehJyohS9HZy+WyEOaQO2mJx86Cvh93kM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 h1:8nn+rsCvTq9axyEh382S0PFLBeaFwNsT43IrPWzctRU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1/go.mod h1:viRWSEhtMZqz1rhwmOVKkWl6SwmVowfL9O2YR5gI2PE= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +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/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +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/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/adlio/schema v1.3.6 h1:k1/zc2jNfeiZBA5aFTRy37jlBIuCkXCm0XmvpzCKI9I= +github.com/adlio/schema v1.3.6/go.mod h1:qkxwLgPBd1FgLRHYVCmQT/rrBr3JH38J9LjmVzWNudg= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +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/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/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +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/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/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.224 h1:09CiaaF35nRmxrzWZ2uRq5v6Ghg/d2RiPjZnSgtt+RQ= +github.com/aws/aws-sdk-go v1.44.224/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +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.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE51E= +github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bits-and-blooms/bitset v1.22.0 h1:Tquv9S8+SGaS3EhyA+up3FXzmkhxPGjQQCkcs2uw7w4= +github.com/bits-and-blooms/bitset v1.22.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +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/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= +github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= +github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw= +github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ= +github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY= +github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +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/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.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +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/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/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/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= +github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +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-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-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q6pvyM49i9XZAv9dDrkDA7gjk= +github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +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/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= +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/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw= +github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo= +github.com/cockroachdb/redact v1.1.6 h1:zXJBwDZ84xJNlHl1rMyCojqyIxv+7YUpQiJLQ7n4314= +github.com/cockroachdb/redact v1.1.6/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/cometbft/cometbft v0.38.17 h1:FkrQNbAjiFqXydeAO81FUzriL4Bz0abYxN/eOHrQGOk= +github.com/cometbft/cometbft v0.38.17/go.mod h1:5l0SkgeLRXi6bBfQuevXjKqML1jjfJJlvI1Ulp02/o4= +github.com/cometbft/cometbft-db v0.14.1 h1:SxoamPghqICBAIcGpleHbmoPqy+crij/++eZz3DlerQ= +github.com/cometbft/cometbft-db v0.14.1/go.mod h1:KHP1YghilyGV/xjD5DP3+2hyigWx0WTp9X+0Gnx0RxQ= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +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/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= +github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/cosmos-db v1.1.1 h1:FezFSU37AlBC8S98NlSagL76oqBRWq/prTPvFcEJNCM= +github.com/cosmos/cosmos-db v1.1.1/go.mod h1:AghjcIPqdhSLP/2Z0yha5xPH3nLnskz81pBx3tcVSAw= +github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= +github.com/cosmos/cosmos-sdk v0.53.0 h1:ZsB2tnBVudumV059oPuElcr0K1lLOutaI6WJ+osNTbI= +github.com/cosmos/cosmos-sdk v0.53.0/go.mod h1:UPcRyFwOUy2PfSFBWxBceO/HTjZOuBVqY583WyazIGs= +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.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro= +github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0= +github.com/cosmos/iavl v1.2.2 h1:qHhKW3I70w+04g5KdsdVSHRbFLgt3yY3qTMd4Xa4rC8= +github.com/cosmos/iavl v1.2.2/go.mod h1:GiM43q0pB+uG53mLxLDzimxM9l/5N9UuSY3/D0huuVw= +github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= +github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= +github.com/cosmos/ledger-cosmos-go v0.14.0 h1:WfCHricT3rPbkPSVKRH+L4fQGKYHuGOK9Edpel8TYpE= +github.com/cosmos/ledger-cosmos-go v0.14.0/go.mod h1:E07xCWSBl3mTGofZ2QnL4cIUzMbbGVyik84QYKbX3RA= +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.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +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/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= +github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= +github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= +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/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= +github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= +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 v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +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/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +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 v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= +github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +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/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= +github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +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.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.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= +github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= +github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +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.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +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= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +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/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.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= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-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-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-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= +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.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +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-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.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +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.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= +github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +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/pool v0.2.0/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/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +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= +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.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/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +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/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= +github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +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/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= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +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 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= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/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/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.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= +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= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +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/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/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= +github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= +github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +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-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/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= +github.com/google/uuid v1.0.0/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.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +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/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= +github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= +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= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +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/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.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= +github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= +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/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= +github.com/gorilla/mux v1.6.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.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +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.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +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/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/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +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.8 h1:mshVHx1Fto0/MydBekWan5zUipGq7jO0novchgMmSiY= +github.com/hashicorp/go-getter v1.7.8/go.mod h1:2c6CboOEb9jG6YvmC9xdD+tyAFsrUaJPedwXDGr0TM4= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.0.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-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6elejKY= +github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-plugin v1.6.3 h1:xgHB+ZUSYeuJi96WtxEjzi23uh7YQpznjGh0U0UUrwg= +github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +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-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-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +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 v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +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/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= +github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= +github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= +github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +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.1 h1:dTi93MgjwErA/8idWTzIw4Y1kZsMWx35fmI2c8Rij7w= +github.com/huandu/skiplist v1.2.1/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= +github.com/iancoleman/strcase v0.3.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.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.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= +github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +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/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +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= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +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/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/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +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/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.10.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.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= +github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +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.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.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/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/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +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/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= +github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= +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/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= +github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +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.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.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/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.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +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.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= +github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +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-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/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +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/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-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/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-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +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/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +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/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +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/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= +github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= +github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= +github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= +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/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +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.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +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/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.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= +github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= +github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +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/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +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 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +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/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +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 v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +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= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +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.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.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= +github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= +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.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.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.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/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/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +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.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= +github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= +github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= +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/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo= +github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= +github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +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.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +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.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= +github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= +github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= +github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= +github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= +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/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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +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= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +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= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +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/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/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= +github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +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/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/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +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.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= +github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= +github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 h1:qxen9oVGzDdIRP6ejyAJc760RwW4SnVDiTYTzwnXuxo= +go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5/go.mod h1:eW0HG9/oHQhvRCvb1/pIXW4cOvtDqeQK+XSi3TnwaXY= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +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= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +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/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/detectors/gcp v1.34.0 h1:JRxssobiPg23otYU5SbWtQC//snGVIM3Tx6QRzlQBao= +go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 h1:PS8wXpbyaDJQ2VDHHncMe9Vct0Zn1fEjpsjrLxGJoSc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0/go.mod h1:HDBUsEjOuRC0EzKZ1bSaRGZWUBAzo+MhAcUUORSr4D0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q= +go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= +go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= +go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= +go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= +go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= +go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= +go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= +go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= +go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +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/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= +go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= +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.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +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.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.15.0 h1:QtOrQd0bTUnhNVNndMpLHNWrDmYzZ2KDqSrEymqInZw= +golang.org/x/arch v0.15.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/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-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-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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +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.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +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= +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-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +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= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +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-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +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-20181026193005-c67002cb31c3/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= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +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/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.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.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +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.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +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-20181023162649-9b4f9f5ad519/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= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +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-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-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-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-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= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +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-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= +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-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-20211015210444-4f30a5c0130f/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-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-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.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +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.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/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-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= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +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-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= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +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.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.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= +golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +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-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= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +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-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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +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-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-20190726091711-fc99dfbffb4e/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-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-20191026070338-33540a1f6037/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-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-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-20200122134326-e047566fdf82/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-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= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/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-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/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-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-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-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/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-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-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= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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-20210908233432-aa78b53d3365/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-20211124211545-fe61309f8881/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-20220128215802-99c3d69c2c27/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-20220328115105-d36c6a25d886/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-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-20220704084225-05e143d24a9e/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-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-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= +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= +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.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= +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= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +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.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +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-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/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= +golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +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-20181030221726-6c7e314b6563/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-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/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-20190328211700-ab21143f2384/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-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-20190621195816-6e04913cbbac/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-20190816200558-6889da9d5479/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-20190927191325-030b2cf1153e/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-20191113191852-77e3bb0ad9e7/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-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-20200103221440-774c71fcf114/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-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-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= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/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-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-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-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +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-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= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +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.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +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.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +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= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +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/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.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-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +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.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.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.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= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +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.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= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +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.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +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= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +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.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= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +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/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.222.0 h1:Aiewy7BKLCuq6cUCeOUrsAlzjXPqBkEeQ/iwGHVQa/4= +google.golang.org/api v0.222.0/go.mod h1:efZia3nXpWELrwMlN5vyQrD4GmJN1Vw0x68Et3r+a9c= +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.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.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/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +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-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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +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-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-20200115191322-ca5a22157cba/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= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +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-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= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +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-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +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-20201109203340-2640f1f9cdfb/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= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +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-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/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= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +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= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +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-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= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +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-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= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +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-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-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-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-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk= +google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc= +google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 h1:hE3bRWtU6uceqlh4fhrSnUyjKHMKB9KrTLLG+bc0ddM= +google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250422160041-2d3770c4ea7f h1:N/PrbTw4kdkqNRzVfWPrBekzLuarFREcbFOiOLkXon4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250422160041-2d3770c4ea7f/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +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.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.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.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.42.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.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.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM= +google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= +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= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/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.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.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.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +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/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.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +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/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= +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.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-20210107192922-496545a6307b/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/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= +gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +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/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/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.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.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/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= +pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= +pgregory.net/rapid v1.2.0/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= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/vendor-shims/cosmossdk-x-upgrade/internal/conv/doc.go b/vendor-shims/cosmossdk-x-upgrade/internal/conv/doc.go new file mode 100644 index 00000000..1c86f5c1 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/internal/conv/doc.go @@ -0,0 +1,2 @@ +// Package conv provides internal functions for convertions and data manipulation +package conv diff --git a/vendor-shims/cosmossdk-x-upgrade/internal/conv/string.go b/vendor-shims/cosmossdk-x-upgrade/internal/conv/string.go new file mode 100644 index 00000000..f7833405 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/internal/conv/string.go @@ -0,0 +1,11 @@ +package conv + +import ( + "unsafe" +) + +// UnsafeStrToBytes uses unsafe to convert string into byte array. Returned bytes +// must not be altered after this function is called as it will cause a segmentation fault. +func UnsafeStrToBytes(s string) []byte { + return unsafe.Slice(unsafe.StringData(s), len(s)) // ref https://github.com/golang/go/issues/53003#issuecomment-1140276077 +} diff --git a/vendor-shims/cosmossdk-x-upgrade/internal/conv/string_test.go b/vendor-shims/cosmossdk-x-upgrade/internal/conv/string_test.go new file mode 100644 index 00000000..dfaaa038 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/internal/conv/string_test.go @@ -0,0 +1,39 @@ +package conv + +import ( + "runtime" + "strconv" + "testing" + "time" + + "github.com/stretchr/testify/suite" +) + +func TestStringSuite(t *testing.T) { + suite.Run(t, new(StringSuite)) +} + +type StringSuite struct{ suite.Suite } + +func unsafeConvertStr() []byte { + return UnsafeStrToBytes("abc") +} + +func (s *StringSuite) TestUnsafeStrToBytes() { + // we convert in other function to trigger GC. We want to check that + // the underlying array in []bytes is accessible after GC will finish swapping. + for i := 0; i < 5; i++ { + b := unsafeConvertStr() + runtime.GC() + <-time.NewTimer(2 * time.Millisecond).C + b2 := append(b, 'd') + s.Equal("abc", string(b)) + s.Equal("abcd", string(b2)) + } +} + +func BenchmarkUnsafeStrToBytes(b *testing.B) { + for i := 0; i < b.N; i++ { + UnsafeStrToBytes(strconv.Itoa(i)) + } +} diff --git a/vendor-shims/cosmossdk-x-upgrade/keeper/grpc_query.go b/vendor-shims/cosmossdk-x-upgrade/keeper/grpc_query.go new file mode 100644 index 00000000..d3502372 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/keeper/grpc_query.go @@ -0,0 +1,89 @@ +package keeper + +import ( + "context" + "errors" + + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/x/upgrade/types" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var _ types.QueryServer = Keeper{} + +// CurrentPlan implements the Query/CurrentPlan gRPC method +func (k Keeper) CurrentPlan(c context.Context, req *types.QueryCurrentPlanRequest) (*types.QueryCurrentPlanResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + + plan, err := k.GetUpgradePlan(ctx) + if err != nil { + if errors.Is(err, types.ErrNoUpgradePlanFound) { + return &types.QueryCurrentPlanResponse{}, nil + } + + return nil, err + } + + return &types.QueryCurrentPlanResponse{Plan: &plan}, nil +} + +// AppliedPlan implements the Query/AppliedPlan gRPC method +func (k Keeper) AppliedPlan(c context.Context, req *types.QueryAppliedPlanRequest) (*types.QueryAppliedPlanResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + + applied, err := k.GetDoneHeight(ctx, req.Name) + + return &types.QueryAppliedPlanResponse{Height: applied}, err +} + +// UpgradedConsensusState implements the Query/UpgradedConsensusState gRPC method +func (k Keeper) UpgradedConsensusState(c context.Context, req *types.QueryUpgradedConsensusStateRequest) (*types.QueryUpgradedConsensusStateResponse, error) { //nolint:staticcheck // we're using a deprecated call for compatibility + ctx := sdk.UnwrapSDKContext(c) + + consState, err := k.GetUpgradedConsensusState(ctx, req.LastHeight) + if err != nil { + if errors.Is(err, types.ErrNoUpgradedConsensusStateFound) { + return &types.QueryUpgradedConsensusStateResponse{}, nil //nolint:staticcheck // we're using a deprecated call for compatibility + } + + return nil, err + } + + return &types.QueryUpgradedConsensusStateResponse{ //nolint:staticcheck // we're using a deprecated call for compatibility + UpgradedConsensusState: consState, + }, nil +} + +// ModuleVersions implements the Query/QueryModuleVersions gRPC method +func (k Keeper) ModuleVersions(c context.Context, req *types.QueryModuleVersionsRequest) (*types.QueryModuleVersionsResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + + // check if a specific module was requested + if len(req.ModuleName) > 0 { + version, err := k.getModuleVersion(ctx, req.ModuleName) + if err != nil { + // module requested, but not found or error happened + return nil, errorsmod.Wrapf(err, "x/upgrade: QueryModuleVersions module %s not found", req.ModuleName) + } + + // return the requested module + res := []*types.ModuleVersion{{Name: req.ModuleName, Version: version}} + return &types.QueryModuleVersionsResponse{ModuleVersions: res}, nil + } + + // if no module requested return all module versions from state + mv, err := k.GetModuleVersions(ctx) + if err != nil { + return nil, err + } + + return &types.QueryModuleVersionsResponse{ + ModuleVersions: mv, + }, nil +} + +// Authority implements the Query/Authority gRPC method, returning the account capable of performing upgrades +func (k Keeper) Authority(c context.Context, req *types.QueryAuthorityRequest) (*types.QueryAuthorityResponse, error) { + return &types.QueryAuthorityResponse{Address: k.authority}, nil +} diff --git a/vendor-shims/cosmossdk-x-upgrade/keeper/grpc_query_test.go b/vendor-shims/cosmossdk-x-upgrade/keeper/grpc_query_test.go new file mode 100644 index 00000000..276d385f --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/keeper/grpc_query_test.go @@ -0,0 +1,236 @@ +package keeper_test + +import ( + "context" + "fmt" + "testing" + + "github.com/stretchr/testify/suite" + + "cosmossdk.io/core/header" + storetypes "cosmossdk.io/store/types" + "cosmossdk.io/x/upgrade" + "cosmossdk.io/x/upgrade/keeper" + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/runtime" + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" +) + +type UpgradeTestSuite struct { + suite.Suite + + upgradeKeeper *keeper.Keeper + ctx sdk.Context + queryClient types.QueryClient + encCfg moduletestutil.TestEncodingConfig +} + +func (suite *UpgradeTestSuite) SetupTest() { + suite.encCfg = moduletestutil.MakeTestEncodingConfig(upgrade.AppModuleBasic{}) + key := storetypes.NewKVStoreKey(types.StoreKey) + storeService := runtime.NewKVStoreService(key) + testCtx := testutil.DefaultContextWithDB(suite.T(), key, storetypes.NewTransientStoreKey("transient_test")) + suite.ctx = testCtx.Ctx + + skipUpgradeHeights := make(map[int64]bool) + + suite.upgradeKeeper = keeper.NewKeeper(skipUpgradeHeights, storeService, suite.encCfg.Codec, suite.T().TempDir(), nil, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + suite.Require().NoError(suite.upgradeKeeper.SetModuleVersionMap(suite.ctx, module.VersionMap{ + "bank": 0, + })) + + queryHelper := baseapp.NewQueryServerTestHelper(testCtx.Ctx, suite.encCfg.InterfaceRegistry) + types.RegisterQueryServer(queryHelper, suite.upgradeKeeper) + suite.queryClient = types.NewQueryClient(queryHelper) +} + +func (suite *UpgradeTestSuite) TestQueryCurrentPlan() { + var ( + req *types.QueryCurrentPlanRequest + expResponse types.QueryCurrentPlanResponse + ) + + testCases := []struct { + msg string + malleate func() + expPass bool + }{ + { + "without current upgrade plan", + func() { + req = &types.QueryCurrentPlanRequest{} + expResponse = types.QueryCurrentPlanResponse{} + }, + true, + }, + { + "with current upgrade plan", + func() { + plan := types.Plan{Name: "test-plan", Height: 5} + suite.Require().NoError(suite.upgradeKeeper.ScheduleUpgrade(suite.ctx, plan)) + + req = &types.QueryCurrentPlanRequest{} + expResponse = types.QueryCurrentPlanResponse{Plan: &plan} + }, + true, + }, + } + + for _, tc := range testCases { + suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { + suite.SetupTest() // reset + + tc.malleate() + + res, err := suite.queryClient.CurrentPlan(context.Background(), req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + suite.Require().Equal(&expResponse, res) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *UpgradeTestSuite) TestAppliedCurrentPlan() { + var ( + req *types.QueryAppliedPlanRequest + expHeight int64 + ) + + testCases := []struct { + msg string + malleate func() + expPass bool + }{ + { + "with non-existent upgrade plan", + func() { + req = &types.QueryAppliedPlanRequest{Name: "foo"} + }, + true, + }, + { + "with applied upgrade plan", + func() { + expHeight = 5 + + planName := "test-plan" + plan := types.Plan{Name: planName, Height: expHeight} + suite.Require().NoError(suite.upgradeKeeper.ScheduleUpgrade(suite.ctx, plan)) + + suite.ctx = suite.ctx.WithHeaderInfo(header.Info{Height: expHeight}) + suite.upgradeKeeper.SetUpgradeHandler(planName, func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + suite.Require().NoError(suite.upgradeKeeper.ApplyUpgrade(suite.ctx, plan)) + + req = &types.QueryAppliedPlanRequest{Name: planName} + }, + true, + }, + } + + for _, tc := range testCases { + suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { + suite.SetupTest() // reset + + tc.malleate() + + res, err := suite.queryClient.AppliedPlan(context.Background(), req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + suite.Require().Equal(expHeight, res.Height) + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *UpgradeTestSuite) TestModuleVersions() { + testCases := []struct { + msg string + req types.QueryModuleVersionsRequest + single bool + expPass bool + }{ + { + msg: "test full query", + req: types.QueryModuleVersionsRequest{}, + single: false, + expPass: true, + }, + { + msg: "test single module", + req: types.QueryModuleVersionsRequest{ModuleName: "bank"}, + single: true, + expPass: true, + }, + { + msg: "test non-existent module", + req: types.QueryModuleVersionsRequest{ModuleName: "abcdefg"}, + single: true, + expPass: false, + }, + } + + vm, err := suite.upgradeKeeper.GetModuleVersionMap(suite.ctx) + suite.Require().NoError(err) + + mv, err := suite.upgradeKeeper.GetModuleVersions(suite.ctx) + suite.Require().NoError(err) + + for _, tc := range testCases { + suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { + suite.SetupTest() // reset + + res, err := suite.queryClient.ModuleVersions(context.Background(), &tc.req) + + if tc.expPass { + suite.Require().NoError(err) + suite.Require().NotNil(res) + + if tc.single { + // test that the single module response is valid + suite.Require().Len(res.ModuleVersions, 1) + // make sure we got the right values + suite.Require().Equal(vm[tc.req.ModuleName], res.ModuleVersions[0].Version) + suite.Require().Equal(tc.req.ModuleName, res.ModuleVersions[0].Name) + } else { + // check that the full response is valid + suite.Require().NotEmpty(res.ModuleVersions) + suite.Require().Equal(len(mv), len(res.ModuleVersions)) + for i, v := range res.ModuleVersions { + suite.Require().Equal(mv[i].Version, v.Version) + suite.Require().Equal(mv[i].Name, v.Name) + } + } + } else { + suite.Require().Error(err) + } + }) + } +} + +func (suite *UpgradeTestSuite) TestAuthority() { + res, err := suite.queryClient.Authority(context.Background(), &types.QueryAuthorityRequest{}) + suite.Require().NoError(err) + suite.Require().Equal(authtypes.NewModuleAddress(govtypes.ModuleName).String(), res.Address) +} + +func TestUpgradeTestSuite(t *testing.T) { + suite.Run(t, new(UpgradeTestSuite)) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/keeper/keeper.go b/vendor-shims/cosmossdk-x-upgrade/keeper/keeper.go new file mode 100644 index 00000000..b06aba7d --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/keeper/keeper.go @@ -0,0 +1,585 @@ +package keeper + +import ( + "context" + "encoding/binary" + "encoding/json" + "errors" + "fmt" + "os" + "path/filepath" + "sort" + "strconv" + + "github.com/hashicorp/go-metrics" + + corestore "cosmossdk.io/core/store" + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/log" + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + xp "cosmossdk.io/x/upgrade/exported" + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/runtime" + "github.com/cosmos/cosmos-sdk/telemetry" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/kv" + "github.com/cosmos/cosmos-sdk/types/module" +) + +// Deprecated: UpgradeInfoFileName file to store upgrade information +// use x/upgrade/types.UpgradeInfoFilename instead. +const UpgradeInfoFileName string = "upgrade-info.json" + +type Keeper struct { + homePath string // root directory of app config + skipUpgradeHeights map[int64]bool // map of heights to skip for an upgrade + storeService corestore.KVStoreService // key to access x/upgrade store + cdc codec.BinaryCodec // App-wide binary codec + upgradeHandlers map[string]types.UpgradeHandler // map of plan name to upgrade handler + versionSetter xp.ProtocolVersionSetter // implements setting the protocol version field on BaseApp + downgradeVerified bool // tells if we've already sanity checked that this binary version isn't being used against an old state. + authority string // the address capable of executing and canceling an upgrade. Usually the gov module account + initVersionMap module.VersionMap // the module version map at init genesis +} + +// NewKeeper constructs an upgrade Keeper which requires the following arguments: +// skipUpgradeHeights - map of heights to skip an upgrade +// storeKey - a store key with which to access upgrade's store +// cdc - the app-wide binary codec +// homePath - root directory of the application's config +// vs - the interface implemented by baseapp which allows setting baseapp's protocol version field +func NewKeeper(skipUpgradeHeights map[int64]bool, storeService corestore.KVStoreService, cdc codec.BinaryCodec, homePath string, vs xp.ProtocolVersionSetter, authority string) *Keeper { + k := &Keeper{ + homePath: homePath, + skipUpgradeHeights: skipUpgradeHeights, + storeService: storeService, + cdc: cdc, + upgradeHandlers: map[string]types.UpgradeHandler{}, + versionSetter: vs, + authority: authority, + } + + return k +} + +// SetVersionSetter sets the interface implemented by baseapp which allows setting baseapp's protocol version field +func (k *Keeper) SetVersionSetter(vs xp.ProtocolVersionSetter) { + k.versionSetter = vs +} + +// GetVersionSetter gets the protocol version field of baseapp +func (k *Keeper) GetVersionSetter() xp.ProtocolVersionSetter { + return k.versionSetter +} + +// SetInitVersionMap sets the initial version map. +// This is only used in app wiring and should not be used in any other context. +func (k *Keeper) SetInitVersionMap(vm module.VersionMap) { + k.initVersionMap = vm +} + +// GetInitVersionMap gets the initial version map +// This is only used in upgrade InitGenesis and should not be used in any other context. +func (k *Keeper) GetInitVersionMap() module.VersionMap { + return k.initVersionMap +} + +// SetUpgradeHandler sets an UpgradeHandler for the upgrade specified by name. This handler will be called when the upgrade +// with this name is applied. In order for an upgrade with the given name to proceed, a handler for this upgrade +// must be set even if it is a no-op function. +func (k Keeper) SetUpgradeHandler(name string, upgradeHandler types.UpgradeHandler) { + k.upgradeHandlers[name] = upgradeHandler +} + +// setProtocolVersion sets the protocol version to state +func (k Keeper) setProtocolVersion(ctx context.Context, v uint64) error { + store := k.storeService.OpenKVStore(ctx) + versionBytes := make([]byte, 8) + binary.BigEndian.PutUint64(versionBytes, v) + return store.Set([]byte{types.ProtocolVersionByte}, versionBytes) +} + +// getProtocolVersion gets the protocol version from state +func (k Keeper) getProtocolVersion(ctx context.Context) (uint64, error) { + store := k.storeService.OpenKVStore(ctx) + ok, err := store.Has([]byte{types.ProtocolVersionByte}) + if err != nil { + return 0, err + } + + if ok { + pvBytes, err := store.Get([]byte{types.ProtocolVersionByte}) + if err != nil { + return 0, err + } + + protocolVersion := binary.BigEndian.Uint64(pvBytes) + return protocolVersion, nil + } + // default value + return 0, nil +} + +// SetModuleVersionMap saves a given version map to state +func (k Keeper) SetModuleVersionMap(ctx context.Context, vm module.VersionMap) error { + if len(vm) > 0 { + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + versionStore := prefix.NewStore(store, []byte{types.VersionMapByte}) + // Even though the underlying store (cachekv) store is sorted, we still + // prefer a deterministic iteration order of the map, to avoid undesired + // surprises if we ever change stores. + sortedModNames := make([]string, 0, len(vm)) + + for key := range vm { + sortedModNames = append(sortedModNames, key) + } + sort.Strings(sortedModNames) + + for _, modName := range sortedModNames { + ver := vm[modName] + nameBytes := []byte(modName) + verBytes := make([]byte, 8) + binary.BigEndian.PutUint64(verBytes, ver) + versionStore.Set(nameBytes, verBytes) + } + } + + return nil +} + +// GetModuleVersionMap returns a map of key module name and value module consensus version +// as defined in ADR-041. +func (k Keeper) GetModuleVersionMap(ctx context.Context) (module.VersionMap, error) { + store := k.storeService.OpenKVStore(ctx) + prefix := []byte{types.VersionMapByte} + it, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) + if err != nil { + return nil, err + } + defer it.Close() + + vm := make(module.VersionMap) + for ; it.Valid(); it.Next() { + moduleBytes := it.Key() + // first byte is prefix key, so we remove it here + name := string(moduleBytes[1:]) + moduleVersion := binary.BigEndian.Uint64(it.Value()) + vm[name] = moduleVersion + } + + return vm, nil +} + +// GetModuleVersions gets a slice of module consensus versions +func (k Keeper) GetModuleVersions(ctx context.Context) ([]*types.ModuleVersion, error) { + store := k.storeService.OpenKVStore(ctx) + prefix := []byte{types.VersionMapByte} + it, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) + if err != nil { + return nil, err + } + defer it.Close() + + mv := make([]*types.ModuleVersion, 0) + for ; it.Valid(); it.Next() { + moduleBytes := it.Key() + name := string(moduleBytes[1:]) + moduleVersion := binary.BigEndian.Uint64(it.Value()) + mv = append(mv, &types.ModuleVersion{ + Name: name, + Version: moduleVersion, + }) + } + + return mv, nil +} + +// getModuleVersion gets the version for a given module. If it doesn't exist it returns ErrNoModuleVersionFound, other +// errors may be returned if there is an error reading from the store. +func (k Keeper) getModuleVersion(ctx context.Context, name string) (uint64, error) { + store := k.storeService.OpenKVStore(ctx) + prefix := []byte{types.VersionMapByte} + it, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) + if err != nil { + return 0, err + } + defer it.Close() + + for ; it.Valid(); it.Next() { + moduleName := string(it.Key()[1:]) + if moduleName == name { + version := binary.BigEndian.Uint64(it.Value()) + return version, nil + } + } + + return 0, types.ErrNoModuleVersionFound +} + +// ScheduleUpgrade schedules an upgrade based on the specified plan. +// If there is another Plan already scheduled, it will cancel and overwrite it. +// ScheduleUpgrade will also write the upgraded IBC ClientState to the upgraded client +// path if it is specified in the plan. +func (k Keeper) ScheduleUpgrade(ctx context.Context, plan types.Plan) error { + if err := plan.ValidateBasic(); err != nil { + return err + } + + // NOTE: allow for the possibility of chains to schedule upgrades in begin block of the same block + // as a strategy for emergency hard fork recoveries + sdkCtx := sdk.UnwrapSDKContext(ctx) + if plan.Height < sdkCtx.HeaderInfo().Height { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "upgrade cannot be scheduled in the past") + } + + doneHeight, err := k.GetDoneHeight(ctx, plan.Name) + if err != nil { + return err + } + + if doneHeight != 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "upgrade with name %s has already been completed", plan.Name) + } + + store := k.storeService.OpenKVStore(ctx) + + // clear any old IBC state stored by previous plan + oldPlan, err := k.GetUpgradePlan(ctx) + // if there's an error but it's not ErrNoUpgradePlanFound, return error + if err != nil && !errors.Is(err, types.ErrNoUpgradePlanFound) { + return err + } + + if err == nil { + err = k.ClearIBCState(ctx, oldPlan.Height) + if err != nil { + return err + } + } + + bz, err := k.cdc.Marshal(&plan) + if err != nil { + return err + } + + err = store.Set(types.PlanKey(), bz) + if err != nil { + return err + } + + telemetry.SetGaugeWithLabels([]string{"server", "info"}, 1, []metrics.Label{telemetry.NewLabel("upgrade_height", strconv.FormatInt(plan.Height, 10))}) + + return nil +} + +// SetUpgradedClient sets the expected upgraded client for the next version of this chain at the last height the current chain will commit. +func (k Keeper) SetUpgradedClient(ctx context.Context, planHeight int64, bz []byte) error { + store := k.storeService.OpenKVStore(ctx) + return store.Set(types.UpgradedClientKey(planHeight), bz) +} + +// GetUpgradedClient gets the expected upgraded client for the next version of this chain. If not found it returns +// ErrNoUpgradedClientFound, but other errors may be returned if there is an error reading from the store. +func (k Keeper) GetUpgradedClient(ctx context.Context, height int64) ([]byte, error) { + store := k.storeService.OpenKVStore(ctx) + bz, err := store.Get(types.UpgradedClientKey(height)) + if err != nil { + return nil, err + } + + if bz == nil { + return nil, types.ErrNoUpgradedClientFound + } + + return bz, nil +} + +// SetUpgradedConsensusState sets the expected upgraded consensus state for the next version of this chain +// using the last height committed on this chain. +func (k Keeper) SetUpgradedConsensusState(ctx context.Context, planHeight int64, bz []byte) error { + store := k.storeService.OpenKVStore(ctx) + return store.Set(types.UpgradedConsStateKey(planHeight), bz) +} + +// GetUpgradedConsensusState gets the expected upgraded consensus state for the next version of this chain. If not found +// it returns ErrNoUpgradedConsensusStateFound, but other errors may be returned if there is an error reading from the store. +func (k Keeper) GetUpgradedConsensusState(ctx context.Context, lastHeight int64) ([]byte, error) { + store := k.storeService.OpenKVStore(ctx) + bz, err := store.Get(types.UpgradedConsStateKey(lastHeight)) + if err != nil { + return nil, err + } + + if bz == nil { + return nil, types.ErrNoUpgradedConsensusStateFound + } + + return bz, nil +} + +// GetLastCompletedUpgrade returns the last applied upgrade name and height. +func (k Keeper) GetLastCompletedUpgrade(ctx context.Context) (string, int64, error) { + store := k.storeService.OpenKVStore(ctx) + prefix := []byte{types.DoneByte} + it, err := store.ReverseIterator(prefix, storetypes.PrefixEndBytes(prefix)) + if err != nil { + return "", 0, err + } + defer it.Close() + + if it.Valid() { + name, height := parseDoneKey(it.Key()) + return name, height, nil + } + + return "", 0, nil +} + +// parseDoneKey - split upgrade name and height from the done key +func parseDoneKey(key []byte) (string, int64) { + // 1 byte for the DoneByte + 8 bytes height + at least 1 byte for the name + kv.AssertKeyAtLeastLength(key, 10) + height := binary.BigEndian.Uint64(key[1:9]) + return string(key[9:]), int64(height) +} + +// encodeDoneKey - concatenate DoneByte, height and upgrade name to form the done key +func encodeDoneKey(name string, height int64) []byte { + key := make([]byte, 9+len(name)) // 9 = donebyte + uint64 len + key[0] = types.DoneByte + binary.BigEndian.PutUint64(key[1:9], uint64(height)) + copy(key[9:], name) + return key +} + +// GetDoneHeight returns the height at which the given upgrade was executed +func (k Keeper) GetDoneHeight(ctx context.Context, name string) (int64, error) { + store := k.storeService.OpenKVStore(ctx) + prefix := []byte{types.DoneByte} + it, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) + if err != nil { + return 0, err + } + defer it.Close() + + for ; it.Valid(); it.Next() { + upgradeName, height := parseDoneKey(it.Key()) + if upgradeName == name { + return height, nil + } + } + + return 0, nil +} + +// ClearIBCState clears any planned IBC state +func (k Keeper) ClearIBCState(ctx context.Context, lastHeight int64) error { + // delete IBC client and consensus state from store if this is IBC plan + store := k.storeService.OpenKVStore(ctx) + err := store.Delete(types.UpgradedClientKey(lastHeight)) + if err != nil { + return err + } + + return store.Delete(types.UpgradedConsStateKey(lastHeight)) +} + +// ClearUpgradePlan clears any schedule upgrade and associated IBC states. +func (k Keeper) ClearUpgradePlan(ctx context.Context) error { + // clear IBC states every time upgrade plan is removed + oldPlan, err := k.GetUpgradePlan(ctx) + if err != nil { + // if there's no upgrade plan, return nil to match previous behavior + if errors.Is(err, types.ErrNoUpgradePlanFound) { + return nil + } + return err + } + + err = k.ClearIBCState(ctx, oldPlan.Height) + if err != nil { + return err + } + + store := k.storeService.OpenKVStore(ctx) + return store.Delete(types.PlanKey()) +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger(ctx context.Context) log.Logger { + sdkCtx := sdk.UnwrapSDKContext(ctx) + return sdkCtx.Logger().With("module", "x/"+types.ModuleName) +} + +// GetUpgradePlan returns the currently scheduled Plan if any. If not found it returns +// ErrNoUpgradePlanFound, but other errors may be returned if there is an error reading from the store. +func (k Keeper) GetUpgradePlan(ctx context.Context) (plan types.Plan, err error) { + store := k.storeService.OpenKVStore(ctx) + bz, err := store.Get(types.PlanKey()) + if err != nil { + return plan, err + } + + if bz == nil { + return plan, types.ErrNoUpgradePlanFound + } + + err = k.cdc.Unmarshal(bz, &plan) + if err != nil { + return plan, err + } + + return plan, err +} + +// setDone marks this upgrade name as being done so the name can't be reused accidentally +func (k Keeper) setDone(ctx context.Context, name string) error { + store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + return store.Set(encodeDoneKey(name, sdkCtx.HeaderInfo().Height), []byte{1}) +} + +// HasHandler returns true iff there is a handler registered for this name +func (k Keeper) HasHandler(name string) bool { + _, ok := k.upgradeHandlers[name] + return ok +} + +// ApplyUpgrade will execute the handler associated with the Plan and mark the plan as done. +func (k Keeper) ApplyUpgrade(ctx context.Context, plan types.Plan) error { + handler := k.upgradeHandlers[plan.Name] + if handler == nil { + return fmt.Errorf("ApplyUpgrade should never be called without first checking HasHandler") + } + + vm, err := k.GetModuleVersionMap(ctx) + if err != nil { + return err + } + + updatedVM, err := handler(ctx, plan, vm) + if err != nil { + return err + } + + err = k.SetModuleVersionMap(ctx, updatedVM) + if err != nil { + return err + } + + // incremement the protocol version and set it in state and baseapp + nextProtocolVersion, err := k.getProtocolVersion(ctx) + if err != nil { + return err + } + nextProtocolVersion++ + err = k.setProtocolVersion(ctx, nextProtocolVersion) + if err != nil { + return err + } + + if k.versionSetter != nil { + // set protocol version on BaseApp + k.versionSetter.SetProtocolVersion(nextProtocolVersion) + } + + // Must clear IBC state after upgrade is applied as it is stored separately from the upgrade plan. + // This will prevent resubmission of upgrade msg after upgrade is already completed. + err = k.ClearIBCState(ctx, plan.Height) + if err != nil { + return err + } + + err = k.ClearUpgradePlan(ctx) + if err != nil { + return err + } + + return k.setDone(ctx, plan.Name) +} + +// IsSkipHeight checks if the given height is part of skipUpgradeHeights +func (k Keeper) IsSkipHeight(height int64) bool { + return k.skipUpgradeHeights[height] +} + +// DumpUpgradeInfoToDisk writes upgrade information to UpgradeInfoFileName. +func (k Keeper) DumpUpgradeInfoToDisk(height int64, p types.Plan) error { + upgradeInfoFilePath, err := k.GetUpgradeInfoPath() + if err != nil { + return err + } + + upgradeInfo := types.Plan{ + Name: p.Name, + Height: height, + Info: p.Info, + } + info, err := json.Marshal(upgradeInfo) + if err != nil { + return err + } + + return os.WriteFile(upgradeInfoFilePath, info, 0o600) +} + +// GetUpgradeInfoPath returns the upgrade info file path +func (k Keeper) GetUpgradeInfoPath() (string, error) { + upgradeInfoFileDir := filepath.Join(k.homePath, "data") + if err := os.MkdirAll(upgradeInfoFileDir, os.ModePerm); err != nil { + return "", fmt.Errorf("could not create directory %q: %w", upgradeInfoFileDir, err) + } + + return filepath.Join(upgradeInfoFileDir, types.UpgradeInfoFilename), nil +} + +// ReadUpgradeInfoFromDisk returns the name and height of the upgrade which is +// written to disk by the old binary when panicking. An error is returned if +// the upgrade path directory cannot be created or if the file exists and +// cannot be read or if the upgrade info fails to unmarshal. +func (k Keeper) ReadUpgradeInfoFromDisk() (types.Plan, error) { + var upgradeInfo types.Plan + + upgradeInfoPath, err := k.GetUpgradeInfoPath() + if err != nil { + return upgradeInfo, err + } + + data, err := os.ReadFile(upgradeInfoPath) + if err != nil { + // if file does not exist, assume there are no upgrades + if os.IsNotExist(err) { + return upgradeInfo, nil + } + + return upgradeInfo, err + } + + if err := json.Unmarshal(data, &upgradeInfo); err != nil { + return upgradeInfo, err + } + + if err := upgradeInfo.ValidateBasic(); err != nil { + return upgradeInfo, err + } + + if upgradeInfo.Height > 0 { + telemetry.SetGaugeWithLabels([]string{"server", "info"}, 1, []metrics.Label{telemetry.NewLabel("upgrade_height", strconv.FormatInt(upgradeInfo.Height, 10))}) + } + + return upgradeInfo, nil +} + +// SetDowngradeVerified updates downgradeVerified. +func (k *Keeper) SetDowngradeVerified(v bool) { + k.downgradeVerified = v +} + +// DowngradeVerified returns downgradeVerified. +func (k Keeper) DowngradeVerified() bool { + return k.downgradeVerified +} diff --git a/vendor-shims/cosmossdk-x-upgrade/keeper/keeper_test.go b/vendor-shims/cosmossdk-x-upgrade/keeper/keeper_test.go new file mode 100644 index 00000000..c92e12f0 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/keeper/keeper_test.go @@ -0,0 +1,390 @@ +package keeper_test + +import ( + "context" + "path/filepath" + "testing" + "time" + + "github.com/stretchr/testify/suite" + + "cosmossdk.io/core/header" + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + "cosmossdk.io/x/upgrade" + "cosmossdk.io/x/upgrade/keeper" + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/runtime" + "github.com/cosmos/cosmos-sdk/testutil" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" +) + +type KeeperTestSuite struct { + suite.Suite + + key *storetypes.KVStoreKey + baseApp *baseapp.BaseApp + upgradeKeeper *keeper.Keeper + homeDir string + ctx sdk.Context + msgSrvr types.MsgServer + addrs []sdk.AccAddress + encCfg moduletestutil.TestEncodingConfig +} + +func (s *KeeperTestSuite) SetupTest() { + s.encCfg = moduletestutil.MakeTestEncodingConfig(upgrade.AppModuleBasic{}) + key := storetypes.NewKVStoreKey(types.StoreKey) + storeService := runtime.NewKVStoreService(key) + s.key = key + testCtx := testutil.DefaultContextWithDB(s.T(), key, storetypes.NewTransientStoreKey("transient_test")) + + s.baseApp = baseapp.NewBaseApp( + "upgrade", + log.NewNopLogger(), + testCtx.DB, + s.encCfg.TxConfig.TxDecoder(), + ) + + skipUpgradeHeights := make(map[int64]bool) + + homeDir := filepath.Join(s.T().TempDir(), "x_upgrade_keeper_test") + s.upgradeKeeper = keeper.NewKeeper(skipUpgradeHeights, storeService, s.encCfg.Codec, homeDir, nil, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + s.upgradeKeeper.SetVersionSetter(s.baseApp) + + vs := s.upgradeKeeper.GetVersionSetter() + s.Require().Equal(vs, s.baseApp) + + s.Require().Equal(testCtx.Ctx.Logger().With("module", "x/"+types.ModuleName), s.upgradeKeeper.Logger(testCtx.Ctx)) + s.T().Log("home dir:", homeDir) + s.homeDir = homeDir + s.ctx = testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now(), Height: 10}) + + s.msgSrvr = keeper.NewMsgServerImpl(s.upgradeKeeper) + s.addrs = simtestutil.CreateIncrementalAccounts(1) +} + +func (s *KeeperTestSuite) TestReadUpgradeInfoFromDisk() { + // require no error when the upgrade info file does not exist + _, err := s.upgradeKeeper.ReadUpgradeInfoFromDisk() + s.Require().NoError(err) + + expected := types.Plan{ + Name: "test_upgrade", + Height: 100, + } + + // create an upgrade info file + s.Require().NoError(s.upgradeKeeper.DumpUpgradeInfoToDisk(101, expected)) + + ui, err := s.upgradeKeeper.ReadUpgradeInfoFromDisk() + s.Require().NoError(err) + expected.Height = 101 + s.Require().Equal(expected, ui) + + // create invalid upgrade plan (with empty name) + expected.Name = "" + s.Require().NoError(s.upgradeKeeper.DumpUpgradeInfoToDisk(101, expected)) + _, err = s.upgradeKeeper.ReadUpgradeInfoFromDisk() + s.Require().ErrorContains(err, "name cannot be empty: invalid request") +} + +func (s *KeeperTestSuite) TestScheduleUpgrade() { + cases := []struct { + name string + plan types.Plan + setup func() + expPass bool + }{ + { + name: "successful height schedule", + plan: types.Plan{ + Name: "all-good", + Info: "some text here", + Height: 123450000, + }, + setup: func() {}, + expPass: true, + }, + { + name: "successful overwrite", + plan: types.Plan{ + Name: "all-good", + Info: "some text here", + Height: 123450000, + }, + setup: func() { + s.Require().NoError(s.upgradeKeeper.ScheduleUpgrade(s.ctx, types.Plan{ + Name: "alt-good", + Info: "new text here", + Height: 543210000, + })) + }, + expPass: true, + }, + { + name: "unsuccessful schedule: invalid plan", + plan: types.Plan{ + Height: 123450000, + }, + setup: func() {}, + expPass: false, + }, + { + name: "unsuccessful height schedule: due date in past", + plan: types.Plan{ + Name: "all-good", + Info: "some text here", + Height: 1, + }, + setup: func() {}, + expPass: false, + }, + { + name: "unsuccessful schedule: schedule already executed", + plan: types.Plan{ + Name: "all-good", + Info: "some text here", + Height: 123450000, + }, + setup: func() { + s.upgradeKeeper.SetUpgradeHandler("all-good", func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + s.Require().NoError(s.upgradeKeeper.ApplyUpgrade(s.ctx, types.Plan{ + Name: "all-good", + Info: "some text here", + Height: 123450000, + })) + }, + expPass: false, + }, + } + + for _, tc := range cases { + s.Run(tc.name, func() { + // reset suite + s.SetupTest() + + // setup test case + tc.setup() + + err := s.upgradeKeeper.ScheduleUpgrade(s.ctx, tc.plan) + + if tc.expPass { + s.Require().NoError(err, "valid test case failed") + } else { + s.Require().Error(err, "invalid test case passed") + } + }) + } +} + +func (s *KeeperTestSuite) TestSetUpgradedClient() { + cs := []byte("IBC client state") + + cases := []struct { + name string + height int64 + setup func() + exists bool + }{ + { + name: "no upgraded client exists", + height: 10, + setup: func() {}, + exists: false, + }, + { + name: "success", + height: 10, + setup: func() { + s.Require().NoError(s.upgradeKeeper.SetUpgradedClient(s.ctx, 10, cs)) + }, + exists: true, + }, + } + + for _, tc := range cases { + // reset suite + s.SetupTest() + + // setup test case + tc.setup() + + gotCs, err := s.upgradeKeeper.GetUpgradedClient(s.ctx, tc.height) + + if tc.exists { + s.Require().Equal(cs, gotCs, "valid case: %s did not retrieve correct client state", tc.name) + s.Require().NoError(err, "valid case: %s did not retrieve client state", tc.name) + } else { + s.Require().Nil(gotCs, "invalid case: %s retrieved valid client state", tc.name) + s.Require().Error(err, "invalid case: %s retrieved valid client state", tc.name) + } + } +} + +func (s *KeeperTestSuite) TestIsSkipHeight() { + var skipOne int64 = 9 + ok := s.upgradeKeeper.IsSkipHeight(11) + s.Require().False(ok) + skip := map[int64]bool{skipOne: true} + storeService := runtime.NewKVStoreService(s.key) + upgradeKeeper := keeper.NewKeeper(skip, storeService, s.encCfg.Codec, s.T().TempDir(), nil, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + upgradeKeeper.SetVersionSetter(s.baseApp) + s.Require().True(upgradeKeeper.IsSkipHeight(9)) + s.Require().False(upgradeKeeper.IsSkipHeight(10)) +} + +func (s *KeeperTestSuite) TestUpgradedConsensusState() { + cs := []byte("IBC consensus state") + s.Require().NoError(s.upgradeKeeper.SetUpgradedConsensusState(s.ctx, 10, cs)) + bz, err := s.upgradeKeeper.GetUpgradedConsensusState(s.ctx, 10) + s.Require().Equal(cs, bz) + s.Require().NoError(err) +} + +func (s *KeeperTestSuite) TestDowngradeVerified() { + s.upgradeKeeper.SetDowngradeVerified(true) + ok := s.upgradeKeeper.DowngradeVerified() + s.Require().True(ok) +} + +// Test that the protocol version successfully increments after an +// upgrade and is successfully set on BaseApp's appVersion. +func (s *KeeperTestSuite) TestIncrementProtocolVersion() { + oldProtocolVersion := s.baseApp.AppVersion() + res := s.upgradeKeeper.HasHandler("dummy") + s.Require().False(res) + dummyPlan := types.Plan{ + Name: "dummy", + Info: "some text here", + Height: 100, + } + + err := s.upgradeKeeper.ApplyUpgrade(s.ctx, dummyPlan) + s.Require().EqualError(err, "ApplyUpgrade should never be called without first checking HasHandler") + + s.upgradeKeeper.SetUpgradeHandler("dummy", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { return vm, nil }) + s.Require().NoError(s.upgradeKeeper.ApplyUpgrade(s.ctx, dummyPlan)) + upgradedProtocolVersion := s.baseApp.AppVersion() + + s.Require().Equal(oldProtocolVersion+1, upgradedProtocolVersion) +} + +// Tests that the underlying state of x/upgrade is set correctly after +// an upgrade. +func (s *KeeperTestSuite) TestMigrations() { + initialVM := module.VersionMap{"bank": uint64(1)} + s.Require().NoError(s.upgradeKeeper.SetModuleVersionMap(s.ctx, initialVM)) + vmBefore, err := s.upgradeKeeper.GetModuleVersionMap(s.ctx) + s.Require().NoError(err) + + s.upgradeKeeper.SetUpgradeHandler("dummy", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + // simulate upgrading the bank module + vm["bank"]++ + return vm, nil + }) + dummyPlan := types.Plan{ + Name: "dummy", + Info: "some text here", + Height: 123450000, + } + + s.Require().NoError(s.upgradeKeeper.ApplyUpgrade(s.ctx, dummyPlan)) + vm, err := s.upgradeKeeper.GetModuleVersionMap(s.ctx) + s.Require().Equal(vmBefore["bank"]+1, vm["bank"]) + s.Require().NoError(err) +} + +func (s *KeeperTestSuite) TestLastCompletedUpgrade() { + keeper := s.upgradeKeeper + require := s.Require() + + s.T().Log("verify empty name if applied upgrades are empty") + name, height, err := keeper.GetLastCompletedUpgrade(s.ctx) + require.Equal("", name) + require.Equal(int64(0), height) + require.NoError(err) + + keeper.SetUpgradeHandler("test0", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + + s.Require().NoError(keeper.ApplyUpgrade(s.ctx, types.Plan{ + Name: "test0", + Height: 10, + })) + + s.T().Log("verify valid upgrade name and height") + name, height, err = keeper.GetLastCompletedUpgrade(s.ctx) + require.Equal("test0", name) + require.Equal(int64(10), height) + require.NoError(err) + + keeper.SetUpgradeHandler("test1", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + + newCtx := s.ctx.WithHeaderInfo(header.Info{Height: 15}) + s.Require().NoError(keeper.ApplyUpgrade(newCtx, types.Plan{ + Name: "test1", + Height: 15, + })) + + s.T().Log("verify valid upgrade name and height with multiple upgrades") + name, height, err = keeper.GetLastCompletedUpgrade(newCtx) + require.Equal("test1", name) + require.Equal(int64(15), height) + require.NoError(err) +} + +// This test ensures that `GetLastDoneUpgrade` always returns the last upgrade according to the block height +// it was executed at, rather than using an ordering based on upgrade names. +func (s *KeeperTestSuite) TestLastCompletedUpgradeOrdering() { + keeper := s.upgradeKeeper + require := s.Require() + + // apply first upgrade + keeper.SetUpgradeHandler("test-v0.9", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + + s.Require().NoError(keeper.ApplyUpgrade(s.ctx, types.Plan{ + Name: "test-v0.9", + Height: 10, + })) + + name, height, err := keeper.GetLastCompletedUpgrade(s.ctx) + require.Equal("test-v0.9", name) + require.Equal(int64(10), height) + require.NoError(err) + + // apply second upgrade + keeper.SetUpgradeHandler("test-v0.10", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + return vm, nil + }) + + newCtx := s.ctx.WithHeaderInfo(header.Info{Height: 15}) + err = keeper.ApplyUpgrade(newCtx, types.Plan{ + Name: "test-v0.10", + Height: 15, + }) + require.NoError(err) + + name, height, err = keeper.GetLastCompletedUpgrade(newCtx) + require.Equal("test-v0.10", name) + require.Equal(int64(15), height) + require.NoError(err) +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/keeper/migrations.go b/vendor-shims/cosmossdk-x-upgrade/keeper/migrations.go new file mode 100644 index 00000000..53ef4933 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/keeper/migrations.go @@ -0,0 +1,49 @@ +package keeper + +import ( + "encoding/binary" + + storetypes "cosmossdk.io/core/store" + "cosmossdk.io/store/prefix" + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + keeper *Keeper +} + +// NewMigrator returns a new Migrator. +func NewMigrator(keeper *Keeper) Migrator { + return Migrator{keeper: keeper} +} + +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return migrateDoneUpgradeKeys(ctx, m.keeper.storeService) +} + +func migrateDoneUpgradeKeys(ctx sdk.Context, storeService storetypes.KVStoreService) error { + store := storeService.OpenKVStore(ctx) + oldDoneStore := prefix.NewStore(runtime.KVStoreAdapter(store), []byte{types.DoneByte}) + oldDoneStoreIter := oldDoneStore.Iterator(nil, nil) + defer oldDoneStoreIter.Close() + + for ; oldDoneStoreIter.Valid(); oldDoneStoreIter.Next() { + oldKey := oldDoneStoreIter.Key() + upgradeName := string(oldKey) + upgradeHeight := int64(binary.BigEndian.Uint64(oldDoneStoreIter.Value())) + newKey := encodeDoneKey(upgradeName, upgradeHeight) + + err := store.Set(newKey, []byte{1}) + if err != nil { + return err + } + + oldDoneStore.Delete(oldKey) + } + return nil +} diff --git a/vendor-shims/cosmossdk-x-upgrade/keeper/migrations_test.go b/vendor-shims/cosmossdk-x-upgrade/keeper/migrations_test.go new file mode 100644 index 00000000..3f220ab8 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/keeper/migrations_test.go @@ -0,0 +1,68 @@ +package keeper + +import ( + "encoding/binary" + "testing" + + "github.com/stretchr/testify/require" + + storetypes "cosmossdk.io/store/types" + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/runtime" + "github.com/cosmos/cosmos-sdk/testutil" +) + +type storedUpgrade struct { + name string + height int64 +} + +func encodeOldDoneKey(upgrade storedUpgrade) []byte { + return append([]byte{types.DoneByte}, []byte(upgrade.name)...) +} + +func TestMigrateDoneUpgradeKeys(t *testing.T) { + upgradeKey := storetypes.NewKVStoreKey("upgrade") + storeService := runtime.NewKVStoreService(upgradeKey) + ctx := testutil.DefaultContext(upgradeKey, storetypes.NewTransientStoreKey("transient_test")) + store := storeService.OpenKVStore(ctx) + + testCases := []struct { + name string + upgrades []storedUpgrade + }{ + { + name: "valid upgrades", + upgrades: []storedUpgrade{ + {name: "some-other-upgrade", height: 1}, + {name: "test02", height: 2}, + {name: "test01", height: 3}, + }, + }, + } + + for _, tc := range testCases { + for _, upgrade := range tc.upgrades { + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, uint64(upgrade.height)) + oldKey := encodeOldDoneKey(upgrade) + require.NoError(t, store.Set(oldKey, bz)) + } + + err := migrateDoneUpgradeKeys(ctx, storeService) + require.NoError(t, err) + + for _, upgrade := range tc.upgrades { + newKey := encodeDoneKey(upgrade.name, upgrade.height) + oldKey := encodeOldDoneKey(upgrade) + v, err := store.Get(oldKey) + require.Nil(t, v) + require.NoError(t, err) + + nv, err := store.Get(newKey) + require.Equal(t, []byte{1}, nv) + require.NoError(t, err) + } + } +} diff --git a/vendor-shims/cosmossdk-x-upgrade/keeper/msg_server.go b/vendor-shims/cosmossdk-x-upgrade/keeper/msg_server.go new file mode 100644 index 00000000..b084011b --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/keeper/msg_server.go @@ -0,0 +1,56 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/errors" + "cosmossdk.io/x/upgrade/types" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type msgServer struct { + *Keeper +} + +// NewMsgServerImpl returns an implementation of the upgrade MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(k *Keeper) types.MsgServer { + return &msgServer{ + Keeper: k, + } +} + +var ( + _ types.MsgServer = msgServer{} + _, _ sdk.Msg = &types.MsgSoftwareUpgrade{}, &types.MsgCancelUpgrade{} +) + +// SoftwareUpgrade implements the Msg/SoftwareUpgrade Msg service. +func (k msgServer) SoftwareUpgrade(goCtx context.Context, msg *types.MsgSoftwareUpgrade) (*types.MsgSoftwareUpgradeResponse, error) { + if k.authority != msg.Authority { + return nil, errors.Wrapf(types.ErrInvalidSigner, "expected %s got %s", k.authority, msg.Authority) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + err := k.ScheduleUpgrade(ctx, msg.Plan) + if err != nil { + return nil, err + } + + return &types.MsgSoftwareUpgradeResponse{}, nil +} + +// CancelUpgrade implements the Msg/CancelUpgrade Msg service. +func (k msgServer) CancelUpgrade(ctx context.Context, msg *types.MsgCancelUpgrade) (*types.MsgCancelUpgradeResponse, error) { + if k.authority != msg.Authority { + return nil, errors.Wrapf(types.ErrInvalidSigner, "expected %s got %s", k.authority, msg.Authority) + } + + err := k.ClearUpgradePlan(ctx) + if err != nil { + return nil, err + } + + return &types.MsgCancelUpgradeResponse{}, nil +} diff --git a/vendor-shims/cosmossdk-x-upgrade/keeper/msg_server_test.go b/vendor-shims/cosmossdk-x-upgrade/keeper/msg_server_test.go new file mode 100644 index 00000000..f3197be3 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/keeper/msg_server_test.go @@ -0,0 +1,139 @@ +package keeper_test + +import ( + "cosmossdk.io/x/upgrade/types" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) + +func (s *KeeperTestSuite) TestSoftwareUpgrade() { + govAccAddr := sdk.AccAddress(address.Module("gov")).String() + + testCases := []struct { + name string + req *types.MsgSoftwareUpgrade + expectErr bool + errMsg string + }{ + { + "invalid authority address", + &types.MsgSoftwareUpgrade{ + Authority: "authority", + Plan: types.Plan{ + Name: "all-good", + Height: 123450000, + }, + }, + true, + "expected authority account as only signer for proposal message", + }, + { + "unauthorized authority address", + &types.MsgSoftwareUpgrade{ + Authority: s.addrs[0].String(), + Plan: types.Plan{ + Name: "all-good", + Info: "some text here", + Height: 123450000, + }, + }, + true, + "expected authority account as only signer for proposal message", + }, + { + "invalid plan", + &types.MsgSoftwareUpgrade{ + Authority: govAccAddr, + Plan: types.Plan{ + Height: 123450000, + }, + }, + true, + "name cannot be empty: invalid request", + }, + { + "successful upgrade scheduled", + &types.MsgSoftwareUpgrade{ + Authority: govAccAddr, + Plan: types.Plan{ + Name: "all-good", + Info: "some text here", + Height: 123450000, + }, + }, + false, + "", + }, + } + for _, tc := range testCases { + s.Run(tc.name, func() { + _, err := s.msgSrvr.SoftwareUpgrade(s.ctx, tc.req) + if tc.expectErr { + s.Require().Error(err) + s.Require().Contains(err.Error(), tc.errMsg) + } else { + s.Require().NoError(err) + plan, err := s.upgradeKeeper.GetUpgradePlan(s.ctx) + s.Require().NoError(err) + s.Require().Equal(tc.req.Plan, plan) + } + }) + } +} + +func (s *KeeperTestSuite) TestCancelUpgrade() { + govAccAddr := "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn" // TODO + // govAccAddr := s.govKeeper.GetGovernanceAccount(s.ctx).GetAddress().String() + err := s.upgradeKeeper.ScheduleUpgrade(s.ctx, types.Plan{ + Name: "some name", + Info: "some info", + Height: 123450000, + }) + s.Require().NoError(err) + + testCases := []struct { + name string + req *types.MsgCancelUpgrade + expectErr bool + errMsg string + }{ + { + "invalid authority address", + &types.MsgCancelUpgrade{ + Authority: "authority", + }, + true, + "expected authority account as only signer for proposal message", + }, + { + "unauthorized authority address", + &types.MsgCancelUpgrade{ + Authority: s.addrs[0].String(), + }, + true, + "expected authority account as only signer for proposal message", + }, + { + "upgrade canceled successfully", + &types.MsgCancelUpgrade{ + Authority: govAccAddr, + }, + false, + "", + }, + } + for _, tc := range testCases { + s.Run(tc.name, func() { + _, err := s.msgSrvr.CancelUpgrade(s.ctx, tc.req) + if tc.expectErr { + s.Require().Error(err) + s.Require().Contains(err.Error(), tc.errMsg) + } else { + s.Require().NoError(err) + _, err := s.upgradeKeeper.GetUpgradePlan(s.ctx) + s.Require().ErrorIs(err, types.ErrNoUpgradePlanFound) + } + }) + } +} diff --git a/vendor-shims/cosmossdk-x-upgrade/module.go b/vendor-shims/cosmossdk-x-upgrade/module.go new file mode 100644 index 00000000..13bffd19 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/module.go @@ -0,0 +1,238 @@ +package upgrade + +import ( + "context" + "encoding/json" + "fmt" + + gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cast" + "github.com/spf13/cobra" + "github.com/spf13/viper" + + modulev1 "cosmossdk.io/api/cosmos/upgrade/module/v1" + "cosmossdk.io/core/address" + "cosmossdk.io/core/appmodule" + "cosmossdk.io/core/store" + "cosmossdk.io/depinject" + "cosmossdk.io/x/upgrade/client/cli" + "cosmossdk.io/x/upgrade/keeper" + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/runtime" + "github.com/cosmos/cosmos-sdk/server" + servertypes "github.com/cosmos/cosmos-sdk/server/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" +) + +func init() { + types.RegisterLegacyAminoCodec(codec.NewLegacyAmino()) +} + +// ConsensusVersion defines the current x/upgrade module consensus version. +const ConsensusVersion uint64 = 2 + +var ( + _ module.AppModuleBasic = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} + + _ appmodule.AppModule = AppModule{} + _ appmodule.HasPreBlocker = AppModule{} +) + +// AppModuleBasic implements the sdk.AppModuleBasic interface +type AppModuleBasic struct { + ac address.Codec +} + +// Name returns the ModuleName +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the upgrade types on the LegacyAmino codec +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the upgrade module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *gwruntime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// GetTxCmd returns the CLI transaction commands for this module +func (ab AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.GetTxCmd(ab.ac) +} + +// RegisterInterfaces registers interfaces and implementations of the upgrade module. +func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { + types.RegisterInterfaces(registry) +} + +// DefaultGenesis is an empty object +func (AppModuleBasic) DefaultGenesis(_ codec.JSONCodec) json.RawMessage { + return []byte("{}") +} + +// ValidateGenesis is always successful, as we ignore the value +func (AppModuleBasic) ValidateGenesis(_ codec.JSONCodec, config client.TxEncodingConfig, _ json.RawMessage) error { + return nil +} + +// AppModule implements the sdk.AppModule interface +type AppModule struct { + AppModuleBasic + keeper *keeper.Keeper +} + +// NewAppModule creates a new AppModule object +func NewAppModule(keeper *keeper.Keeper, ac address.Codec) AppModule { + return AppModule{ + AppModuleBasic: AppModuleBasic{ac: ac}, + keeper: keeper, + } +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + + m := keeper.NewMigrator(am.keeper) + err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2) + if err != nil { + panic(fmt.Sprintf("failed to migrate x/%s from version 1 to 2: %v", types.ModuleName, err)) + } +} + +// InitGenesis is ignored, no sense in serializing future upgrades +func (am AppModule) InitGenesis(ctx sdk.Context, _ codec.JSONCodec, _ json.RawMessage) { + // set version map automatically if available + if versionMap := am.keeper.GetInitVersionMap(); versionMap != nil { + // chains can still use a custom init chainer for setting the version map + // this means that we need to combine the manually wired modules version map with app wiring enabled modules version map + moduleVM, err := am.keeper.GetModuleVersionMap(ctx) + if err != nil { + panic(err) + } + + for name, version := range moduleVM { + if _, ok := versionMap[name]; !ok { + versionMap[name] = version + } + } + + err = am.keeper.SetModuleVersionMap(ctx, versionMap) + if err != nil { + panic(err) + } + } +} + +// ExportGenesis is always empty, as InitGenesis does nothing either +func (am AppModule) ExportGenesis(_ sdk.Context, cdc codec.JSONCodec) json.RawMessage { + return am.DefaultGenesis(cdc) +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return ConsensusVersion } + +// PreBlock calls the upgrade module hooks +// +// CONTRACT: this is called *before* all other modules' BeginBlock functions +func (am AppModule) PreBlock(ctx context.Context) (appmodule.ResponsePreBlock, error) { + return PreBlocker(ctx, am.keeper) +} + +// +// App Wiring Setup +// + +func init() { + appmodule.Register(&modulev1.Module{}, + appmodule.Provide(ProvideModule), + appmodule.Invoke(PopulateVersionMap), + ) +} + +type ModuleInputs struct { + depinject.In + + Config *modulev1.Module + StoreService store.KVStoreService + Cdc codec.Codec + AddressCodec address.Codec + + AppOpts servertypes.AppOptions `optional:"true"` + Viper *viper.Viper `optional:"true"` +} + +type ModuleOutputs struct { + depinject.Out + + UpgradeKeeper *keeper.Keeper + Module appmodule.AppModule + BaseAppOption runtime.BaseAppOption +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + var ( + homePath string + skipUpgradeHeights = make(map[int64]bool) + ) + + if in.Viper != nil { // viper takes precedence over app options + for _, h := range in.Viper.GetIntSlice(server.FlagUnsafeSkipUpgrades) { + skipUpgradeHeights[int64(h)] = true + } + + homePath = in.Viper.GetString(flags.FlagHome) + } else if in.AppOpts != nil { + for _, h := range cast.ToIntSlice(in.AppOpts.Get(server.FlagUnsafeSkipUpgrades)) { + skipUpgradeHeights[int64(h)] = true + } + + homePath = cast.ToString(in.AppOpts.Get(flags.FlagHome)) + } + + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + + // set the governance module account as the authority for conducting upgrades + k := keeper.NewKeeper(skipUpgradeHeights, in.StoreService, in.Cdc, homePath, nil, authority.String()) + baseappOpt := func(app *baseapp.BaseApp) { + k.SetVersionSetter(app) + } + m := NewAppModule(k, in.AddressCodec) + + return ModuleOutputs{UpgradeKeeper: k, Module: m, BaseAppOption: baseappOpt} +} + +func PopulateVersionMap(upgradeKeeper *keeper.Keeper, modules map[string]appmodule.AppModule) { + if upgradeKeeper == nil { + return + } + + upgradeKeeper.SetInitVersionMap(module.NewManagerFromMap(modules).GetVersionMap()) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/plan/downloader.go b/vendor-shims/cosmossdk-x-upgrade/plan/downloader.go new file mode 100644 index 00000000..199cc1b5 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/plan/downloader.go @@ -0,0 +1,167 @@ +package plan + +import ( + "context" + "errors" + "fmt" + neturl "net/url" + "os" + "path/filepath" + "strings" + + "github.com/hashicorp/go-cleanhttp" + "github.com/hashicorp/go-getter" +) + +// DownloadUpgrade downloads the given url into the provided directory. +// If this returns nil, the download was successful, and {dstRoot}/bin/{daemonName} is a regular executable file. +// This is an opinionated directory structure that corresponds with Cosmovisor requirements. +// If the url is not an archive, it is downloaded and saved to {dstRoot}/bin/{daemonName}. +// If the url is an archive, it is downloaded and unpacked to {dstRoot}. +// +// If the archive does not contain a /bin/{daemonName} file, then this will attempt to move /{daemonName} to /bin/{daemonName}. +// If the archive does not contain either /bin/{daemonName} or /{daemonName}, an error is returned. +// +// If dstRoot already exists, some or all of its contents might be updated. +// NOTE: This functions does not check the provided url for validity. +func DownloadUpgrade(dstRoot, url, daemonName string) error { + target := filepath.Join(dstRoot, "bin", daemonName) + + // First try to download it as a single file. If there's no error, it's okay and we're done. + if err := getFile(url, target); err != nil { + // If it was a checksum error, no need to try as directory. + var checksumError *getter.ChecksumError + if errors.As(err, &checksumError) { + return err + } + // File download didn't work, try it as an archive. + if err = downloadUpgradeAsArchive(dstRoot, url, daemonName); err != nil { + // Out of options, send back the error. + return err + } + } + return EnsureBinary(target) +} + +// downloadUpgradeAsArchive tries to download the given url as an archive. +// The archive is unpacked and saved in dstDir. +// If the archive contains /{daemonName} and not /bin/{daemonName}, then /{daemonName} will be moved to /bin/{daemonName}. +// If this returns nil, the download was successful, and {dstDir}/bin/{daemonName} is a regular executable file. +func downloadUpgradeAsArchive(dstDir, url, daemonName string) error { + err := getter.Get(dstDir, url) + if err != nil { + return err + } + + // If bin/{daemonName} exists, we're done. + dstDirBinFile := filepath.Join(dstDir, "bin", daemonName) + err = EnsureBinary(dstDirBinFile) + if err == nil { + return nil + } + + // Otherwise, check for a root {daemonName} file and move it to the bin/ directory if found. + dstDirFile := filepath.Join(dstDir, daemonName) + err = EnsureBinary(dstDirFile) + if err == nil { + err = os.Rename(dstDirFile, dstDirBinFile) + if err != nil { + return fmt.Errorf("could not move %s to the bin directory: %w", daemonName, err) + } + return nil + } + + return fmt.Errorf("url \"%s\" result does not contain a bin/%s or %s file", url, daemonName, daemonName) +} + +// EnsureBinary checks that the given file exists as a regular file and is executable. +// An error is returned if: +// - The file does not exist. +// - The path exists, but is one of: Dir, Symlink, NamedPipe, Socket, Device, CharDevice, or Irregular. +// - The file exists, is not executable by all three of User, Group, and Other, and cannot be made executable. +func EnsureBinary(path string) error { + info, err := os.Stat(path) + if err != nil { + return err + } + if !info.Mode().IsRegular() { + _, f := filepath.Split(path) + return fmt.Errorf("%s is not a regular file", f) + } + // Make sure all executable bits are set. + oldMode := info.Mode().Perm() + newMode := oldMode | 0o111 // Set the three execute bits to on (a+x). + if oldMode != newMode { + return os.Chmod(path, newMode) + } + return nil +} + +// DownloadURL gets the contents of the given url. +// The provided url can contain a checksum parameter that matches the file being downloaded. +// If there isn't an error, the content returned by the url will be returned as a string. +// Returns an error if: +// - The url is not a URL or does not contain a checksum parameter (when required). +// - Downloading the URL fails. +// - The checksum does not match what is returned by the URL. +// - The URL does not return a regular file. +// - The downloaded file is empty or only whitespace. +func DownloadURL(url string) (string, error) { + tempDir, err := os.MkdirTemp("", "reference") + if err != nil { + return "", fmt.Errorf("could not create temp directory: %w", err) + } + defer os.RemoveAll(tempDir) + tempFile := filepath.Join(tempDir, "content") + + if err := getFile(url, tempFile); err != nil { + return "", fmt.Errorf("could not download url \"%s\": %w", url, err) + } + tempFileBz, rerr := os.ReadFile(tempFile) + if rerr != nil { + return "", fmt.Errorf("could not read downloaded temporary file: %w", rerr) + } + tempFileStr := strings.TrimSpace(string(tempFileBz)) + if len(tempFileStr) == 0 { + return "", fmt.Errorf("no content returned by \"%s\"", url) + } + return tempFileStr, nil +} + +// ValidateURL checks that the given string is a valid url and optionally contains a checksum query parameter. +func ValidateURL(urlStr string, mustChecksum bool) error { + url, err := neturl.Parse(urlStr) + if err != nil { + return err + } + + if mustChecksum && len(url.Query().Get("checksum")) == 0 { + return errors.New("missing checksum query parameter") + } + + return nil +} + +// getFile downloads the given url into the provided directory. +func getFile(url, dst string) error { + httpGetter := &getter.HttpGetter{ + Client: cleanhttp.DefaultClient(), + XTerraformGetDisabled: true, + } + + goGetterGetters := getter.Getters + goGetterGetters["http"] = httpGetter + goGetterGetters["https"] = httpGetter + + // https://github.com/hashicorp/go-getter#security-options + getterClient := &getter.Client{ + Ctx: context.Background(), + DisableSymlinks: true, + Src: url, + Dst: dst, + Pwd: dst, + Getters: goGetterGetters, + } + + return getterClient.Get() +} diff --git a/vendor-shims/cosmossdk-x-upgrade/plan/downloader_test.go b/vendor-shims/cosmossdk-x-upgrade/plan/downloader_test.go new file mode 100644 index 00000000..71ca7678 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/plan/downloader_test.go @@ -0,0 +1,292 @@ +package plan + +import ( + "archive/zip" + "crypto/sha256" + "fmt" + "io" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" +) + +type DownloaderTestSuite struct { + suite.Suite + + // Home is a temporary directory for use in these tests. + // It will have a src/ for things to download. + Home string +} + +func (s *DownloaderTestSuite) SetupTest() { + s.Home = s.T().TempDir() + s.Assert().NoError(os.MkdirAll(filepath.Join(s.Home, "src"), 0o777), "creating src/ dir") + s.T().Logf("Home: [%s]", s.Home) +} + +func TestDownloaderTestSuite(t *testing.T) { + suite.Run(t, new(DownloaderTestSuite)) +} + +// TestFile represents a file that will be used for a test. +type TestFile struct { + // Name is the relative path and name of the file. + Name string + // Contents is the contents of the file. + Contents []byte +} + +func NewTestFile(name, contents string) *TestFile { + return &TestFile{ + Name: name, + Contents: []byte(contents), + } +} + +// SaveIn saves this TestFile in the given path. +// The full path to the file is returned. +func (f TestFile) SaveIn(path string) (string, error) { + name := filepath.Join(path, f.Name) + file, err := os.Create(name) + if err != nil { + return name, err + } + defer file.Close() + _, err = file.Write(f.Contents) + return name, err +} + +// TestZip represents a collection of TestFile objects to be zipped into an archive. +type TestZip []*TestFile + +func NewTestZip(testFiles ...*TestFile) TestZip { + tz := make([]*TestFile, len(testFiles)) + copy(tz, testFiles) + return tz +} + +// SaveAs saves this TestZip at the given path. +func (z TestZip) SaveAs(path string) error { + archive, err := os.Create(path) + if err != nil { + return err + } + defer archive.Close() + zipper := zip.NewWriter(archive) + for _, tf := range z { + zfw, zfwerr := zipper.Create(tf.Name) + if zfwerr != nil { + return zfwerr + } + _, err = zfw.Write(tf.Contents) + if err != nil { + return err + } + } + return zipper.Close() +} + +// saveSrcTestZip saves a TestZip in this test's Home/src directory with the given name. +// The full path to the saved archive is returned. +func (s *DownloaderTestSuite) saveSrcTestZip(name string, z TestZip) string { + fullName := filepath.Join(s.Home, "src", name) + s.Require().NoError(z.SaveAs(fullName), "saving test zip %s", name) + return fullName +} + +// saveSrcTestFile saves a TestFile in this test's Home/src directory. +// The full path to the saved file is returned. +func (s *DownloaderTestSuite) saveSrcTestFile(f *TestFile) string { + path := filepath.Join(s.Home, "src") + fullName, err := f.SaveIn(path) + s.Require().NoError(err, "saving test file %s", f.Name) + return fullName +} + +// requireFileExistsAndIsExecutable requires that the given file exists and is executable. +func requireFileExistsAndIsExecutable(t *testing.T, path string) { + t.Helper() + info, err := os.Stat(path) + require.NoError(t, err, "stat error") + perm := info.Mode().Perm() + // Checks if at least one executable bit is set (user, group, or other) + isExe := perm&0o111 != 0 + require.True(t, isExe, "is executable: permissions = %s", perm) +} + +// requireFileEquals requires that the contents of the file at the given path +// is equal to the contents of the given TestFile. +func requireFileEquals(t *testing.T, path string, tf *TestFile) { + t.Helper() + file, err := os.ReadFile(path) + require.NoError(t, err, "reading file") + require.Equal(t, string(tf.Contents), string(file), "file contents") +} + +// makeFileURL converts the given path to a URL with the correct checksum query parameter. +func makeFileURL(t *testing.T, path string) string { + t.Helper() + f, err := os.Open(path) + require.NoError(t, err, "opening file") + defer f.Close() + hasher := sha256.New() + _, err = io.Copy(hasher, f) + require.NoError(t, err, "copying file to hasher") + return fmt.Sprintf("file://%s?checksum=sha256:%x", path, hasher.Sum(nil)) +} + +func (s *DownloaderTestSuite) TestDownloadUpgrade() { + justAFile := NewTestFile("just-a-file", "#!/usr/bin\necho 'I am just a file'\n") + someFileName := "some-file" + someFileInBin := NewTestFile("bin"+someFileName, "#!/usr/bin\necho 'I am some file in bin'\n") + anotherFile := NewTestFile("another-file", "#!/usr/bin\necho 'I am just another file'\n") + justAFilePath := s.saveSrcTestFile(justAFile) + justAFileZip := s.saveSrcTestZip(justAFile.Name+".zip", NewTestZip(justAFile)) + someFileInBinZip := s.saveSrcTestZip(someFileInBin.Name+".zip", NewTestZip(someFileInBin)) + allFilesZip := s.saveSrcTestZip(anotherFile.Name+".zip", NewTestZip(justAFile, someFileInBin, anotherFile)) + getDstDir := func(testName string) string { + _, tName := filepath.Split(testName) + return s.Home + "/dst/" + tName + } + + s.T().Run("url does not exist", func(t *testing.T) { + dstRoot := getDstDir(t.Name()) + url := "file:///never/gonna/be/a/thing.zip?checksum=sha256:2c22e34510bd1d4ad2343cdc54f7165bccf30caef73f39af7dd1db2795a3da48" + err := DownloadUpgrade(dstRoot, url, "nothing") + require.Error(t, err) + assert.Contains(t, err.Error(), "no such file or directory") + }) + + s.T().Run("url has incorrect checksum", func(t *testing.T) { + dstRoot := getDstDir(t.Name()) + badChecksum := "2c22e34510bd1d4ad2343cdc54f7165bccf30caef73f39af7dd1db2795a3da48" + url := "file://" + justAFilePath + "?checksum=sha256:" + badChecksum + err := DownloadUpgrade(dstRoot, url, justAFile.Name) + require.Error(t, err) + assert.Contains(t, err.Error(), "Checksums did not match") + assert.Contains(t, err.Error(), "Expected: "+badChecksum) + }) + + s.T().Run("url returns single file", func(t *testing.T) { + dstRoot := getDstDir(t.Name()) + url := makeFileURL(t, justAFilePath) + err := DownloadUpgrade(dstRoot, url, justAFile.Name) + require.NoError(t, err) + expectedFile := filepath.Join(dstRoot, "bin", justAFile.Name) + requireFileExistsAndIsExecutable(t, expectedFile) + requireFileEquals(t, expectedFile, justAFile) + }) + + s.T().Run("url returns archive with file in bin", func(t *testing.T) { + dstRoot := getDstDir(t.Name()) + url := makeFileURL(t, someFileInBinZip) + err := DownloadUpgrade(dstRoot, url, someFileName) + require.NoError(t, err) + expectedFile := filepath.Join(dstRoot, "bin", someFileName) + requireFileExistsAndIsExecutable(t, expectedFile) + requireFileEquals(t, expectedFile, someFileInBin) + }) + + s.T().Run("url returns archive with just expected file", func(t *testing.T) { + dstRoot := getDstDir(t.Name()) + url := makeFileURL(t, justAFileZip) + err := DownloadUpgrade(dstRoot, url, justAFile.Name) + require.NoError(t, err) + expectedFile := filepath.Join(dstRoot, "bin", justAFile.Name) + requireFileExistsAndIsExecutable(t, expectedFile) + requireFileEquals(t, expectedFile, justAFile) + }) + + s.T().Run("url returns archive without expected file", func(t *testing.T) { + dstRoot := getDstDir(t.Name()) + url := makeFileURL(t, allFilesZip) + err := DownloadUpgrade(dstRoot, url, "not-expected") + require.Error(t, err) + require.Contains(t, err.Error(), "result does not contain a bin/not-expected or not-expected file") + }) +} + +func (s *DownloaderTestSuite) TestEnsureBinary() { + nonExeName := s.saveSrcTestFile(NewTestFile("non-exe.txt", "Not executable")) + s.Require().NoError(os.Chmod(nonExeName, 0o600), "chmod error nonExeName") + isExeName := s.saveSrcTestFile(NewTestFile("is-exe.sh", "#!/bin/bash\necho 'executing'\n")) + s.Require().NoError(os.Chmod(isExeName, 0o777), "chmod error isExeName") + + s.T().Run("file does not exist", func(t *testing.T) { + name := filepath.Join(s.Home, "does-not-exist.txt") + actual := EnsureBinary(name) + require.Error(t, actual) + }) + + s.T().Run("file is a directory", func(t *testing.T) { + name := filepath.Join(s.Home, "src") + actual := EnsureBinary(name) + require.EqualError(t, actual, fmt.Sprintf("%s is not a regular file", "src")) + }) + + s.T().Run("file exists and becomes executable", func(t *testing.T) { + name := nonExeName + actual := EnsureBinary(name) + require.NoError(t, actual, "EnsureBinary error") + requireFileExistsAndIsExecutable(t, name) + }) + + s.T().Run("file is already executable", func(t *testing.T) { + name := isExeName + actual := EnsureBinary(name) + require.NoError(t, actual, "EnsureBinary error") + requireFileExistsAndIsExecutable(t, name) + }) +} + +func (s *DownloaderTestSuite) TestDownloadURL() { + planContents := `{"binaries":{"xxx/yyy":"url"}}` + planFile := NewTestFile("plan-info.json", planContents) + planPath := s.saveSrcTestFile(planFile) + planChecksum := fmt.Sprintf("%x", sha256.Sum256(planFile.Contents)) + emptyFile := NewTestFile("empty-plan-info.json", "") + emptyPlanPath := s.saveSrcTestFile(emptyFile) + emptyChecksum := fmt.Sprintf("%x", sha256.Sum256(emptyFile.Contents)) + + s.T().Run("url does not exist", func(t *testing.T) { + url := "file:///never-gonna-be-a-thing?checksum=sha256:2c22e34510bd1d4ad2343cdc54f7165bccf30caef73f39af7dd1db2795a3da48" + _, err := DownloadURL(url) + require.Error(t, err) + assert.Contains(t, err.Error(), "could not download url") + }) + + s.T().Run("without checksum", func(t *testing.T) { + url := "file://" + planPath + actual, err := DownloadURL(url) + require.NoError(t, err) + require.Equal(t, planContents, actual) + }) + + s.T().Run("with correct checksum", func(t *testing.T) { + url := "file://" + planPath + "?checksum=sha256:" + planChecksum + actual, err := DownloadURL(url) + require.NoError(t, err) + require.Equal(t, planContents, actual) + }) + + s.T().Run("with incorrect checksum", func(t *testing.T) { + badChecksum := "2c22e34510bd1d4ad2343cdc54f7165bccf30caef73f39af7dd1db2795a3da48" + url := "file://" + planPath + "?checksum=sha256:" + badChecksum + _, err := DownloadURL(url) + require.Error(t, err) + assert.Contains(t, err.Error(), "Checksums did not match") + assert.Contains(t, err.Error(), "Expected: "+badChecksum) + assert.Contains(t, err.Error(), "Got: "+planChecksum) + }) + + s.T().Run("plan is empty", func(t *testing.T) { + url := "file://" + emptyPlanPath + "?checksum=sha256:" + emptyChecksum + _, err := DownloadURL(url) + require.Error(t, err) + assert.Contains(t, err.Error(), "no content returned") + }) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/plan/info.go b/vendor-shims/cosmossdk-x-upgrade/plan/info.go new file mode 100644 index 00000000..ae3cfe1a --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/plan/info.go @@ -0,0 +1,143 @@ +package plan + +import ( + "encoding/json" + "errors" + "fmt" + neturl "net/url" + "os" + "path/filepath" + "regexp" + "strings" + + "cosmossdk.io/x/upgrade/internal/conv" +) + +// Info is the special structure that the Plan.Info string can be (as json). +type Info struct { + parseConfig ParseConfig `json:"-"` + + Binaries BinaryDownloadURLMap `json:"binaries"` +} + +// BinaryDownloadURLMap is a map of os/architecture stings to a URL where the binary can be downloaded. +type BinaryDownloadURLMap map[string]string + +// ParseConfig is used to configure the parsing of a Plan.Info string. +type ParseConfig struct { + // EnforceChecksum, if true, will cause all downloaded files to be checked against their checksums. + // When false, checksums are not enforced to be present in the url. + EnforceChecksum bool +} + +// ParseOption is used to configure the parsing of a Plan.Info string. +type ParseOption func(*ParseConfig) + +// ParseOptionEnforceChecksum returns a ParseOption that sets the EnforceChecksum field of the ParseConfig. +func ParseOptionEnforceChecksum(enforce bool) ParseOption { + return func(c *ParseConfig) { + c.EnforceChecksum = enforce + } +} + +// ParseInfo parses an info string into a map of os/arch strings to URL string. +// If the infoStr is a url, an GET request will be made to it, and its response will be parsed instead. +func ParseInfo(infoStr string, opts ...ParseOption) (*Info, error) { + parseConfig := &ParseConfig{} + for _, opt := range opts { + opt(parseConfig) + } + + infoStr = strings.TrimSpace(infoStr) + if len(infoStr) == 0 { + return nil, errors.New("plan info must not be blank") + } + + // If it's a url, download it and treat the result as the real info. + if _, err := neturl.ParseRequestURI(infoStr); err == nil { + if err := ValidateURL(infoStr, parseConfig.EnforceChecksum); err != nil { + return nil, err + } + + infoStr, err = DownloadURL(infoStr) + if err != nil { + return nil, err + } + } + + // Now, try to parse it into the expected structure. + var planInfo Info + if err := json.Unmarshal(conv.UnsafeStrToBytes(infoStr), &planInfo); err != nil { + return nil, fmt.Errorf("could not parse plan info: %w", err) + } + + planInfo.parseConfig = *parseConfig + + return &planInfo, nil +} + +// ValidateFull does all possible validation of this Info. +// The provided daemonName is the name of the executable file expected in all downloaded directories. +// It checks that: +// - Binaries.ValidateBasic() doesn't return an error +// - Binaries.CheckURLs(daemonName) doesn't return an error. +// +// Warning: This is an expensive process. See BinaryDownloadURLMap.CheckURLs for more info. +func (m Info) ValidateFull(daemonName string) error { + if err := m.Binaries.ValidateBasic(m.parseConfig.EnforceChecksum); err != nil { + return err + } + if err := m.Binaries.CheckURLs(daemonName, m.parseConfig.EnforceChecksum); err != nil { + return err + } + return nil +} + +// ValidateBasic does stateless validation of this BinaryDownloadURLMap. +// It validates that: +// - This has at least one entry. +// - All entry keys have the format "os/arch" or are "any". +// - All entry values are valid URLs. +// - When `enforceChecksum` is true all URLs must contain a checksum query parameter. +func (m BinaryDownloadURLMap) ValidateBasic(enforceChecksum bool) error { + // Make sure there's at least one. + if len(m) == 0 { + return errors.New("no \"binaries\" entries found") + } + + osArchRx := regexp.MustCompile(`[a-zA-Z0-9]+/[a-zA-Z0-9]+`) + for key, val := range m { + if key != "any" && !osArchRx.MatchString(key) { + return fmt.Errorf("invalid os/arch format in key \"%s\"", key) + } + + if err := ValidateURL(val, enforceChecksum); err != nil { + return fmt.Errorf("invalid url \"%s\" in binaries[%s]: %w", val, key, err) + } + } + + return nil +} + +// CheckURLs checks that all entries have valid URLs that return expected data. +// The provided daemonName is the name of the executable file expected in all downloaded directories. +// Warning: This is an expensive process. +// It will make an HTTP GET request to each URL and download the response. +func (m BinaryDownloadURLMap) CheckURLs(daemonName string, enforceChecksum bool) error { + tempDir, err := os.MkdirTemp("", "os-arch-downloads") + if err != nil { + return fmt.Errorf("could not create temp directory: %w", err) + } + defer os.RemoveAll(tempDir) + for osArch, url := range m { + dstRoot := filepath.Join(tempDir, strings.ReplaceAll(osArch, "/", "-")) + if err := ValidateURL(url, enforceChecksum); err != nil { + return fmt.Errorf("error validating url for os/arch %s: %w", osArch, err) + } + + if err = DownloadUpgrade(dstRoot, url, daemonName); err != nil { + return fmt.Errorf("error downloading binary for os/arch %s: %w", osArch, err) + } + } + return nil +} diff --git a/vendor-shims/cosmossdk-x-upgrade/plan/info_test.go b/vendor-shims/cosmossdk-x-upgrade/plan/info_test.go new file mode 100644 index 00000000..047cd49d --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/plan/info_test.go @@ -0,0 +1,346 @@ +package plan + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" +) + +type InfoTestSuite struct { + suite.Suite + + // Home is a temporary directory for use in these tests. + Home string +} + +func (s *InfoTestSuite) SetupTest() { + s.Home = s.T().TempDir() + s.T().Logf("Home: [%s]", s.Home) +} + +func TestInfoTestSuite(t *testing.T) { + suite.Run(t, new(InfoTestSuite)) +} + +// saveSrcTestFile saves a TestFile in this test's Home/src directory. +// The full path to the saved file is returned. +func (s *InfoTestSuite) saveTestFile(f *TestFile) string { + fullName, err := f.SaveIn(s.Home) + s.Require().NoError(err, "saving test file %s", f.Name) + return fullName +} + +func (s *InfoTestSuite) TestParseInfo() { + goodJSON := `{"binaries":{"os1/arch1":"url1","os2/arch2":"url2"}}` + binariesWrongJSON := `{"binaries":["foo","bar"]}` + binariesWrongValueJSON := `{"binaries":{"os1/arch1":1,"os2/arch2":2}}` + goodJSONPath := s.saveTestFile(NewTestFile("good.json", goodJSON)) + binariesWrongJSONPath := s.saveTestFile(NewTestFile("binaries-wrong.json", binariesWrongJSON)) + binariesWrongValueJSONPath := s.saveTestFile(NewTestFile("binaries-wrong-value.json", binariesWrongValueJSON)) + goodJSONAsInfo := &Info{ + Binaries: BinaryDownloadURLMap{ + "os1/arch1": "url1", + "os2/arch2": "url2", + }, + } + makeInfoStrFuncString := func(val string) func(t *testing.T) string { + return func(t *testing.T) string { + t.Helper() + return val + } + } + makeInfoStrFuncURL := func(file string) func(t *testing.T) string { + return func(t *testing.T) string { + t.Helper() + return makeFileURL(t, file) + } + } + + tests := []struct { + name string + infoStrMaker func(t *testing.T) string + expectedInfo *Info + expectedInError []string + }{ + { + name: "json good", + infoStrMaker: makeInfoStrFuncString(goodJSON), + expectedInfo: goodJSONAsInfo, + expectedInError: nil, + }, + { + name: "blank string", + infoStrMaker: makeInfoStrFuncString(" "), + expectedInfo: nil, + expectedInError: []string{"plan info must not be blank"}, + }, + { + name: "empty JSON", + infoStrMaker: makeInfoStrFuncString("{}"), + expectedInfo: &Info{}, + expectedInError: nil, + }, + { + name: "json binaries is wrong data type", + infoStrMaker: makeInfoStrFuncString(binariesWrongJSON), + expectedInfo: nil, + expectedInError: []string{"could not parse plan info", "cannot unmarshal array into Go struct field Info.binaries"}, + }, + { + name: "json wrong data type in binaries value", + infoStrMaker: makeInfoStrFuncString(binariesWrongValueJSON), + expectedInfo: nil, + expectedInError: []string{"could not parse plan info", "cannot unmarshal number into Go struct field Info.binaries"}, + }, + { + name: "url does not exist", + infoStrMaker: makeInfoStrFuncString("file:///this/file/does/not/exist?checksum=sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"), + expectedInfo: nil, + expectedInError: []string{"could not download url", "file:///this/file/does/not/exist"}, + }, + { + name: "url good", + infoStrMaker: makeInfoStrFuncURL(goodJSONPath), + expectedInfo: goodJSONAsInfo, + expectedInError: nil, + }, + { + name: "url binaries is wrong data type", + infoStrMaker: makeInfoStrFuncURL(binariesWrongJSONPath), + expectedInfo: nil, + expectedInError: []string{"could not parse plan info", "cannot unmarshal array into Go struct field Info.binaries"}, + }, + { + name: "url wrong data type in binaries value", + infoStrMaker: makeInfoStrFuncURL(binariesWrongValueJSONPath), + expectedInfo: nil, + expectedInError: []string{"could not parse plan info", "cannot unmarshal number into Go struct field Info.binaries"}, + }, + } + + for _, tc := range tests { + s.T().Run(tc.name, func(t *testing.T) { + infoStr := tc.infoStrMaker(t) + actualInfo, actualErr := ParseInfo(infoStr) + if len(tc.expectedInError) > 0 { + require.Error(t, actualErr) + for _, expectedErr := range tc.expectedInError { + assert.Contains(t, actualErr.Error(), expectedErr) + } + } else { + require.NoError(t, actualErr) + } + assert.Equal(t, tc.expectedInfo, actualInfo) + }) + } +} + +func (s *InfoTestSuite) TestInfoValidateFull() { + darwinAMD64File := NewTestFile("darwin_amd64", "#!/usr/bin\necho 'darwin/amd64'\n") + linux386File := NewTestFile("linux_386", "#!/usr/bin\necho 'darwin/amd64'\n") + darwinAMD64Path := s.saveTestFile(darwinAMD64File) + linux386Path := s.saveTestFile(linux386File) + darwinAMD64URL := makeFileURL(s.T(), darwinAMD64Path) + linux386URL := makeFileURL(s.T(), linux386Path) + + tests := []struct { + name string + planInfo *Info + errs []string + }{ + // Positive test case + { + name: "two good entries", + planInfo: &Info{ + Binaries: BinaryDownloadURLMap{ + "darwin/amd64": darwinAMD64URL, + "linux/386": linux386URL, + }, + }, + errs: nil, + }, + // a failure from BinaryDownloadURLMap.ValidateBasic + { + name: "empty binaries", + planInfo: &Info{Binaries: BinaryDownloadURLMap{}}, + errs: []string{"no \"binaries\" entries found"}, + }, + // a failure from BinaryDownloadURLMap.CheckURLS + { + name: "url does not exist", + planInfo: &Info{ + Binaries: BinaryDownloadURLMap{ + "darwin/arm64": "file:///no/such/file/exists/hopefully.zip?checksum=sha256:b5a2c96250612366ea272ffac6d9744aaf4b45aacd96aa7cfcb931ee3b558259", + }, + }, + errs: []string{"error downloading binary", "darwin/arm64", "no such file or directory"}, + }, + } + + for _, tc := range tests { + s.T().Run(tc.name, func(t *testing.T) { + actualErr := tc.planInfo.ValidateFull("daemon") + if len(tc.errs) > 0 { + require.Error(t, actualErr) + for _, expectedErr := range tc.errs { + assert.Contains(t, actualErr.Error(), expectedErr) + } + } else { + require.NoError(t, actualErr) + } + }) + } +} + +func (s *InfoTestSuite) TestBinaryDownloadURLMapValidateBasic() { + addDummyChecksum := func(url string) string { + return url + "?checksum=sha256:b5a2c96250612366ea272ffac6d9744aaf4b45aacd96aa7cfcb931ee3b558259" + } + tests := []struct { + name string + urlMap BinaryDownloadURLMap + parseConfig ParseConfig + errs []string + }{ + { + name: "empty map", + urlMap: BinaryDownloadURLMap{}, + errs: []string{"no \"binaries\" entries found"}, + }, + { + name: "key with empty string", + urlMap: BinaryDownloadURLMap{ + "": addDummyChecksum("https://v1.cosmos.network/sdk"), + }, + errs: []string{"invalid os/arch", `""`}, + }, + { + name: "invalid key format", + urlMap: BinaryDownloadURLMap{ + "badkey": addDummyChecksum("https://v1.cosmos.network/sdk"), + }, + errs: []string{"invalid os/arch", "badkey"}, + }, + { + name: "any key is valid", + urlMap: BinaryDownloadURLMap{ + "any": addDummyChecksum("https://v1.cosmos.network/sdk"), + }, + errs: nil, + }, + { + name: "os arch key is valid", + urlMap: BinaryDownloadURLMap{ + "darwin/amd64": addDummyChecksum("https://v1.cosmos.network/sdk"), + }, + errs: nil, + }, + { + name: "not a url", + urlMap: BinaryDownloadURLMap{ + "isa/url": addDummyChecksum("https://v1.cosmos.network/sdk"), + "nota/url": addDummyChecksum("https://v1.cosmos.network:not-a-port/sdk"), + }, + errs: []string{"invalid url", "nota/url", "invalid port"}, + }, + { + name: "url without checksum", + urlMap: BinaryDownloadURLMap{ + "darwin/amd64": "https://v1.cosmos.network/sdk", + }, + parseConfig: ParseConfig{EnforceChecksum: false}, + errs: nil, + }, + { + name: "multiple valid entries but one bad url", + urlMap: BinaryDownloadURLMap{ + "any": addDummyChecksum("https://v1.cosmos.network/sdk"), + "darwin/amd64": addDummyChecksum("https://v1.cosmos.network/sdk"), + "darwin/arm64": addDummyChecksum("https://v1.cosmos.network/sdk"), + "windows/bad": addDummyChecksum("https://v1.cosmos.network:not-a-port/sdk"), + "linux/386": addDummyChecksum("https://v1.cosmos.network/sdk"), + }, + errs: []string{"invalid url", "windows/bad", "invalid port"}, + }, + { + name: "multiple valid entries but one bad key", + urlMap: BinaryDownloadURLMap{ + "any": addDummyChecksum("https://v1.cosmos.network/sdk"), + "darwin/amd64": addDummyChecksum("https://v1.cosmos.network/sdk"), + "badkey": addDummyChecksum("https://v1.cosmos.network/sdk"), + "darwin/arm64": addDummyChecksum("https://v1.cosmos.network/sdk"), + "linux/386": addDummyChecksum("https://v1.cosmos.network/sdk"), + }, + errs: []string{"invalid os/arch", "badkey"}, + }, + } + + for _, tc := range tests { + s.T().Run(tc.name, func(t *testing.T) { + actualErr := tc.urlMap.ValidateBasic(tc.parseConfig.EnforceChecksum) + if len(tc.errs) > 0 { + require.Error(t, actualErr) + for _, expectedErr := range tc.errs { + assert.Contains(t, actualErr.Error(), expectedErr) + } + } else { + require.NoError(t, actualErr) + } + }) + } +} + +func (s *InfoTestSuite) TestBinaryDownloadURLMapCheckURLs() { + darwinAMD64File := NewTestFile("darwin_amd64", "#!/usr/bin\necho 'darwin/amd64'\n") + linux386File := NewTestFile("linux_386", "#!/usr/bin\necho 'darwin/amd64'\n") + darwinAMD64Path := s.saveTestFile(darwinAMD64File) + linux386Path := s.saveTestFile(linux386File) + darwinAMD64URL := makeFileURL(s.T(), darwinAMD64Path) + linux386URL := makeFileURL(s.T(), linux386Path) + + tests := []struct { + name string + urlMap BinaryDownloadURLMap + parseConfig ParseConfig + errs []string + }{ + { + name: "two good entries", + urlMap: BinaryDownloadURLMap{ + "darwin/amd64": darwinAMD64URL, + "linux/386": linux386URL, + }, + errs: nil, + }, + { + name: "url does not exist", + urlMap: BinaryDownloadURLMap{ + "darwin/arm64": "file:///no/such/file/exists/hopefully.zip?checksum=sha256:b5a2c96250612366ea272ffac6d9744aaf4b45aacd96aa7cfcb931ee3b558259", + }, + errs: []string{"error downloading binary", "darwin/arm64", "no such file or directory"}, + }, + { + name: "bad checksum", + urlMap: BinaryDownloadURLMap{ + "darwin/amd64": "file://" + darwinAMD64Path + "?checksum=sha256:b5a2c96250612366ea272ffac6d9744aaf4b45aacd96aa7cfcb931ee3b558259", + }, + errs: []string{"error downloading binary", "darwin/amd64", "Checksums did not match", "b5a2c96250612366ea272ffac6d9744aaf4b45aacd96aa7cfcb931ee3b558259"}, + }, + } + + for _, tc := range tests { + s.T().Run(tc.name, func(t *testing.T) { + actualErr := tc.urlMap.CheckURLs("daemon", tc.parseConfig.EnforceChecksum) + if len(tc.errs) > 0 { + require.Error(t, actualErr) + for _, expectedErr := range tc.errs { + assert.Contains(t, actualErr.Error(), expectedErr) + } + } else { + require.NoError(t, actualErr) + } + }) + } +} diff --git a/vendor-shims/cosmossdk-x-upgrade/types/codec.go b/vendor-shims/cosmossdk-x-upgrade/types/codec.go new file mode 100644 index 00000000..43c9b04c --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/codec.go @@ -0,0 +1,35 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" +) + +// RegisterLegacyAminoCodec registers concrete types on the LegacyAmino codec +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + cdc.RegisterConcrete(Plan{}, "cosmos-sdk/Plan", nil) + cdc.RegisterConcrete(&SoftwareUpgradeProposal{}, "cosmos-sdk/SoftwareUpgradeProposal", nil) + cdc.RegisterConcrete(&CancelSoftwareUpgradeProposal{}, "cosmos-sdk/CancelSoftwareUpgradeProposal", nil) + legacy.RegisterAminoMsg(cdc, &MsgSoftwareUpgrade{}, "cosmos-sdk/MsgSoftwareUpgrade") + legacy.RegisterAminoMsg(cdc, &MsgCancelUpgrade{}, "cosmos-sdk/MsgCancelUpgrade") +} + +// RegisterInterfaces registers the interfaces types with the Interface Registry. +func RegisterInterfaces(registry types.InterfaceRegistry) { + registry.RegisterImplementations( + (*govtypes.Content)(nil), + &SoftwareUpgradeProposal{}, + &CancelSoftwareUpgradeProposal{}, + ) + + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgSoftwareUpgrade{}, + &MsgCancelUpgrade{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/types/errors.go b/vendor-shims/cosmossdk-x-upgrade/types/errors.go new file mode 100644 index 00000000..5b80e2fa --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/errors.go @@ -0,0 +1,19 @@ +package types + +import ( + "cosmossdk.io/errors" +) + +// x/authz module sentinel errors +var ( + // ErrNoModuleVersionFound error if there is no version found in the module-version map + ErrNoModuleVersionFound = errors.Register(ModuleName, 2, "module version not found") + // ErrNoUpgradePlanFound error if there is no scheduled upgrade plan found + ErrNoUpgradePlanFound = errors.Register(ModuleName, 3, "upgrade plan not found") + // ErrNoUpgradedClientFound error if there is no upgraded client for the next version + ErrNoUpgradedClientFound = errors.Register(ModuleName, 4, "upgraded client not found") + // ErrNoUpgradedConsensusStateFound error if there is no upgraded consensus state for the next version + ErrNoUpgradedConsensusStateFound = errors.Register(ModuleName, 5, "upgraded consensus state not found") + // ErrInvalidSigner error if the authority is not the signer for a proposal message + ErrInvalidSigner = errors.Register(ModuleName, 6, "expected authority account as only signer for proposal message") +) diff --git a/vendor-shims/cosmossdk-x-upgrade/types/handler.go b/vendor-shims/cosmossdk-x-upgrade/types/handler.go new file mode 100644 index 00000000..80d57da4 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/handler.go @@ -0,0 +1,27 @@ +package types + +import ( + context "context" + + "github.com/cosmos/cosmos-sdk/types/module" +) + +// UpgradeHandler specifies the type of function that is called when an upgrade +// is applied. +// +// `fromVM` is a VersionMap of moduleName to fromVersion (unit64), where +// fromVersion denotes the version from which we should migrate the module, the +// target version being the module's latest version in the return VersionMap, +// let's call it `toVM`. +// +// `fromVM` is retrieved from x/upgrade's store, whereas `toVM` is chosen +// arbitrarily by the app developer (and persisted to x/upgrade's store right +// after the upgrade handler runs). In general, `toVM` should map all modules +// to their latest ConsensusVersion so that x/upgrade can track each module's +// latest ConsensusVersion; `fromVM` can be left as-is, but can also be +// modified inside the upgrade handler, e.g. to skip running InitGenesis or +// migrations for certain modules when calling the `module.Manager#RunMigrations` +// function. +// +// Please also refer to docs/core/upgrade.md for more information. +type UpgradeHandler func(ctx context.Context, plan Plan, fromVM module.VersionMap) (module.VersionMap, error) diff --git a/vendor-shims/cosmossdk-x-upgrade/types/keys.go b/vendor-shims/cosmossdk-x-upgrade/types/keys.go new file mode 100644 index 00000000..bf11e651 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/keys.go @@ -0,0 +1,57 @@ +package types + +import "fmt" + +const ( + // ModuleName is the name of this module + ModuleName = "upgrade" + + // RouterKey is used to route governance proposals + RouterKey = ModuleName + + // StoreKey is the prefix under which we store this module's data + StoreKey = ModuleName +) + +const ( + // PlanByte specifies the Byte under which a pending upgrade plan is stored in the store + PlanByte = 0x0 + + // DoneByte is a prefix to look up completed upgrade plan by name + DoneByte = 0x1 + + // VersionMapByte is a prefix to look up module names (key) and versions (value) + VersionMapByte = 0x2 + + // ProtocolVersionByte is a prefix to look up Protocol Version + ProtocolVersionByte = 0x3 + + // KeyUpgradedIBCState is the key under which upgraded ibc state is stored in the upgrade store + KeyUpgradedIBCState = "upgradedIBCState" + + // KeyUpgradedClient is the sub-key under which upgraded client state will be stored + KeyUpgradedClient = "upgradedClient" + + // KeyUpgradedConsState is the sub-key under which upgraded consensus state will be stored + KeyUpgradedConsState = "upgradedConsState" +) + +// PlanKey is the key under which the current plan is saved +// We store PlanByte as a const to keep it immutable (unlike a []byte) +func PlanKey() []byte { + return []byte{PlanByte} +} + +// UpgradedClientKey is the key under which the upgraded client state is saved +// Connecting IBC chains can verify against the upgraded client in this path before +// upgrading their clients +func UpgradedClientKey(height int64) []byte { + return []byte(fmt.Sprintf("%s/%d/%s", KeyUpgradedIBCState, height, KeyUpgradedClient)) +} + +// UpgradedConsStateKey is the key under which the upgraded consensus state is saved +// Connecting IBC chains can verify against the upgraded consensus state in this path before +// upgrading their clients. +func UpgradedConsStateKey(height int64) []byte { + return []byte(fmt.Sprintf("%s/%d/%s", KeyUpgradedIBCState, height, KeyUpgradedConsState)) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/types/plan.go b/vendor-shims/cosmossdk-x-upgrade/types/plan.go new file mode 100644 index 00000000..8b92fe00 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/plan.go @@ -0,0 +1,40 @@ +package types + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +// UpgradeInfoFileName file to store upgrade information +const UpgradeInfoFilename = "upgrade-info.json" + +// ValidateBasic does basic validation of a Plan +func (p Plan) ValidateBasic() error { + if !p.Time.IsZero() { + return sdkerrors.ErrInvalidRequest.Wrap("time-based upgrades have been deprecated in the SDK") + } + if p.UpgradedClientState != nil { + return sdkerrors.ErrInvalidRequest.Wrap("upgrade logic for IBC has been moved to the IBC module") + } + if len(p.Name) == 0 { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "name cannot be empty") + } + if p.Height <= 0 { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "height must be greater than 0") + } + + return nil +} + +// ShouldExecute returns true if the Plan is ready to execute given the current block height +func (p Plan) ShouldExecute(blockHeight int64) bool { + return p.Height > 0 && p.Height <= blockHeight +} + +// DueAt is a string representation of when this plan is due to be executed +func (p Plan) DueAt() string { + return fmt.Sprintf("height: %d", p.Height) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/types/plan_test.go b/vendor-shims/cosmossdk-x-upgrade/types/plan_test.go new file mode 100644 index 00000000..668528cf --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/plan_test.go @@ -0,0 +1,148 @@ +package types_test + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "cosmossdk.io/x/upgrade/types" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" +) + +func mustParseTime(s string) time.Time { + t, err := time.Parse(time.RFC3339, s) + if err != nil { + panic(err) + } + return t +} + +func TestPlanString(t *testing.T) { + cases := map[string]struct { + p types.Plan + expect string + }{ + "with height": { + p: types.Plan{ + Name: "by height", + Info: "https://foo.bar/baz", + Height: 7890, + }, + expect: "name:\"by height\" time: height:7890 info:\"https://foo.bar/baz\" ", + }, + "neither": { + p: types.Plan{ + Name: "almost-empty", + }, + expect: "name:\"almost-empty\" time: ", + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + s := tc.p.String() + require.Equal(t, tc.expect, s) + }) + } +} + +func TestPlanValid(t *testing.T) { + cases := map[string]struct { + p types.Plan + valid bool + }{ + "proper by height": { + p: types.Plan{ + Name: "all-good", + Height: 123450000, + }, + valid: true, + }, + "no name": { + p: types.Plan{ + Height: 123450000, + }, + }, + "time-base upgrade": { + p: types.Plan{ + Time: time.Now(), + }, + }, + "IBC upgrade": { + p: types.Plan{ + Height: 123450000, + UpgradedClientState: &codectypes.Any{}, + }, + }, + "no due at": { + p: types.Plan{ + Name: "missing", + Info: "important", + }, + }, + "negative height": { + p: types.Plan{ + Name: "minus", + Height: -12345, + }, + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + err := tc.p.ValidateBasic() + if tc.valid { + assert.NoError(t, err) + } else { + assert.Error(t, err) + } + }) + } +} + +func TestShouldExecute(t *testing.T) { + cases := map[string]struct { + p types.Plan + ctxTime time.Time + ctxHeight int64 + expected bool + }{ + "past height": { + p: types.Plan{ + Name: "do-good", + Height: 1234, + }, + ctxTime: mustParseTime("2019-07-08T11:32:00Z"), + ctxHeight: 1000, + expected: false, + }, + "on height": { + p: types.Plan{ + Name: "do-good", + Height: 1234, + }, + ctxTime: mustParseTime("2019-07-08T11:32:00Z"), + ctxHeight: 1234, + expected: true, + }, + "future height": { + p: types.Plan{ + Name: "do-good", + Height: 1234, + }, + ctxTime: mustParseTime("2019-07-08T11:32:00Z"), + ctxHeight: 1235, + expected: true, + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + should := tc.p.ShouldExecute(tc.ctxHeight) + assert.Equal(t, tc.expected, should) + }) + } +} diff --git a/vendor-shims/cosmossdk-x-upgrade/types/proposal.go b/vendor-shims/cosmossdk-x-upgrade/types/proposal.go new file mode 100644 index 00000000..ebac9a18 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/proposal.go @@ -0,0 +1,74 @@ +package types + +import ( + gov "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" +) + +const ( + ProposalTypeSoftwareUpgrade string = "SoftwareUpgrade" + ProposalTypeCancelSoftwareUpgrade string = "CancelSoftwareUpgrade" +) + +// NewSoftwareUpgradeProposal creates a new SoftwareUpgradeProposal instance. +// Deprecated: this proposal is considered legacy and is deprecated in favor of +// Msg-based gov proposals. See MsgSoftwareUpgrade. +func NewSoftwareUpgradeProposal(title, description string, plan Plan) gov.Content { + return &SoftwareUpgradeProposal{title, description, plan} +} + +// Implements Proposal Interface +var _ gov.Content = &SoftwareUpgradeProposal{} + +func init() { + gov.RegisterProposalType(ProposalTypeSoftwareUpgrade) + gov.RegisterProposalType(ProposalTypeCancelSoftwareUpgrade) +} + +// GetTitle gets the proposal's title +func (sup *SoftwareUpgradeProposal) GetTitle() string { return sup.Title } + +// GetDescription gets the proposal's description +func (sup *SoftwareUpgradeProposal) GetDescription() string { return sup.Description } + +// ProposalRoute gets the proposal's router key +func (sup *SoftwareUpgradeProposal) ProposalRoute() string { return RouterKey } + +// ProposalType is "SoftwareUpgrade" +func (sup *SoftwareUpgradeProposal) ProposalType() string { return ProposalTypeSoftwareUpgrade } + +// ValidateBasic validates the proposal +func (sup *SoftwareUpgradeProposal) ValidateBasic() error { + if err := sup.Plan.ValidateBasic(); err != nil { + return err + } + return gov.ValidateAbstract(sup) +} + +// NewCancelSoftwareUpgradeProposal creates a new CancelSoftwareUpgradeProposal +// instance. Deprecated: this proposal is considered legacy and is deprecated in +// favor of Msg-based gov proposals. See MsgCancelUpgrade. +func NewCancelSoftwareUpgradeProposal(title, description string) gov.Content { + return &CancelSoftwareUpgradeProposal{title, description} +} + +// Implements Proposal Interface +var _ gov.Content = &CancelSoftwareUpgradeProposal{} + +// GetTitle gets the proposal's title +func (csup *CancelSoftwareUpgradeProposal) GetTitle() string { return csup.Title } + +// GetDescription gets the proposal's description +func (csup *CancelSoftwareUpgradeProposal) GetDescription() string { return csup.Description } + +// ProposalRoute gets the proposal's router key +func (csup *CancelSoftwareUpgradeProposal) ProposalRoute() string { return RouterKey } + +// ProposalType is "CancelSoftwareUpgrade" +func (csup *CancelSoftwareUpgradeProposal) ProposalType() string { + return ProposalTypeCancelSoftwareUpgrade +} + +// ValidateBasic validates the proposal +func (csup *CancelSoftwareUpgradeProposal) ValidateBasic() error { + return gov.ValidateAbstract(csup) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/types/proposal_test.go b/vendor-shims/cosmossdk-x-upgrade/types/proposal_test.go new file mode 100644 index 00000000..6989663a --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/proposal_test.go @@ -0,0 +1,103 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "cosmossdk.io/x/upgrade/types" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + gov "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" +) + +type ProposalWrapper struct { + Prop gov.Content +} + +func TestContentAccessors(t *testing.T) { + cases := map[string]struct { + p gov.Content + title string + desc string + typ string + str string + }{ + "upgrade": { + p: types.NewSoftwareUpgradeProposal("Title", "desc", types.Plan{ + Name: "due_height", + Info: "https://foo.bar", + Height: 99999999999, + }), + title: "Title", + desc: "desc", + typ: "SoftwareUpgrade", + str: "title:\"Title\" description:\"desc\" plan: height:99999999999 info:\"https://foo.bar\" > ", + }, + "cancel": { + p: types.NewCancelSoftwareUpgradeProposal("Cancel", "bad idea"), + title: "Cancel", + desc: "bad idea", + typ: "CancelSoftwareUpgrade", + str: "title:\"Cancel\" description:\"bad idea\" ", + }, + } + + cdc := codec.NewLegacyAmino() + gov.RegisterLegacyAminoCodec(cdc) + types.RegisterLegacyAminoCodec(cdc) + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + assert.Equal(t, tc.title, tc.p.GetTitle()) + assert.Equal(t, tc.desc, tc.p.GetDescription()) + assert.Equal(t, tc.typ, tc.p.ProposalType()) + assert.Equal(t, "upgrade", tc.p.ProposalRoute()) + assert.Equal(t, tc.str, tc.p.String()) + + // try to encode and decode type to ensure codec works + wrap := ProposalWrapper{tc.p} + bz, err := cdc.Marshal(&wrap) + require.NoError(t, err) + unwrap := ProposalWrapper{} + err = cdc.Unmarshal(bz, &unwrap) + require.NoError(t, err) + + // all methods should look the same + assert.Equal(t, tc.title, unwrap.Prop.GetTitle()) + assert.Equal(t, tc.desc, unwrap.Prop.GetDescription()) + assert.Equal(t, tc.typ, unwrap.Prop.ProposalType()) + assert.Equal(t, "upgrade", unwrap.Prop.ProposalRoute()) + assert.Equal(t, tc.str, unwrap.Prop.String()) + }) + } +} + +// tests a software update proposal can be marshaled and unmarshaled +func TestMarshalSoftwareUpdateProposal(t *testing.T) { + // create proposal + plan := types.Plan{ + Name: "upgrade", + Height: 1000, + } + content := types.NewSoftwareUpgradeProposal("title", "description", plan) + sup, ok := content.(*types.SoftwareUpgradeProposal) + require.True(t, ok) + + // create codec + ir := codectypes.NewInterfaceRegistry() + types.RegisterInterfaces(ir) + gov.RegisterInterfaces(ir) + cdc := codec.NewProtoCodec(ir) + + // marshal message + bz, err := cdc.MarshalJSON(sup) + require.NoError(t, err) + + // unmarshal proposal + newSup := &types.SoftwareUpgradeProposal{} + err = cdc.UnmarshalJSON(bz, newSup) + require.NoError(t, err) +} diff --git a/vendor-shims/cosmossdk-x-upgrade/types/querier.go b/vendor-shims/cosmossdk-x-upgrade/types/querier.go new file mode 100644 index 00000000..d636c6aa --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/querier.go @@ -0,0 +1,7 @@ +package types + +// query endpoints supported by the upgrade Querier +const ( + QueryCurrent = "current" + QueryApplied = "applied" +) diff --git a/vendor-shims/cosmossdk-x-upgrade/types/query.pb.go b/vendor-shims/cosmossdk-x-upgrade/types/query.pb.go new file mode 100644 index 00000000..40ba87e2 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/query.pb.go @@ -0,0 +1,2051 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/upgrade/v1beta1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/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 + +// QueryCurrentPlanRequest is the request type for the Query/CurrentPlan RPC +// method. +type QueryCurrentPlanRequest struct { +} + +func (m *QueryCurrentPlanRequest) Reset() { *m = QueryCurrentPlanRequest{} } +func (m *QueryCurrentPlanRequest) String() string { return proto.CompactTextString(m) } +func (*QueryCurrentPlanRequest) ProtoMessage() {} +func (*QueryCurrentPlanRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{0} +} +func (m *QueryCurrentPlanRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCurrentPlanRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCurrentPlanRequest.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 *QueryCurrentPlanRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCurrentPlanRequest.Merge(m, src) +} +func (m *QueryCurrentPlanRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryCurrentPlanRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCurrentPlanRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCurrentPlanRequest proto.InternalMessageInfo + +// QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC +// method. +type QueryCurrentPlanResponse struct { + // plan is the current upgrade plan. + Plan *Plan `protobuf:"bytes,1,opt,name=plan,proto3" json:"plan,omitempty"` +} + +func (m *QueryCurrentPlanResponse) Reset() { *m = QueryCurrentPlanResponse{} } +func (m *QueryCurrentPlanResponse) String() string { return proto.CompactTextString(m) } +func (*QueryCurrentPlanResponse) ProtoMessage() {} +func (*QueryCurrentPlanResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{1} +} +func (m *QueryCurrentPlanResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryCurrentPlanResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryCurrentPlanResponse.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 *QueryCurrentPlanResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryCurrentPlanResponse.Merge(m, src) +} +func (m *QueryCurrentPlanResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryCurrentPlanResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryCurrentPlanResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryCurrentPlanResponse proto.InternalMessageInfo + +func (m *QueryCurrentPlanResponse) GetPlan() *Plan { + if m != nil { + return m.Plan + } + return nil +} + +// QueryCurrentPlanRequest is the request type for the Query/AppliedPlan RPC +// method. +type QueryAppliedPlanRequest struct { + // name is the name of the applied plan to query for. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (m *QueryAppliedPlanRequest) Reset() { *m = QueryAppliedPlanRequest{} } +func (m *QueryAppliedPlanRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAppliedPlanRequest) ProtoMessage() {} +func (*QueryAppliedPlanRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{2} +} +func (m *QueryAppliedPlanRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAppliedPlanRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAppliedPlanRequest.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 *QueryAppliedPlanRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAppliedPlanRequest.Merge(m, src) +} +func (m *QueryAppliedPlanRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAppliedPlanRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAppliedPlanRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAppliedPlanRequest proto.InternalMessageInfo + +func (m *QueryAppliedPlanRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC +// method. +type QueryAppliedPlanResponse struct { + // height is the block height at which the plan was applied. + Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` +} + +func (m *QueryAppliedPlanResponse) Reset() { *m = QueryAppliedPlanResponse{} } +func (m *QueryAppliedPlanResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAppliedPlanResponse) ProtoMessage() {} +func (*QueryAppliedPlanResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{3} +} +func (m *QueryAppliedPlanResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAppliedPlanResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAppliedPlanResponse.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 *QueryAppliedPlanResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAppliedPlanResponse.Merge(m, src) +} +func (m *QueryAppliedPlanResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAppliedPlanResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAppliedPlanResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAppliedPlanResponse proto.InternalMessageInfo + +func (m *QueryAppliedPlanResponse) GetHeight() int64 { + if m != nil { + return m.Height + } + return 0 +} + +// QueryUpgradedConsensusStateRequest is the request type for the Query/UpgradedConsensusState +// RPC method. +// +// Deprecated: Do not use. +type QueryUpgradedConsensusStateRequest struct { + // last height of the current chain must be sent in request + // as this is the height under which next consensus state is stored + LastHeight int64 `protobuf:"varint,1,opt,name=last_height,json=lastHeight,proto3" json:"last_height,omitempty"` +} + +func (m *QueryUpgradedConsensusStateRequest) Reset() { *m = QueryUpgradedConsensusStateRequest{} } +func (m *QueryUpgradedConsensusStateRequest) String() string { return proto.CompactTextString(m) } +func (*QueryUpgradedConsensusStateRequest) ProtoMessage() {} +func (*QueryUpgradedConsensusStateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{4} +} +func (m *QueryUpgradedConsensusStateRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryUpgradedConsensusStateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryUpgradedConsensusStateRequest.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 *QueryUpgradedConsensusStateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUpgradedConsensusStateRequest.Merge(m, src) +} +func (m *QueryUpgradedConsensusStateRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryUpgradedConsensusStateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUpgradedConsensusStateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryUpgradedConsensusStateRequest proto.InternalMessageInfo + +func (m *QueryUpgradedConsensusStateRequest) GetLastHeight() int64 { + if m != nil { + return m.LastHeight + } + return 0 +} + +// QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState +// RPC method. +// +// Deprecated: Do not use. +type QueryUpgradedConsensusStateResponse struct { + UpgradedConsensusState []byte `protobuf:"bytes,2,opt,name=upgraded_consensus_state,json=upgradedConsensusState,proto3" json:"upgraded_consensus_state,omitempty"` +} + +func (m *QueryUpgradedConsensusStateResponse) Reset() { *m = QueryUpgradedConsensusStateResponse{} } +func (m *QueryUpgradedConsensusStateResponse) String() string { return proto.CompactTextString(m) } +func (*QueryUpgradedConsensusStateResponse) ProtoMessage() {} +func (*QueryUpgradedConsensusStateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{5} +} +func (m *QueryUpgradedConsensusStateResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryUpgradedConsensusStateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryUpgradedConsensusStateResponse.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 *QueryUpgradedConsensusStateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUpgradedConsensusStateResponse.Merge(m, src) +} +func (m *QueryUpgradedConsensusStateResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryUpgradedConsensusStateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUpgradedConsensusStateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryUpgradedConsensusStateResponse proto.InternalMessageInfo + +func (m *QueryUpgradedConsensusStateResponse) GetUpgradedConsensusState() []byte { + if m != nil { + return m.UpgradedConsensusState + } + return nil +} + +// QueryModuleVersionsRequest is the request type for the Query/ModuleVersions +// RPC method. +type QueryModuleVersionsRequest struct { + // module_name is a field to query a specific module + // consensus version from state. Leaving this empty will + // fetch the full list of module versions from state + ModuleName string `protobuf:"bytes,1,opt,name=module_name,json=moduleName,proto3" json:"module_name,omitempty"` +} + +func (m *QueryModuleVersionsRequest) Reset() { *m = QueryModuleVersionsRequest{} } +func (m *QueryModuleVersionsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryModuleVersionsRequest) ProtoMessage() {} +func (*QueryModuleVersionsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{6} +} +func (m *QueryModuleVersionsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryModuleVersionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryModuleVersionsRequest.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 *QueryModuleVersionsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryModuleVersionsRequest.Merge(m, src) +} +func (m *QueryModuleVersionsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryModuleVersionsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryModuleVersionsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryModuleVersionsRequest proto.InternalMessageInfo + +func (m *QueryModuleVersionsRequest) GetModuleName() string { + if m != nil { + return m.ModuleName + } + return "" +} + +// QueryModuleVersionsResponse is the response type for the Query/ModuleVersions +// RPC method. +type QueryModuleVersionsResponse struct { + // module_versions is a list of module names with their consensus versions. + ModuleVersions []*ModuleVersion `protobuf:"bytes,1,rep,name=module_versions,json=moduleVersions,proto3" json:"module_versions,omitempty"` +} + +func (m *QueryModuleVersionsResponse) Reset() { *m = QueryModuleVersionsResponse{} } +func (m *QueryModuleVersionsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryModuleVersionsResponse) ProtoMessage() {} +func (*QueryModuleVersionsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{7} +} +func (m *QueryModuleVersionsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryModuleVersionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryModuleVersionsResponse.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 *QueryModuleVersionsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryModuleVersionsResponse.Merge(m, src) +} +func (m *QueryModuleVersionsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryModuleVersionsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryModuleVersionsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryModuleVersionsResponse proto.InternalMessageInfo + +func (m *QueryModuleVersionsResponse) GetModuleVersions() []*ModuleVersion { + if m != nil { + return m.ModuleVersions + } + return nil +} + +// QueryAuthorityRequest is the request type for Query/Authority +type QueryAuthorityRequest struct { +} + +func (m *QueryAuthorityRequest) Reset() { *m = QueryAuthorityRequest{} } +func (m *QueryAuthorityRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAuthorityRequest) ProtoMessage() {} +func (*QueryAuthorityRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{8} +} +func (m *QueryAuthorityRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAuthorityRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAuthorityRequest.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 *QueryAuthorityRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAuthorityRequest.Merge(m, src) +} +func (m *QueryAuthorityRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAuthorityRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAuthorityRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAuthorityRequest proto.InternalMessageInfo + +// QueryAuthorityResponse is the response type for Query/Authority +type QueryAuthorityResponse struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *QueryAuthorityResponse) Reset() { *m = QueryAuthorityResponse{} } +func (m *QueryAuthorityResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAuthorityResponse) ProtoMessage() {} +func (*QueryAuthorityResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_4a334d07ad8374f0, []int{9} +} +func (m *QueryAuthorityResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAuthorityResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAuthorityResponse.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 *QueryAuthorityResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAuthorityResponse.Merge(m, src) +} +func (m *QueryAuthorityResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAuthorityResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAuthorityResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAuthorityResponse proto.InternalMessageInfo + +func (m *QueryAuthorityResponse) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func init() { + proto.RegisterType((*QueryCurrentPlanRequest)(nil), "cosmos.upgrade.v1beta1.QueryCurrentPlanRequest") + proto.RegisterType((*QueryCurrentPlanResponse)(nil), "cosmos.upgrade.v1beta1.QueryCurrentPlanResponse") + proto.RegisterType((*QueryAppliedPlanRequest)(nil), "cosmos.upgrade.v1beta1.QueryAppliedPlanRequest") + proto.RegisterType((*QueryAppliedPlanResponse)(nil), "cosmos.upgrade.v1beta1.QueryAppliedPlanResponse") + proto.RegisterType((*QueryUpgradedConsensusStateRequest)(nil), "cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateRequest") + proto.RegisterType((*QueryUpgradedConsensusStateResponse)(nil), "cosmos.upgrade.v1beta1.QueryUpgradedConsensusStateResponse") + proto.RegisterType((*QueryModuleVersionsRequest)(nil), "cosmos.upgrade.v1beta1.QueryModuleVersionsRequest") + proto.RegisterType((*QueryModuleVersionsResponse)(nil), "cosmos.upgrade.v1beta1.QueryModuleVersionsResponse") + proto.RegisterType((*QueryAuthorityRequest)(nil), "cosmos.upgrade.v1beta1.QueryAuthorityRequest") + proto.RegisterType((*QueryAuthorityResponse)(nil), "cosmos.upgrade.v1beta1.QueryAuthorityResponse") +} + +func init() { + proto.RegisterFile("cosmos/upgrade/v1beta1/query.proto", fileDescriptor_4a334d07ad8374f0) +} + +var fileDescriptor_4a334d07ad8374f0 = []byte{ + // 685 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcf, 0x4f, 0x13, 0x4f, + 0x1c, 0x65, 0x0a, 0x5f, 0xf8, 0xf2, 0xa9, 0x01, 0x33, 0xc4, 0xba, 0xac, 0xa4, 0xd6, 0x01, 0x15, + 0x23, 0xdd, 0x85, 0xd6, 0x70, 0x40, 0x63, 0x14, 0x0e, 0x8a, 0x11, 0xa2, 0x35, 0x7a, 0xf0, 0xd2, + 0x0c, 0xec, 0xa4, 0x34, 0xb4, 0xbb, 0xcb, 0xce, 0x2c, 0x91, 0x10, 0x3c, 0x70, 0xf2, 0x68, 0xe2, + 0xcd, 0x83, 0x37, 0x13, 0xff, 0x00, 0xaf, 0xde, 0x8d, 0x27, 0xa2, 0x17, 0x63, 0x3c, 0x18, 0xf0, + 0x0f, 0x31, 0x3b, 0x33, 0x25, 0xfd, 0xb1, 0xbb, 0xa0, 0xb7, 0xce, 0xce, 0x7b, 0xef, 0xf3, 0xde, + 0xce, 0xbc, 0x2d, 0x90, 0x75, 0x8f, 0x37, 0x3d, 0x6e, 0x87, 0x7e, 0x2d, 0xa0, 0x0e, 0xb3, 0xb7, + 0xe7, 0xd6, 0x98, 0xa0, 0x73, 0xf6, 0x56, 0xc8, 0x82, 0x1d, 0xcb, 0x0f, 0x3c, 0xe1, 0xe1, 0x9c, + 0xc2, 0x58, 0x1a, 0x63, 0x69, 0x8c, 0x39, 0x51, 0xf3, 0xbc, 0x5a, 0x83, 0xd9, 0xd4, 0xaf, 0xdb, + 0xd4, 0x75, 0x3d, 0x41, 0x45, 0xdd, 0x73, 0xb9, 0x62, 0x99, 0x53, 0x09, 0xca, 0x2d, 0x15, 0x85, + 0x1a, 0x57, 0xa8, 0xaa, 0x5c, 0xd9, 0x7a, 0x90, 0x5c, 0x90, 0x71, 0x38, 0xff, 0x38, 0x72, 0xb1, + 0x14, 0x06, 0x01, 0x73, 0xc5, 0xa3, 0x06, 0x75, 0x2b, 0x6c, 0x2b, 0x64, 0x5c, 0x90, 0x87, 0x60, + 0xf4, 0x6e, 0x71, 0xdf, 0x73, 0x39, 0xc3, 0xb3, 0x30, 0xe0, 0x37, 0xa8, 0x6b, 0xa0, 0x02, 0x9a, + 0xce, 0x96, 0x26, 0xac, 0x78, 0xf3, 0x96, 0xe4, 0x48, 0x24, 0x29, 0xea, 0x41, 0x77, 0x7d, 0xbf, + 0x51, 0x67, 0x4e, 0xdb, 0x20, 0x8c, 0x61, 0xc0, 0xa5, 0x4d, 0x26, 0xc5, 0x86, 0x2b, 0xf2, 0x37, + 0x29, 0xe9, 0xe1, 0x1d, 0x70, 0x3d, 0x3c, 0x07, 0x83, 0x1b, 0xac, 0x5e, 0xdb, 0x10, 0x92, 0xd1, + 0x5f, 0xd1, 0x2b, 0xb2, 0x0c, 0x44, 0x72, 0x9e, 0x2a, 0x17, 0xce, 0x52, 0x84, 0x76, 0x79, 0xc8, + 0x9f, 0x08, 0x2a, 0x58, 0x6b, 0xda, 0x45, 0xc8, 0x36, 0x28, 0x17, 0xd5, 0x0e, 0x09, 0x88, 0x1e, + 0xdd, 0x97, 0x4f, 0x16, 0x32, 0x06, 0x22, 0x2f, 0x61, 0x32, 0x55, 0x4a, 0x3b, 0x59, 0x01, 0x43, + 0x47, 0x76, 0xaa, 0xeb, 0x2d, 0x48, 0x95, 0x47, 0x18, 0x23, 0x53, 0x40, 0xd3, 0x67, 0x16, 0xc7, + 0x7e, 0x7c, 0x2c, 0x8e, 0xaa, 0xb7, 0x53, 0xe4, 0xce, 0x66, 0x61, 0xd6, 0xba, 0x51, 0xae, 0xe4, + 0xc2, 0x58, 0xd9, 0x68, 0xf2, 0x83, 0x81, 0xff, 0xd1, 0xd9, 0x0c, 0xa9, 0x80, 0x29, 0xe7, 0xaf, + 0x78, 0x4e, 0xd8, 0x60, 0xcf, 0x58, 0xc0, 0xa3, 0x43, 0x6f, 0x8b, 0xd0, 0x94, 0x1b, 0xd5, 0xb6, + 0xf7, 0x06, 0xea, 0xd1, 0x2a, 0x6d, 0xb2, 0x85, 0xb1, 0xaf, 0xbd, 0x53, 0xc9, 0x3e, 0x82, 0x0b, + 0xb1, 0xa2, 0x3a, 0xcc, 0x2a, 0x8c, 0x6a, 0xd5, 0x6d, 0xbd, 0x65, 0xa0, 0x42, 0xff, 0x74, 0xb6, + 0x74, 0x39, 0xe9, 0x78, 0x3b, 0x84, 0x2a, 0x23, 0xcd, 0x0e, 0xdd, 0x78, 0x13, 0x33, 0x70, 0x4e, + 0x9d, 0x6b, 0x28, 0x36, 0xbc, 0xa0, 0x2e, 0x76, 0x74, 0xa6, 0x38, 0xf4, 0x3c, 0xb9, 0x07, 0xb9, + 0x6e, 0xb4, 0x36, 0x6b, 0xc0, 0x10, 0x75, 0x9c, 0x80, 0x71, 0xae, 0xe3, 0xb7, 0x96, 0xb1, 0x42, + 0xa5, 0xb7, 0x43, 0xf0, 0x9f, 0x54, 0xc2, 0xef, 0x10, 0x64, 0xdb, 0x6e, 0x34, 0xb6, 0x93, 0xc2, + 0x25, 0xd4, 0xc2, 0x9c, 0x3d, 0x3d, 0x41, 0x79, 0x25, 0x33, 0xfb, 0xdf, 0x7e, 0xbf, 0xc9, 0x5c, + 0xc1, 0x53, 0x76, 0x42, 0x5b, 0xd7, 0x15, 0xa9, 0x1a, 0x15, 0x05, 0xbf, 0x47, 0x90, 0x6d, 0xbb, + 0xf5, 0x27, 0x18, 0xec, 0xad, 0xd3, 0x09, 0x06, 0x63, 0x0a, 0x45, 0xca, 0xd2, 0x60, 0x11, 0x5f, + 0x4f, 0x32, 0x48, 0x15, 0x49, 0x1a, 0xb4, 0x77, 0xa3, 0x4b, 0xb7, 0x87, 0x7f, 0x22, 0xc8, 0xc5, + 0xd7, 0x03, 0x2f, 0xa4, 0x3a, 0x48, 0xad, 0xa7, 0x79, 0xf3, 0x9f, 0xb8, 0x3a, 0xc8, 0xb2, 0x0c, + 0x72, 0x07, 0xdf, 0xb6, 0xd3, 0xbf, 0x8b, 0x3d, 0x6d, 0xb5, 0x77, 0xdb, 0xbe, 0x09, 0x7b, 0xaf, + 0x32, 0x08, 0x7f, 0x42, 0x30, 0xd2, 0x59, 0x14, 0x5c, 0x4a, 0xb5, 0x16, 0x5b, 0x55, 0xb3, 0xfc, + 0x57, 0x1c, 0x1d, 0x63, 0xf1, 0x4b, 0x6f, 0x73, 0x64, 0xb2, 0x6b, 0xf8, 0x6a, 0x52, 0xb2, 0xae, + 0xea, 0xe2, 0x0f, 0x08, 0x86, 0x8f, 0x6b, 0x83, 0x8b, 0xe9, 0x77, 0xa2, 0xab, 0x8c, 0xa6, 0x75, + 0x5a, 0xb8, 0x36, 0x7c, 0xab, 0xd7, 0xf0, 0xbc, 0x34, 0x3c, 0x89, 0x2f, 0x25, 0xde, 0xa9, 0x96, + 0xca, 0xe2, 0xfc, 0xe7, 0xc3, 0x3c, 0x3a, 0x38, 0xcc, 0xa3, 0x5f, 0x87, 0x79, 0xf4, 0xfa, 0x28, + 0xdf, 0x77, 0x70, 0x94, 0xef, 0xfb, 0x7e, 0x94, 0xef, 0x7b, 0x3e, 0xa1, 0xb8, 0xdc, 0xd9, 0xb4, + 0xea, 0x9e, 0xfd, 0xe2, 0x58, 0x43, 0xec, 0xf8, 0x8c, 0xaf, 0x0d, 0xca, 0xbf, 0xb0, 0xf2, 0x9f, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x04, 0x0d, 0x4f, 0xe3, 0x5f, 0x07, 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 { + // CurrentPlan queries the current upgrade plan. + CurrentPlan(ctx context.Context, in *QueryCurrentPlanRequest, opts ...grpc.CallOption) (*QueryCurrentPlanResponse, error) + // AppliedPlan queries a previously applied upgrade plan by its name. + AppliedPlan(ctx context.Context, in *QueryAppliedPlanRequest, opts ...grpc.CallOption) (*QueryAppliedPlanResponse, error) + // UpgradedConsensusState queries the consensus state that will serve + // as a trusted kernel for the next version of this chain. It will only be + // stored at the last height of this chain. + // UpgradedConsensusState RPC not supported with legacy querier + // This rpc is deprecated now that IBC has its own replacement + // (https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54) + UpgradedConsensusState(ctx context.Context, in *QueryUpgradedConsensusStateRequest, opts ...grpc.CallOption) (*QueryUpgradedConsensusStateResponse, error) + // ModuleVersions queries the list of module versions from state. + ModuleVersions(ctx context.Context, in *QueryModuleVersionsRequest, opts ...grpc.CallOption) (*QueryModuleVersionsResponse, error) + // Returns the account with authority to conduct upgrades + Authority(ctx context.Context, in *QueryAuthorityRequest, opts ...grpc.CallOption) (*QueryAuthorityResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) CurrentPlan(ctx context.Context, in *QueryCurrentPlanRequest, opts ...grpc.CallOption) (*QueryCurrentPlanResponse, error) { + out := new(QueryCurrentPlanResponse) + err := c.cc.Invoke(ctx, "/cosmos.upgrade.v1beta1.Query/CurrentPlan", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AppliedPlan(ctx context.Context, in *QueryAppliedPlanRequest, opts ...grpc.CallOption) (*QueryAppliedPlanResponse, error) { + out := new(QueryAppliedPlanResponse) + err := c.cc.Invoke(ctx, "/cosmos.upgrade.v1beta1.Query/AppliedPlan", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. +func (c *queryClient) UpgradedConsensusState(ctx context.Context, in *QueryUpgradedConsensusStateRequest, opts ...grpc.CallOption) (*QueryUpgradedConsensusStateResponse, error) { + out := new(QueryUpgradedConsensusStateResponse) + err := c.cc.Invoke(ctx, "/cosmos.upgrade.v1beta1.Query/UpgradedConsensusState", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ModuleVersions(ctx context.Context, in *QueryModuleVersionsRequest, opts ...grpc.CallOption) (*QueryModuleVersionsResponse, error) { + out := new(QueryModuleVersionsResponse) + err := c.cc.Invoke(ctx, "/cosmos.upgrade.v1beta1.Query/ModuleVersions", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) Authority(ctx context.Context, in *QueryAuthorityRequest, opts ...grpc.CallOption) (*QueryAuthorityResponse, error) { + out := new(QueryAuthorityResponse) + err := c.cc.Invoke(ctx, "/cosmos.upgrade.v1beta1.Query/Authority", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // CurrentPlan queries the current upgrade plan. + CurrentPlan(context.Context, *QueryCurrentPlanRequest) (*QueryCurrentPlanResponse, error) + // AppliedPlan queries a previously applied upgrade plan by its name. + AppliedPlan(context.Context, *QueryAppliedPlanRequest) (*QueryAppliedPlanResponse, error) + // UpgradedConsensusState queries the consensus state that will serve + // as a trusted kernel for the next version of this chain. It will only be + // stored at the last height of this chain. + // UpgradedConsensusState RPC not supported with legacy querier + // This rpc is deprecated now that IBC has its own replacement + // (https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54) + UpgradedConsensusState(context.Context, *QueryUpgradedConsensusStateRequest) (*QueryUpgradedConsensusStateResponse, error) + // ModuleVersions queries the list of module versions from state. + ModuleVersions(context.Context, *QueryModuleVersionsRequest) (*QueryModuleVersionsResponse, error) + // Returns the account with authority to conduct upgrades + Authority(context.Context, *QueryAuthorityRequest) (*QueryAuthorityResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) CurrentPlan(ctx context.Context, req *QueryCurrentPlanRequest) (*QueryCurrentPlanResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CurrentPlan not implemented") +} +func (*UnimplementedQueryServer) AppliedPlan(ctx context.Context, req *QueryAppliedPlanRequest) (*QueryAppliedPlanResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AppliedPlan not implemented") +} +func (*UnimplementedQueryServer) UpgradedConsensusState(ctx context.Context, req *QueryUpgradedConsensusStateRequest) (*QueryUpgradedConsensusStateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpgradedConsensusState not implemented") +} +func (*UnimplementedQueryServer) ModuleVersions(ctx context.Context, req *QueryModuleVersionsRequest) (*QueryModuleVersionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ModuleVersions not implemented") +} +func (*UnimplementedQueryServer) Authority(ctx context.Context, req *QueryAuthorityRequest) (*QueryAuthorityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Authority not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_CurrentPlan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryCurrentPlanRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).CurrentPlan(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.upgrade.v1beta1.Query/CurrentPlan", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CurrentPlan(ctx, req.(*QueryCurrentPlanRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AppliedPlan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAppliedPlanRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AppliedPlan(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.upgrade.v1beta1.Query/AppliedPlan", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AppliedPlan(ctx, req.(*QueryAppliedPlanRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_UpgradedConsensusState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryUpgradedConsensusStateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).UpgradedConsensusState(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.upgrade.v1beta1.Query/UpgradedConsensusState", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).UpgradedConsensusState(ctx, req.(*QueryUpgradedConsensusStateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ModuleVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryModuleVersionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ModuleVersions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.upgrade.v1beta1.Query/ModuleVersions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ModuleVersions(ctx, req.(*QueryModuleVersionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Authority_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAuthorityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Authority(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.upgrade.v1beta1.Query/Authority", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Authority(ctx, req.(*QueryAuthorityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var Query_serviceDesc = _Query_serviceDesc +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "cosmos.upgrade.v1beta1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CurrentPlan", + Handler: _Query_CurrentPlan_Handler, + }, + { + MethodName: "AppliedPlan", + Handler: _Query_AppliedPlan_Handler, + }, + { + MethodName: "UpgradedConsensusState", + Handler: _Query_UpgradedConsensusState_Handler, + }, + { + MethodName: "ModuleVersions", + Handler: _Query_ModuleVersions_Handler, + }, + { + MethodName: "Authority", + Handler: _Query_Authority_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cosmos/upgrade/v1beta1/query.proto", +} + +func (m *QueryCurrentPlanRequest) 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 *QueryCurrentPlanRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCurrentPlanRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryCurrentPlanResponse) 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 *QueryCurrentPlanResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryCurrentPlanResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Plan != nil { + { + size, err := m.Plan.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 (m *QueryAppliedPlanRequest) 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 *QueryAppliedPlanRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAppliedPlanRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAppliedPlanResponse) 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 *QueryAppliedPlanResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAppliedPlanResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Height != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryUpgradedConsensusStateRequest) 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 *QueryUpgradedConsensusStateRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUpgradedConsensusStateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.LastHeight)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryUpgradedConsensusStateResponse) 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 *QueryUpgradedConsensusStateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUpgradedConsensusStateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.UpgradedConsensusState) > 0 { + i -= len(m.UpgradedConsensusState) + copy(dAtA[i:], m.UpgradedConsensusState) + i = encodeVarintQuery(dAtA, i, uint64(len(m.UpgradedConsensusState))) + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} + +func (m *QueryModuleVersionsRequest) 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 *QueryModuleVersionsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryModuleVersionsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ModuleName) > 0 { + i -= len(m.ModuleName) + copy(dAtA[i:], m.ModuleName) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ModuleName))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryModuleVersionsResponse) 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 *QueryModuleVersionsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryModuleVersionsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ModuleVersions) > 0 { + for iNdEx := len(m.ModuleVersions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ModuleVersions[iNdEx].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 (m *QueryAuthorityRequest) 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 *QueryAuthorityRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuthorityRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryAuthorityResponse) 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 *QueryAuthorityResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAuthorityResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func 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 *QueryCurrentPlanRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryCurrentPlanResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Plan != nil { + l = m.Plan.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAppliedPlanRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAppliedPlanResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Height != 0 { + n += 1 + sovQuery(uint64(m.Height)) + } + return n +} + +func (m *QueryUpgradedConsensusStateRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.LastHeight != 0 { + n += 1 + sovQuery(uint64(m.LastHeight)) + } + return n +} + +func (m *QueryUpgradedConsensusStateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.UpgradedConsensusState) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryModuleVersionsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ModuleName) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryModuleVersionsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ModuleVersions) > 0 { + for _, e := range m.ModuleVersions { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryAuthorityRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryAuthorityResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + 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 *QueryCurrentPlanRequest) 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: QueryCurrentPlanRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCurrentPlanRequest: 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 *QueryCurrentPlanResponse) 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: QueryCurrentPlanResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryCurrentPlanResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Plan", 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 m.Plan == nil { + m.Plan = &Plan{} + } + if err := m.Plan.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAppliedPlanRequest) 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: QueryAppliedPlanRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAppliedPlanRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAppliedPlanResponse) 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: QueryAppliedPlanResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAppliedPlanResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *QueryUpgradedConsensusStateRequest) 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: QueryUpgradedConsensusStateRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryUpgradedConsensusStateRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastHeight", wireType) + } + m.LastHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *QueryUpgradedConsensusStateResponse) 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: QueryUpgradedConsensusStateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryUpgradedConsensusStateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpgradedConsensusState", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UpgradedConsensusState = append(m.UpgradedConsensusState[:0], dAtA[iNdEx:postIndex]...) + if m.UpgradedConsensusState == nil { + m.UpgradedConsensusState = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryModuleVersionsRequest) 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: QueryModuleVersionsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryModuleVersionsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ModuleName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ModuleName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryModuleVersionsResponse) 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: QueryModuleVersionsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryModuleVersionsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ModuleVersions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ModuleVersions = append(m.ModuleVersions, &ModuleVersion{}) + if err := m.ModuleVersions[len(m.ModuleVersions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAuthorityRequest) 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: QueryAuthorityRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAuthorityRequest: 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 *QueryAuthorityResponse) 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: QueryAuthorityResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAuthorityResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + 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/vendor-shims/cosmossdk-x-upgrade/types/query.pb.gw.go b/vendor-shims/cosmossdk-x-upgrade/types/query.pb.gw.go new file mode 100644 index 00000000..036a84c1 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/query.pb.gw.go @@ -0,0 +1,503 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: cosmos/upgrade/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_CurrentPlan_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCurrentPlanRequest + var metadata runtime.ServerMetadata + + msg, err := client.CurrentPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_CurrentPlan_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryCurrentPlanRequest + var metadata runtime.ServerMetadata + + msg, err := server.CurrentPlan(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_AppliedPlan_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAppliedPlanRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + msg, err := client.AppliedPlan(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AppliedPlan_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAppliedPlanRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + msg, err := server.AppliedPlan(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_UpgradedConsensusState_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUpgradedConsensusStateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["last_height"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "last_height") + } + + protoReq.LastHeight, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "last_height", err) + } + + msg, err := client.UpgradedConsensusState(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_UpgradedConsensusState_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUpgradedConsensusStateRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["last_height"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "last_height") + } + + protoReq.LastHeight, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "last_height", err) + } + + msg, err := server.UpgradedConsensusState(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_ModuleVersions_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_ModuleVersions_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryModuleVersionsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ModuleVersions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ModuleVersions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ModuleVersions_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryModuleVersionsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ModuleVersions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ModuleVersions(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_Authority_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAuthorityRequest + var metadata runtime.ServerMetadata + + msg, err := client.Authority(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Authority_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAuthorityRequest + var metadata runtime.ServerMetadata + + msg, err := server.Authority(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_CurrentPlan_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_CurrentPlan_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_CurrentPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AppliedPlan_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_AppliedPlan_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_AppliedPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UpgradedConsensusState_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_UpgradedConsensusState_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_UpgradedConsensusState_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ModuleVersions_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_ModuleVersions_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_ModuleVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Authority_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_Authority_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_Authority_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_CurrentPlan_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_CurrentPlan_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_CurrentPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AppliedPlan_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_AppliedPlan_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_AppliedPlan_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UpgradedConsensusState_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_UpgradedConsensusState_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_UpgradedConsensusState_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ModuleVersions_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_ModuleVersions_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_ModuleVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Authority_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_Authority_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_Authority_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_CurrentPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "upgrade", "v1beta1", "current_plan"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AppliedPlan_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"cosmos", "upgrade", "v1beta1", "applied_plan", "name"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_UpgradedConsensusState_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"cosmos", "upgrade", "v1beta1", "upgraded_consensus_state", "last_height"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ModuleVersions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "upgrade", "v1beta1", "module_versions"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_Authority_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "upgrade", "v1beta1", "authority"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_CurrentPlan_0 = runtime.ForwardResponseMessage + + forward_Query_AppliedPlan_0 = runtime.ForwardResponseMessage + + forward_Query_UpgradedConsensusState_0 = runtime.ForwardResponseMessage + + forward_Query_ModuleVersions_0 = runtime.ForwardResponseMessage + + forward_Query_Authority_0 = runtime.ForwardResponseMessage +) diff --git a/vendor-shims/cosmossdk-x-upgrade/types/tx.pb.go b/vendor-shims/cosmossdk-x-upgrade/types/tx.pb.go new file mode 100644 index 00000000..5e3f998e --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/tx.pb.go @@ -0,0 +1,931 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/upgrade/v1beta1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + 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 + +// MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type. +type MsgSoftwareUpgrade struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // plan is the upgrade plan. + Plan Plan `protobuf:"bytes,2,opt,name=plan,proto3" json:"plan"` +} + +func (m *MsgSoftwareUpgrade) Reset() { *m = MsgSoftwareUpgrade{} } +func (m *MsgSoftwareUpgrade) String() string { return proto.CompactTextString(m) } +func (*MsgSoftwareUpgrade) ProtoMessage() {} +func (*MsgSoftwareUpgrade) Descriptor() ([]byte, []int) { + return fileDescriptor_2852c16e3ab79fef, []int{0} +} +func (m *MsgSoftwareUpgrade) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSoftwareUpgrade) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSoftwareUpgrade.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 *MsgSoftwareUpgrade) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSoftwareUpgrade.Merge(m, src) +} +func (m *MsgSoftwareUpgrade) XXX_Size() int { + return m.Size() +} +func (m *MsgSoftwareUpgrade) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSoftwareUpgrade.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSoftwareUpgrade proto.InternalMessageInfo + +func (m *MsgSoftwareUpgrade) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgSoftwareUpgrade) GetPlan() Plan { + if m != nil { + return m.Plan + } + return Plan{} +} + +// MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type. +type MsgSoftwareUpgradeResponse struct { +} + +func (m *MsgSoftwareUpgradeResponse) Reset() { *m = MsgSoftwareUpgradeResponse{} } +func (m *MsgSoftwareUpgradeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSoftwareUpgradeResponse) ProtoMessage() {} +func (*MsgSoftwareUpgradeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_2852c16e3ab79fef, []int{1} +} +func (m *MsgSoftwareUpgradeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSoftwareUpgradeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSoftwareUpgradeResponse.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 *MsgSoftwareUpgradeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSoftwareUpgradeResponse.Merge(m, src) +} +func (m *MsgSoftwareUpgradeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSoftwareUpgradeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSoftwareUpgradeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSoftwareUpgradeResponse proto.InternalMessageInfo + +// MsgCancelUpgrade is the Msg/CancelUpgrade request type. +type MsgCancelUpgrade struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (m *MsgCancelUpgrade) Reset() { *m = MsgCancelUpgrade{} } +func (m *MsgCancelUpgrade) String() string { return proto.CompactTextString(m) } +func (*MsgCancelUpgrade) ProtoMessage() {} +func (*MsgCancelUpgrade) Descriptor() ([]byte, []int) { + return fileDescriptor_2852c16e3ab79fef, []int{2} +} +func (m *MsgCancelUpgrade) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCancelUpgrade) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCancelUpgrade.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 *MsgCancelUpgrade) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCancelUpgrade.Merge(m, src) +} +func (m *MsgCancelUpgrade) XXX_Size() int { + return m.Size() +} +func (m *MsgCancelUpgrade) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCancelUpgrade.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCancelUpgrade proto.InternalMessageInfo + +func (m *MsgCancelUpgrade) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +// MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type. +type MsgCancelUpgradeResponse struct { +} + +func (m *MsgCancelUpgradeResponse) Reset() { *m = MsgCancelUpgradeResponse{} } +func (m *MsgCancelUpgradeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCancelUpgradeResponse) ProtoMessage() {} +func (*MsgCancelUpgradeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_2852c16e3ab79fef, []int{3} +} +func (m *MsgCancelUpgradeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCancelUpgradeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCancelUpgradeResponse.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 *MsgCancelUpgradeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCancelUpgradeResponse.Merge(m, src) +} +func (m *MsgCancelUpgradeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCancelUpgradeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCancelUpgradeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCancelUpgradeResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgSoftwareUpgrade)(nil), "cosmos.upgrade.v1beta1.MsgSoftwareUpgrade") + proto.RegisterType((*MsgSoftwareUpgradeResponse)(nil), "cosmos.upgrade.v1beta1.MsgSoftwareUpgradeResponse") + proto.RegisterType((*MsgCancelUpgrade)(nil), "cosmos.upgrade.v1beta1.MsgCancelUpgrade") + proto.RegisterType((*MsgCancelUpgradeResponse)(nil), "cosmos.upgrade.v1beta1.MsgCancelUpgradeResponse") +} + +func init() { proto.RegisterFile("cosmos/upgrade/v1beta1/tx.proto", fileDescriptor_2852c16e3ab79fef) } + +var fileDescriptor_2852c16e3ab79fef = []byte{ + // 423 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xce, 0x2f, 0xce, + 0xcd, 0x2f, 0xd6, 0x2f, 0x2d, 0x48, 0x2f, 0x4a, 0x4c, 0x49, 0xd5, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, + 0x49, 0x34, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x83, 0x28, 0xd0, + 0x83, 0x2a, 0xd0, 0x83, 0x2a, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x2b, 0xd1, 0x07, 0xb1, + 0x20, 0xaa, 0xa5, 0x24, 0x21, 0xaa, 0xe3, 0x21, 0x12, 0x50, 0xad, 0x10, 0x29, 0x15, 0x1c, 0x36, + 0xc1, 0x0c, 0x86, 0xa8, 0x12, 0x87, 0xaa, 0xca, 0x2d, 0x4e, 0xd7, 0x2f, 0x33, 0x04, 0x51, 0x50, + 0x09, 0xc1, 0xc4, 0xdc, 0xcc, 0xbc, 0x7c, 0x7d, 0x30, 0x09, 0x11, 0x52, 0x3a, 0xc7, 0xc8, 0x25, + 0xe4, 0x5b, 0x9c, 0x1e, 0x9c, 0x9f, 0x56, 0x52, 0x9e, 0x58, 0x94, 0x1a, 0x0a, 0x31, 0x48, 0xc8, + 0x8c, 0x8b, 0x33, 0xb1, 0xb4, 0x24, 0x23, 0xbf, 0x28, 0xb3, 0xa4, 0x52, 0x82, 0x51, 0x81, 0x51, + 0x83, 0xd3, 0x49, 0xe2, 0xd2, 0x16, 0x5d, 0x11, 0xa8, 0x6b, 0x1c, 0x53, 0x52, 0x8a, 0x52, 0x8b, + 0x8b, 0x83, 0x4b, 0x8a, 0x32, 0xf3, 0xd2, 0x83, 0x10, 0x4a, 0x85, 0xac, 0xb9, 0x58, 0x0a, 0x72, + 0x12, 0xf3, 0x24, 0x98, 0x14, 0x18, 0x35, 0xb8, 0x8d, 0x64, 0xf4, 0xb0, 0x7b, 0x5c, 0x2f, 0x20, + 0x27, 0x31, 0xcf, 0x89, 0xf3, 0xc4, 0x3d, 0x79, 0x86, 0x15, 0xcf, 0x37, 0x68, 0x31, 0x06, 0x81, + 0x35, 0x59, 0x39, 0x5f, 0xda, 0xa2, 0xcb, 0x0f, 0xd1, 0xa1, 0x5b, 0x9c, 0x92, 0xad, 0x60, 0xa0, + 0x67, 0x62, 0xd6, 0xf4, 0x7c, 0x83, 0x16, 0xc2, 0xfc, 0xae, 0xe7, 0x1b, 0xb4, 0x64, 0x11, 0x2a, + 0xf4, 0x31, 0x5d, 0xae, 0x64, 0xc8, 0x25, 0x85, 0x29, 0x1a, 0x94, 0x5a, 0x5c, 0x90, 0x9f, 0x57, + 0x9c, 0x6a, 0x25, 0x8c, 0xc5, 0x0a, 0xa5, 0x5e, 0x46, 0x2e, 0x01, 0xdf, 0xe2, 0x74, 0xe7, 0xc4, + 0xbc, 0xe4, 0xd4, 0x1c, 0x0a, 0x43, 0xc0, 0xca, 0x91, 0x28, 0x4f, 0x48, 0xa3, 0x7a, 0x02, 0xc5, + 0x6a, 0x25, 0x7d, 0x2e, 0x09, 0x74, 0x31, 0xbc, 0x1e, 0x30, 0x9a, 0xc1, 0xc4, 0xc5, 0xec, 0x5b, + 0x9c, 0x2e, 0xd4, 0xc6, 0xc8, 0xc5, 0x8f, 0x1e, 0x93, 0x5a, 0xb8, 0xe2, 0x00, 0x33, 0x94, 0xa4, + 0x8c, 0x88, 0x57, 0x0b, 0x73, 0x90, 0x92, 0xf0, 0x29, 0x4c, 0x07, 0x09, 0x35, 0x30, 0x72, 0xf1, + 0xa2, 0x06, 0xa7, 0x06, 0x1e, 0xa3, 0x51, 0x54, 0x4a, 0x19, 0x10, 0xab, 0x12, 0xaf, 0x13, 0xa4, + 0x58, 0x1b, 0x40, 0x29, 0xcb, 0xc9, 0xec, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, + 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, + 0xa2, 0x64, 0x20, 0x3a, 0x8a, 0x53, 0xb2, 0xf5, 0x32, 0xf3, 0xf5, 0x2b, 0xe0, 0x79, 0xaa, 0xa4, + 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x9c, 0x3d, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x63, + 0xb7, 0xaa, 0xa0, 0xdc, 0x03, 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 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // SoftwareUpgrade is a governance operation for initiating a software upgrade. + SoftwareUpgrade(ctx context.Context, in *MsgSoftwareUpgrade, opts ...grpc.CallOption) (*MsgSoftwareUpgradeResponse, error) + // CancelUpgrade is a governance operation for cancelling a previously + // approved software upgrade. + CancelUpgrade(ctx context.Context, in *MsgCancelUpgrade, opts ...grpc.CallOption) (*MsgCancelUpgradeResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) SoftwareUpgrade(ctx context.Context, in *MsgSoftwareUpgrade, opts ...grpc.CallOption) (*MsgSoftwareUpgradeResponse, error) { + out := new(MsgSoftwareUpgradeResponse) + err := c.cc.Invoke(ctx, "/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CancelUpgrade(ctx context.Context, in *MsgCancelUpgrade, opts ...grpc.CallOption) (*MsgCancelUpgradeResponse, error) { + out := new(MsgCancelUpgradeResponse) + err := c.cc.Invoke(ctx, "/cosmos.upgrade.v1beta1.Msg/CancelUpgrade", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // SoftwareUpgrade is a governance operation for initiating a software upgrade. + SoftwareUpgrade(context.Context, *MsgSoftwareUpgrade) (*MsgSoftwareUpgradeResponse, error) + // CancelUpgrade is a governance operation for cancelling a previously + // approved software upgrade. + CancelUpgrade(context.Context, *MsgCancelUpgrade) (*MsgCancelUpgradeResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) SoftwareUpgrade(ctx context.Context, req *MsgSoftwareUpgrade) (*MsgSoftwareUpgradeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SoftwareUpgrade not implemented") +} +func (*UnimplementedMsgServer) CancelUpgrade(ctx context.Context, req *MsgCancelUpgrade) (*MsgCancelUpgradeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CancelUpgrade not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_SoftwareUpgrade_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSoftwareUpgrade) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SoftwareUpgrade(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.upgrade.v1beta1.Msg/SoftwareUpgrade", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SoftwareUpgrade(ctx, req.(*MsgSoftwareUpgrade)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CancelUpgrade_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCancelUpgrade) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CancelUpgrade(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.upgrade.v1beta1.Msg/CancelUpgrade", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CancelUpgrade(ctx, req.(*MsgCancelUpgrade)) + } + return interceptor(ctx, in, info, handler) +} + +var Msg_serviceDesc = _Msg_serviceDesc +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "cosmos.upgrade.v1beta1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SoftwareUpgrade", + Handler: _Msg_SoftwareUpgrade_Handler, + }, + { + MethodName: "CancelUpgrade", + Handler: _Msg_CancelUpgrade_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cosmos/upgrade/v1beta1/tx.proto", +} + +func (m *MsgSoftwareUpgrade) 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 *MsgSoftwareUpgrade) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSoftwareUpgrade) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Plan.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSoftwareUpgradeResponse) 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 *MsgSoftwareUpgradeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSoftwareUpgradeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgCancelUpgrade) 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 *MsgCancelUpgrade) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCancelUpgrade) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCancelUpgradeResponse) 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 *MsgCancelUpgradeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCancelUpgradeResponse) 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 *MsgSoftwareUpgrade) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Plan.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgSoftwareUpgradeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgCancelUpgrade) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgCancelUpgradeResponse) 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 *MsgSoftwareUpgrade) 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: MsgSoftwareUpgrade: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSoftwareUpgrade: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", 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.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Plan", 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.Plan.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + 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 *MsgSoftwareUpgradeResponse) 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: MsgSoftwareUpgradeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSoftwareUpgradeResponse: 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 (m *MsgCancelUpgrade) 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: MsgCancelUpgrade: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCancelUpgrade: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", 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.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + 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 *MsgCancelUpgradeResponse) 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: MsgCancelUpgradeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCancelUpgradeResponse: 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") +) diff --git a/vendor-shims/cosmossdk-x-upgrade/types/upgrade.pb.go b/vendor-shims/cosmossdk-x-upgrade/types/upgrade.pb.go new file mode 100644 index 00000000..31238819 --- /dev/null +++ b/vendor-shims/cosmossdk-x-upgrade/types/upgrade.pb.go @@ -0,0 +1,1318 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/upgrade/v1beta1/upgrade.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + any "github.com/cosmos/gogoproto/types/any" + _ "google.golang.org/protobuf/types/known/timestamppb" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// 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 + +// Plan specifies information about a planned upgrade and when it should occur. +type Plan struct { + // Sets the name for the upgrade. This name will be used by the upgraded + // version of the software to apply any special "on-upgrade" commands during + // the first BeginBlock method after the upgrade is applied. It is also used + // to detect whether a software version can handle a given upgrade. If no + // upgrade handler with this name has been set in the software, it will be + // assumed that the software is out-of-date when the upgrade Time or Height is + // reached and the software will exit. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Deprecated: Time based upgrades have been deprecated. Time based upgrade logic + // has been removed from the SDK. + // If this field is not empty, an error will be thrown. + Time time.Time `protobuf:"bytes,2,opt,name=time,proto3,stdtime" json:"time"` // Deprecated: Do not use. + // The height at which the upgrade must be performed. + Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` + // Any application specific upgrade info to be included on-chain + // such as a git commit that validators could automatically upgrade to + Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` + // Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been + // moved to the IBC module in the sub module 02-client. + // If this field is not empty, an error will be thrown. + UpgradedClientState *any.Any `protobuf:"bytes,5,opt,name=upgraded_client_state,json=upgradedClientState,proto3" json:"upgraded_client_state,omitempty"` // Deprecated: Do not use. +} + +func (m *Plan) Reset() { *m = Plan{} } +func (m *Plan) String() string { return proto.CompactTextString(m) } +func (*Plan) ProtoMessage() {} +func (*Plan) Descriptor() ([]byte, []int) { + return fileDescriptor_ccf2a7d4d7b48dca, []int{0} +} +func (m *Plan) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Plan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Plan.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 *Plan) XXX_Merge(src proto.Message) { + xxx_messageInfo_Plan.Merge(m, src) +} +func (m *Plan) XXX_Size() int { + return m.Size() +} +func (m *Plan) XXX_DiscardUnknown() { + xxx_messageInfo_Plan.DiscardUnknown(m) +} + +var xxx_messageInfo_Plan proto.InternalMessageInfo + +// SoftwareUpgradeProposal is a gov Content type for initiating a software +// upgrade. +// Deprecated: This legacy proposal is deprecated in favor of Msg-based gov +// proposals, see MsgSoftwareUpgrade. +// +// Deprecated: Do not use. +type SoftwareUpgradeProposal struct { + // title of the proposal + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + // description of the proposal + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // plan of the proposal + Plan Plan `protobuf:"bytes,3,opt,name=plan,proto3" json:"plan"` +} + +func (m *SoftwareUpgradeProposal) Reset() { *m = SoftwareUpgradeProposal{} } +func (m *SoftwareUpgradeProposal) String() string { return proto.CompactTextString(m) } +func (*SoftwareUpgradeProposal) ProtoMessage() {} +func (*SoftwareUpgradeProposal) Descriptor() ([]byte, []int) { + return fileDescriptor_ccf2a7d4d7b48dca, []int{1} +} +func (m *SoftwareUpgradeProposal) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SoftwareUpgradeProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SoftwareUpgradeProposal.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 *SoftwareUpgradeProposal) XXX_Merge(src proto.Message) { + xxx_messageInfo_SoftwareUpgradeProposal.Merge(m, src) +} +func (m *SoftwareUpgradeProposal) XXX_Size() int { + return m.Size() +} +func (m *SoftwareUpgradeProposal) XXX_DiscardUnknown() { + xxx_messageInfo_SoftwareUpgradeProposal.DiscardUnknown(m) +} + +var xxx_messageInfo_SoftwareUpgradeProposal proto.InternalMessageInfo + +// CancelSoftwareUpgradeProposal is a gov Content type for cancelling a software +// upgrade. +// Deprecated: This legacy proposal is deprecated in favor of Msg-based gov +// proposals, see MsgCancelUpgrade. +// +// Deprecated: Do not use. +type CancelSoftwareUpgradeProposal struct { + // title of the proposal + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + // description of the proposal + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (m *CancelSoftwareUpgradeProposal) Reset() { *m = CancelSoftwareUpgradeProposal{} } +func (m *CancelSoftwareUpgradeProposal) String() string { return proto.CompactTextString(m) } +func (*CancelSoftwareUpgradeProposal) ProtoMessage() {} +func (*CancelSoftwareUpgradeProposal) Descriptor() ([]byte, []int) { + return fileDescriptor_ccf2a7d4d7b48dca, []int{2} +} +func (m *CancelSoftwareUpgradeProposal) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CancelSoftwareUpgradeProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CancelSoftwareUpgradeProposal.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 *CancelSoftwareUpgradeProposal) XXX_Merge(src proto.Message) { + xxx_messageInfo_CancelSoftwareUpgradeProposal.Merge(m, src) +} +func (m *CancelSoftwareUpgradeProposal) XXX_Size() int { + return m.Size() +} +func (m *CancelSoftwareUpgradeProposal) XXX_DiscardUnknown() { + xxx_messageInfo_CancelSoftwareUpgradeProposal.DiscardUnknown(m) +} + +var xxx_messageInfo_CancelSoftwareUpgradeProposal proto.InternalMessageInfo + +// ModuleVersion specifies a module and its consensus version. +type ModuleVersion struct { + // name of the app module + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // consensus version of the app module + Version uint64 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"` +} + +func (m *ModuleVersion) Reset() { *m = ModuleVersion{} } +func (m *ModuleVersion) String() string { return proto.CompactTextString(m) } +func (*ModuleVersion) ProtoMessage() {} +func (*ModuleVersion) Descriptor() ([]byte, []int) { + return fileDescriptor_ccf2a7d4d7b48dca, []int{3} +} +func (m *ModuleVersion) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ModuleVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ModuleVersion.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 *ModuleVersion) XXX_Merge(src proto.Message) { + xxx_messageInfo_ModuleVersion.Merge(m, src) +} +func (m *ModuleVersion) XXX_Size() int { + return m.Size() +} +func (m *ModuleVersion) XXX_DiscardUnknown() { + xxx_messageInfo_ModuleVersion.DiscardUnknown(m) +} + +var xxx_messageInfo_ModuleVersion proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Plan)(nil), "cosmos.upgrade.v1beta1.Plan") + proto.RegisterType((*SoftwareUpgradeProposal)(nil), "cosmos.upgrade.v1beta1.SoftwareUpgradeProposal") + proto.RegisterType((*CancelSoftwareUpgradeProposal)(nil), "cosmos.upgrade.v1beta1.CancelSoftwareUpgradeProposal") + proto.RegisterType((*ModuleVersion)(nil), "cosmos.upgrade.v1beta1.ModuleVersion") +} + +func init() { + proto.RegisterFile("cosmos/upgrade/v1beta1/upgrade.proto", fileDescriptor_ccf2a7d4d7b48dca) +} + +var fileDescriptor_ccf2a7d4d7b48dca = []byte{ + // 532 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0xbf, 0x6e, 0xd3, 0x40, + 0x18, 0xcf, 0xb5, 0x6e, 0x51, 0x2e, 0x42, 0x15, 0x26, 0xb4, 0xd7, 0xa8, 0x38, 0x96, 0xc5, 0x10, + 0x55, 0x8a, 0x4d, 0x5b, 0x26, 0x33, 0x20, 0x92, 0x11, 0x90, 0x8a, 0x0b, 0x1d, 0x58, 0xa2, 0x4b, + 0x7c, 0x71, 0xad, 0xda, 0x77, 0x96, 0xef, 0x12, 0xc8, 0x2b, 0x30, 0xf5, 0x11, 0x18, 0x11, 0x53, + 0x87, 0x3e, 0x44, 0xc4, 0x54, 0x31, 0x21, 0x21, 0xf1, 0x27, 0x19, 0xca, 0xc6, 0x2b, 0xa0, 0xbb, + 0xb3, 0xab, 0x08, 0x0a, 0x62, 0x60, 0x89, 0xbe, 0xef, 0xbb, 0xef, 0x97, 0xdf, 0x9f, 0x3b, 0xc3, + 0x3b, 0x03, 0xc6, 0x53, 0xc6, 0xbd, 0x51, 0x16, 0xe5, 0x38, 0x24, 0xde, 0x78, 0xa7, 0x4f, 0x04, + 0xde, 0x29, 0x7b, 0x37, 0xcb, 0x99, 0x60, 0xe6, 0xba, 0xde, 0x72, 0xcb, 0x69, 0xb1, 0xd5, 0xd8, + 0x8c, 0x18, 0x8b, 0x12, 0xe2, 0xa9, 0xad, 0xfe, 0x68, 0xe8, 0x61, 0x3a, 0xd1, 0x90, 0x46, 0x3d, + 0x62, 0x11, 0x53, 0xa5, 0x27, 0xab, 0x62, 0xda, 0xfc, 0x15, 0x20, 0xe2, 0x94, 0x70, 0x81, 0xd3, + 0xac, 0x58, 0xd8, 0xd4, 0x4c, 0x3d, 0x8d, 0x2c, 0x68, 0xf5, 0xd1, 0x0d, 0x9c, 0xc6, 0x94, 0x79, + 0xea, 0x57, 0x8f, 0x9c, 0x1f, 0x00, 0x1a, 0xfb, 0x09, 0xa6, 0xa6, 0x09, 0x0d, 0x8a, 0x53, 0x82, + 0x80, 0x0d, 0x5a, 0xd5, 0x40, 0xd5, 0xe6, 0x03, 0x68, 0xc8, 0x7f, 0x47, 0x4b, 0x36, 0x68, 0xd5, + 0x76, 0x1b, 0xae, 0xa6, 0x76, 0x4b, 0x6a, 0xf7, 0x59, 0x49, 0xdd, 0x59, 0x9b, 0x7e, 0x6e, 0x56, + 0x4e, 0xbe, 0x34, 0xc1, 0xdb, 0x8b, 0xd3, 0x6d, 0x80, 0x40, 0xa0, 0x80, 0xe6, 0x3a, 0x5c, 0x3d, + 0x22, 0x71, 0x74, 0x24, 0xd0, 0xb2, 0x0d, 0x5a, 0xcb, 0x41, 0xd1, 0x49, 0xb2, 0x98, 0x0e, 0x19, + 0x32, 0x34, 0x99, 0xac, 0xcd, 0xc7, 0xf0, 0x56, 0x11, 0x4e, 0xd8, 0x1b, 0x24, 0x31, 0xa1, 0xa2, + 0xc7, 0x05, 0x16, 0x04, 0xad, 0x28, 0xf6, 0xfa, 0x6f, 0xec, 0x0f, 0xe9, 0xa4, 0xb3, 0x84, 0x40, + 0x70, 0xb3, 0x84, 0x75, 0x15, 0xea, 0x40, 0x82, 0x7c, 0xf4, 0xfd, 0x4d, 0x13, 0xbc, 0xbe, 0x38, + 0xdd, 0x5e, 0xd3, 0x09, 0xb4, 0x79, 0x78, 0xec, 0x49, 0xa3, 0xce, 0x27, 0x00, 0x37, 0x0e, 0xd8, + 0x50, 0xbc, 0xc4, 0x39, 0x79, 0xae, 0x91, 0xfb, 0x39, 0xcb, 0x18, 0xc7, 0x89, 0x59, 0x87, 0x2b, + 0x22, 0x16, 0x49, 0x99, 0x82, 0x6e, 0x4c, 0x1b, 0xd6, 0x42, 0xc2, 0x07, 0x79, 0x9c, 0x89, 0x98, + 0x51, 0x95, 0x46, 0x35, 0x58, 0x1c, 0x99, 0xf7, 0xa1, 0x91, 0x25, 0x98, 0x2a, 0x97, 0xb5, 0xdd, + 0x2d, 0xf7, 0xea, 0xcb, 0x76, 0x25, 0x7f, 0xa7, 0x2a, 0xa3, 0x52, 0x31, 0x05, 0x0a, 0xe4, 0x3f, + 0x92, 0x52, 0xdf, 0x9f, 0xb5, 0x1b, 0x05, 0x2a, 0x62, 0xe3, 0x4b, 0x44, 0x97, 0x51, 0x41, 0xa8, + 0x90, 0x46, 0x9c, 0x05, 0x23, 0x7f, 0xd0, 0x8f, 0x80, 0xf3, 0x0e, 0xc0, 0xdb, 0x5d, 0x4c, 0x07, + 0x24, 0xf9, 0xcf, 0x1e, 0xfd, 0xa7, 0xff, 0x26, 0xb3, 0xb5, 0x20, 0xf3, 0xaf, 0x42, 0x10, 0x70, + 0x0e, 0xe1, 0xf5, 0x27, 0x2c, 0x1c, 0x25, 0xe4, 0x90, 0xe4, 0x5c, 0xe6, 0x78, 0xd5, 0x23, 0x44, + 0xf0, 0xda, 0x58, 0x1f, 0x2b, 0x55, 0x46, 0x50, 0xb6, 0xfe, 0x86, 0x54, 0xf4, 0xe1, 0xac, 0xbd, + 0x70, 0xc5, 0xf6, 0x5d, 0xf7, 0xde, 0x5e, 0xc7, 0x9f, 0x7e, 0xb3, 0x2a, 0xd3, 0x99, 0x05, 0xce, + 0x67, 0x16, 0xf8, 0x3a, 0xb3, 0xc0, 0xc9, 0xdc, 0xaa, 0x9c, 0xcf, 0xad, 0xca, 0xc7, 0xb9, 0x55, + 0x79, 0xb1, 0xa5, 0xd7, 0x79, 0x78, 0xec, 0xc6, 0xcc, 0x7b, 0x75, 0xf9, 0xe1, 0x8a, 0x49, 0x46, + 0x78, 0x7f, 0x55, 0xbd, 0xaf, 0xbd, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x6a, 0x37, 0x42, + 0xd7, 0x03, 0x00, 0x00, +} + +func (this *Plan) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Plan) + if !ok { + that2, ok := that.(Plan) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Name != that1.Name { + return false + } + if !this.Time.Equal(that1.Time) { + return false + } + if this.Height != that1.Height { + return false + } + if this.Info != that1.Info { + return false + } + if !this.UpgradedClientState.Equal(that1.UpgradedClientState) { + return false + } + return true +} +func (this *SoftwareUpgradeProposal) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*SoftwareUpgradeProposal) + if !ok { + that2, ok := that.(SoftwareUpgradeProposal) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Title != that1.Title { + return false + } + if this.Description != that1.Description { + return false + } + if !this.Plan.Equal(&that1.Plan) { + return false + } + return true +} +func (this *CancelSoftwareUpgradeProposal) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*CancelSoftwareUpgradeProposal) + if !ok { + that2, ok := that.(CancelSoftwareUpgradeProposal) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Title != that1.Title { + return false + } + if this.Description != that1.Description { + return false + } + return true +} +func (this *ModuleVersion) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*ModuleVersion) + if !ok { + that2, ok := that.(ModuleVersion) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Name != that1.Name { + return false + } + if this.Version != that1.Version { + return false + } + return true +} +func (m *Plan) 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 *Plan) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Plan) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.UpgradedClientState != nil { + { + size, err := m.UpgradedClientState.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintUpgrade(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if len(m.Info) > 0 { + i -= len(m.Info) + copy(dAtA[i:], m.Info) + i = encodeVarintUpgrade(dAtA, i, uint64(len(m.Info))) + i-- + dAtA[i] = 0x22 + } + if m.Height != 0 { + i = encodeVarintUpgrade(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x18 + } + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintUpgrade(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x12 + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintUpgrade(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SoftwareUpgradeProposal) 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 *SoftwareUpgradeProposal) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SoftwareUpgradeProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Plan.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintUpgrade(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintUpgrade(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if len(m.Title) > 0 { + i -= len(m.Title) + copy(dAtA[i:], m.Title) + i = encodeVarintUpgrade(dAtA, i, uint64(len(m.Title))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *CancelSoftwareUpgradeProposal) 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 *CancelSoftwareUpgradeProposal) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CancelSoftwareUpgradeProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintUpgrade(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if len(m.Title) > 0 { + i -= len(m.Title) + copy(dAtA[i:], m.Title) + i = encodeVarintUpgrade(dAtA, i, uint64(len(m.Title))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ModuleVersion) 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 *ModuleVersion) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ModuleVersion) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Version != 0 { + i = encodeVarintUpgrade(dAtA, i, uint64(m.Version)) + i-- + dAtA[i] = 0x10 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintUpgrade(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintUpgrade(dAtA []byte, offset int, v uint64) int { + offset -= sovUpgrade(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Plan) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovUpgrade(uint64(l)) + } + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time) + n += 1 + l + sovUpgrade(uint64(l)) + if m.Height != 0 { + n += 1 + sovUpgrade(uint64(m.Height)) + } + l = len(m.Info) + if l > 0 { + n += 1 + l + sovUpgrade(uint64(l)) + } + if m.UpgradedClientState != nil { + l = m.UpgradedClientState.Size() + n += 1 + l + sovUpgrade(uint64(l)) + } + return n +} + +func (m *SoftwareUpgradeProposal) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Title) + if l > 0 { + n += 1 + l + sovUpgrade(uint64(l)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovUpgrade(uint64(l)) + } + l = m.Plan.Size() + n += 1 + l + sovUpgrade(uint64(l)) + return n +} + +func (m *CancelSoftwareUpgradeProposal) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Title) + if l > 0 { + n += 1 + l + sovUpgrade(uint64(l)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovUpgrade(uint64(l)) + } + return n +} + +func (m *ModuleVersion) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovUpgrade(uint64(l)) + } + if m.Version != 0 { + n += 1 + sovUpgrade(uint64(m.Version)) + } + return n +} + +func sovUpgrade(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozUpgrade(x uint64) (n int) { + return sovUpgrade(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Plan) 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 ErrIntOverflowUpgrade + } + 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: Plan: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Plan: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + 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 ErrInvalidLengthUpgrade + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthUpgrade + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.Time, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + 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 ErrInvalidLengthUpgrade + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Info = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpgradedClientState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthUpgrade + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UpgradedClientState == nil { + m.UpgradedClientState = &any.Any{} + } + if err := m.UpgradedClientState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipUpgrade(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthUpgrade + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SoftwareUpgradeProposal) 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 ErrIntOverflowUpgrade + } + 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: SoftwareUpgradeProposal: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SoftwareUpgradeProposal: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Title", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + 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 ErrInvalidLengthUpgrade + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Title = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + 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 ErrInvalidLengthUpgrade + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Plan", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthUpgrade + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Plan.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipUpgrade(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthUpgrade + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CancelSoftwareUpgradeProposal) 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 ErrIntOverflowUpgrade + } + 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: CancelSoftwareUpgradeProposal: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CancelSoftwareUpgradeProposal: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Title", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + 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 ErrInvalidLengthUpgrade + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Title = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + 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 ErrInvalidLengthUpgrade + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipUpgrade(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthUpgrade + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ModuleVersion) 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 ErrIntOverflowUpgrade + } + 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: ModuleVersion: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ModuleVersion: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + 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 ErrInvalidLengthUpgrade + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUpgrade + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + m.Version = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUpgrade + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Version |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipUpgrade(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthUpgrade + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipUpgrade(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, ErrIntOverflowUpgrade + } + 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, ErrIntOverflowUpgrade + } + 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, ErrIntOverflowUpgrade + } + 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, ErrInvalidLengthUpgrade + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupUpgrade + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthUpgrade + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthUpgrade = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowUpgrade = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupUpgrade = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/custom-hooks/ai_test/testutil/suite.go b/x/custom-hooks/ai_test/testutil/suite.go index 6945eb27..a981021a 100644 --- a/x/custom-hooks/ai_test/testutil/suite.go +++ b/x/custom-hooks/ai_test/testutil/suite.go @@ -3,8 +3,8 @@ package testutil import ( "testing" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" "github.com/stretchr/testify/suite" "github.com/bitbadges/bitbadgeschain/third_party/apptesting" diff --git a/x/custom-hooks/extract_denom_test.go b/x/custom-hooks/extract_denom_test.go index 1f2174ea..81877efb 100644 --- a/x/custom-hooks/extract_denom_test.go +++ b/x/custom-hooks/extract_denom_test.go @@ -3,9 +3,9 @@ package customhooks import ( "testing" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" "github.com/stretchr/testify/require" ) diff --git a/x/custom-hooks/hooks.go b/x/custom-hooks/hooks.go index e916ea2c..21f115e9 100644 --- a/x/custom-hooks/hooks.go +++ b/x/custom-hooks/hooks.go @@ -5,9 +5,9 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" sdkmath "cosmossdk.io/math" "github.com/bitbadges/bitbadgeschain/third_party/osmomath" diff --git a/x/custom-hooks/hooks_test.go b/x/custom-hooks/hooks_test.go index cf9754db..cc067424 100644 --- a/x/custom-hooks/hooks_test.go +++ b/x/custom-hooks/hooks_test.go @@ -4,10 +4,10 @@ import ( "testing" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" "github.com/stretchr/testify/suite" "github.com/bitbadges/bitbadgeschain/third_party/apptesting" diff --git a/x/custom-hooks/keeper/keeper.go b/x/custom-hooks/keeper/keeper.go index 28eba32c..4df2f5e3 100644 --- a/x/custom-hooks/keeper/keeper.go +++ b/x/custom-hooks/keeper/keeper.go @@ -6,14 +6,14 @@ import ( "strconv" "strings" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" sdkmath "cosmossdk.io/math" "github.com/bitbadges/bitbadgeschain/third_party/osmomath" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" tokenizationtypes "github.com/bitbadges/bitbadgeschain/x/tokenization/types" "github.com/bitbadges/bitbadgeschain/x/custom-hooks/types" diff --git a/x/custom-hooks/keeper/keeper_test.go b/x/custom-hooks/keeper/keeper_test.go index cb590e13..fad2d1b3 100644 --- a/x/custom-hooks/keeper/keeper_test.go +++ b/x/custom-hooks/keeper/keeper_test.go @@ -7,8 +7,8 @@ import ( "github.com/cometbft/cometbft/crypto/ed25519" sdk "github.com/cosmos/cosmos-sdk/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" "github.com/stretchr/testify/suite" "github.com/bitbadges/bitbadgeschain/third_party/apptesting" diff --git a/x/custom-hooks/keeper/transfer_tokens.go b/x/custom-hooks/keeper/transfer_tokens.go index 616bef4f..9751eb4b 100644 --- a/x/custom-hooks/keeper/transfer_tokens.go +++ b/x/custom-hooks/keeper/transfer_tokens.go @@ -6,7 +6,7 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" "github.com/bitbadges/bitbadgeschain/x/custom-hooks/types" tokenizationtypes "github.com/bitbadges/bitbadgeschain/x/tokenization/types" diff --git a/x/custom-hooks/types/keys.go b/x/custom-hooks/types/keys.go index 90d359e6..bc5bfe9c 100644 --- a/x/custom-hooks/types/keys.go +++ b/x/custom-hooks/types/keys.go @@ -1,7 +1,7 @@ package types import ( - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" ) const ( diff --git a/x/custom-hooks/types/types.go b/x/custom-hooks/types/types.go index bb808449..6865178c 100644 --- a/x/custom-hooks/types/types.go +++ b/x/custom-hooks/types/types.go @@ -8,8 +8,8 @@ import ( errorsmod "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ) // SetDeterministicError sets a deterministic error message in the transient store. diff --git a/x/gamm/keeper/grpc_query.go b/x/gamm/keeper/grpc_query.go index 76473b6c..3221592f 100644 --- a/x/gamm/keeper/grpc_query.go +++ b/x/gamm/keeper/grpc_query.go @@ -8,7 +8,7 @@ import ( "google.golang.org/grpc/status" errorsmod "cosmossdk.io/errors" - "cosmossdk.io/store/prefix" + "github.com/cosmos/cosmos-sdk/store/v2/prefix" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/gamm/keeper/ibc_escrow_test.go b/x/gamm/keeper/ibc_escrow_test.go index 8d3c74b5..7ffde4be 100644 --- a/x/gamm/keeper/ibc_escrow_test.go +++ b/x/gamm/keeper/ibc_escrow_test.go @@ -4,9 +4,9 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" "github.com/bitbadges/bitbadgeschain/third_party/osmomath" "github.com/bitbadges/bitbadgeschain/x/gamm/keeper" diff --git a/x/gamm/keeper/keeper.go b/x/gamm/keeper/keeper.go index 2aa3dc5f..a25e45ee 100644 --- a/x/gamm/keeper/keeper.go +++ b/x/gamm/keeper/keeper.go @@ -5,13 +5,13 @@ import ( "github.com/bitbadges/bitbadgeschain/x/gamm/types" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" sdkmath "cosmossdk.io/math" poolmanagertypes "github.com/bitbadges/bitbadgeschain/x/poolmanager/types" diff --git a/x/gamm/keeper/pool.go b/x/gamm/keeper/pool.go index be640b48..dbe8e110 100644 --- a/x/gamm/keeper/pool.go +++ b/x/gamm/keeper/pool.go @@ -6,7 +6,7 @@ import ( gogotypes "github.com/cosmos/gogoproto/types" errorsmod "cosmossdk.io/errors" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" diff --git a/x/gamm/keeper/swap_test.go b/x/gamm/keeper/swap_test.go index 56a32e90..db921a30 100644 --- a/x/gamm/keeper/swap_test.go +++ b/x/gamm/keeper/swap_test.go @@ -3,7 +3,7 @@ package keeper_test import ( "time" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/suite" diff --git a/x/gamm/keeper/total_liquidity.go b/x/gamm/keeper/total_liquidity.go index 2aa4423f..5f3d1112 100644 --- a/x/gamm/keeper/total_liquidity.go +++ b/x/gamm/keeper/total_liquidity.go @@ -1,7 +1,7 @@ package keeper import ( - "cosmossdk.io/store/prefix" + "github.com/cosmos/cosmos-sdk/store/v2/prefix" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/bitbadges/bitbadgeschain/third_party/osmomath" diff --git a/x/gamm/poolmodels/internal/test_helpers/test_helpers.go b/x/gamm/poolmodels/internal/test_helpers/test_helpers.go index 71347be6..8c747019 100644 --- a/x/gamm/poolmodels/internal/test_helpers/test_helpers.go +++ b/x/gamm/poolmodels/internal/test_helpers/test_helpers.go @@ -4,9 +4,8 @@ import ( "math/rand" "testing" - "cosmossdk.io/log" - "cosmossdk.io/store/metrics" - "cosmossdk.io/store/rootmulti" + "cosmossdk.io/log/v2" + "github.com/cosmos/cosmos-sdk/store/v2/rootmulti" tmtypes "github.com/cometbft/cometbft/proto/tendermint/types" dbm "github.com/cosmos/cosmos-db" sdk "github.com/cosmos/cosmos-sdk/types" @@ -26,7 +25,7 @@ type CfmmCommonTestSuite struct { func (suite *CfmmCommonTestSuite) CreateTestContext() sdk.Context { logger := log.NewNopLogger() - ms := rootmulti.NewStore(dbm.NewMemDB(), logger, metrics.NewNoOpMetrics()) + ms := rootmulti.NewStore(dbm.NewMemDB(), logger) return sdk.NewContext(ms, tmtypes.Header{}, false, logger) } diff --git a/x/gamm/precompile/precompile.go b/x/gamm/precompile/precompile.go index 6c54994e..78d6856c 100644 --- a/x/gamm/precompile/precompile.go +++ b/x/gamm/precompile/precompile.go @@ -35,7 +35,7 @@ import ( "github.com/cosmos/gogoproto/proto" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/gamm/types/expected_keepers.go b/x/gamm/types/expected_keepers.go index 1f2018a9..8abbee7a 100644 --- a/x/gamm/types/expected_keepers.go +++ b/x/gamm/types/expected_keepers.go @@ -5,8 +5,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" "github.com/bitbadges/bitbadgeschain/third_party/osmomath" poolmanagertypes "github.com/bitbadges/bitbadgeschain/x/poolmanager/types" diff --git a/x/gamm/types/ibc_denom.go b/x/gamm/types/ibc_denom.go index a522aac8..a0303088 100644 --- a/x/gamm/types/ibc_denom.go +++ b/x/gamm/types/ibc_denom.go @@ -6,7 +6,7 @@ import ( "strings" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" ) // TransferKeeper is the interface we need from the IBC transfer keeper. diff --git a/x/gamm/types/ibc_denom_test.go b/x/gamm/types/ibc_denom_test.go index 045e39ac..3d9ea0db 100644 --- a/x/gamm/types/ibc_denom_test.go +++ b/x/gamm/types/ibc_denom_test.go @@ -7,7 +7,7 @@ import ( "testing" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" "github.com/stretchr/testify/require" ) diff --git a/x/ibc-hooks/ai_test/testutil/generators.go b/x/ibc-hooks/ai_test/testutil/generators.go index a09108ba..bb0e5132 100644 --- a/x/ibc-hooks/ai_test/testutil/generators.go +++ b/x/ibc-hooks/ai_test/testutil/generators.go @@ -4,9 +4,9 @@ import ( "fmt" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ) // GenerateTestPacket generates a test packet for testing diff --git a/x/ibc-hooks/ai_test/testutil/suite.go b/x/ibc-hooks/ai_test/testutil/suite.go index ef8fac36..4feb84e6 100644 --- a/x/ibc-hooks/ai_test/testutil/suite.go +++ b/x/ibc-hooks/ai_test/testutil/suite.go @@ -4,10 +4,10 @@ import ( "testing" sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v11/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" "github.com/stretchr/testify/suite" "github.com/bitbadges/bitbadgeschain/app/params" @@ -112,6 +112,9 @@ func (m *MockIBCModule) OnTimeoutPacket(ctx sdk.Context, packetID string, packet return nil } +// IBC v11: IBCModule now requires SetICS4Wrapper. Mock is a no-op. +func (m *MockIBCModule) SetICS4Wrapper(wrapper porttypes.ICS4Wrapper) {} + // MockICS4Wrapper is a mock implementation of ICS4Wrapper for testing type MockICS4Wrapper struct { SendPacketCalled bool diff --git a/x/ibc-hooks/ai_test/unit/hooks/on_recv_packet_test.go b/x/ibc-hooks/ai_test/unit/hooks/on_recv_packet_test.go index d5259521..2ad93d2b 100644 --- a/x/ibc-hooks/ai_test/unit/hooks/on_recv_packet_test.go +++ b/x/ibc-hooks/ai_test/unit/hooks/on_recv_packet_test.go @@ -5,8 +5,8 @@ import ( "testing" sdk "github.com/cosmos/cosmos-sdk/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" "github.com/stretchr/testify/suite" "github.com/bitbadges/bitbadgeschain/x/ibc-hooks/ai_test/testutil" diff --git a/x/ibc-hooks/ai_test/unit/middleware/send_packet_test.go b/x/ibc-hooks/ai_test/unit/middleware/send_packet_test.go index b5e77fa3..cd27a3b1 100644 --- a/x/ibc-hooks/ai_test/unit/middleware/send_packet_test.go +++ b/x/ibc-hooks/ai_test/unit/middleware/send_packet_test.go @@ -5,7 +5,7 @@ import ( "testing" sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" "github.com/stretchr/testify/suite" "github.com/bitbadges/bitbadgeschain/x/ibc-hooks/ai_test/testutil" diff --git a/x/ibc-hooks/hooks.go b/x/ibc-hooks/hooks.go index 3d68d52e..b36a22bf 100644 --- a/x/ibc-hooks/hooks.go +++ b/x/ibc-hooks/hooks.go @@ -5,9 +5,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" // ibc-go - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ) type Hooks interface{} diff --git a/x/ibc-hooks/ibc_module.go b/x/ibc-hooks/ibc_module.go index 7c5de153..2dbba00b 100644 --- a/x/ibc-hooks/ibc_module.go +++ b/x/ibc-hooks/ibc_module.go @@ -5,10 +5,10 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" // ibc-go - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v11/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ) var _ porttypes.Middleware = &IBCMiddleware{} @@ -266,3 +266,18 @@ func (im IBCMiddleware) WriteAcknowledgement( func (im IBCMiddleware) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { return im.ICS4Middleware.GetAppVersion(ctx, portID, channelID) } + +// SetICS4Wrapper satisfies porttypes.Middleware (ibc-go v11). Called by the +// IBC stack wiring to inject the ICS4Wrapper sitting above this middleware. +// We forward the assignment to the inner ICS4Middleware, whose `channel` +// field is the outgoing ICS4Wrapper used by SendPacket/WriteAcknowledgement. +func (im *IBCMiddleware) SetICS4Wrapper(wrapper porttypes.ICS4Wrapper) { + im.ICS4Middleware.channel = wrapper +} + +// SetUnderlyingApplication satisfies porttypes.Middleware (ibc-go v11). Called +// by the IBC stack wiring to inject the IBCModule sitting below this +// middleware in the application stack. +func (im *IBCMiddleware) SetUnderlyingApplication(app porttypes.IBCModule) { + im.App = app +} diff --git a/x/ibc-hooks/ics4_middleware.go b/x/ibc-hooks/ics4_middleware.go index 2fe842b5..e91669e9 100644 --- a/x/ibc-hooks/ics4_middleware.go +++ b/x/ibc-hooks/ics4_middleware.go @@ -5,9 +5,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" // ibc-go - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + porttypes "github.com/cosmos/ibc-go/v11/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ) var _ porttypes.ICS4Wrapper = &ICS4Middleware{} diff --git a/x/ibc-hooks/types/expected_keepers.go b/x/ibc-hooks/types/expected_keepers.go index 9541e85f..b40d7f62 100644 --- a/x/ibc-hooks/types/expected_keepers.go +++ b/x/ibc-hooks/types/expected_keepers.go @@ -3,8 +3,8 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - "github.com/cosmos/ibc-go/v10/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + "github.com/cosmos/ibc-go/v11/modules/core/exported" ) type ChannelKeeper interface { diff --git a/x/ibc-rate-limit/hooks/hooks.go b/x/ibc-rate-limit/hooks/hooks.go index bc2769b8..9128a0bd 100644 --- a/x/ibc-rate-limit/hooks/hooks.go +++ b/x/ibc-rate-limit/hooks/hooks.go @@ -6,10 +6,10 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ibchooks "github.com/bitbadges/bitbadgeschain/x/ibc-hooks" "github.com/bitbadges/bitbadgeschain/x/ibc-rate-limit/keeper" diff --git a/x/ibc-rate-limit/hooks/refund_test.go b/x/ibc-rate-limit/hooks/refund_test.go index 2ff5f65c..3f335a3b 100644 --- a/x/ibc-rate-limit/hooks/refund_test.go +++ b/x/ibc-rate-limit/hooks/refund_test.go @@ -6,19 +6,18 @@ import ( "testing" "cosmossdk.io/log" - "cosmossdk.io/store" - "cosmossdk.io/store/metrics" - storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/store/v2" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" sdkmath "cosmossdk.io/math" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + transfertypes "github.com/cosmos/ibc-go/v11/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" "github.com/stretchr/testify/require" ibchooks "github.com/bitbadges/bitbadgeschain/x/ibc-hooks" @@ -53,7 +52,7 @@ func newTestKeeper(t *testing.T) (keeper.Keeper, sdk.Context) { storeKey := storetypes.NewKVStoreKey(ratelimittypes.StoreKey) db := dbm.NewMemDB() - stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger()) stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) require.NoError(t, stateStore.LoadLatestVersion()) diff --git a/x/ibc-rate-limit/keeper/keeper.go b/x/ibc-rate-limit/keeper/keeper.go index 001539b8..117dcb4e 100644 --- a/x/ibc-rate-limit/keeper/keeper.go +++ b/x/ibc-rate-limit/keeper/keeper.go @@ -3,12 +3,12 @@ package keeper import ( "fmt" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" sdkmath "cosmossdk.io/math" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" "github.com/bitbadges/bitbadgeschain/x/ibc-rate-limit/types" ) diff --git a/x/ibc-rate-limit/keeper/keeper_test.go b/x/ibc-rate-limit/keeper/keeper_test.go index a0055191..20151edc 100644 --- a/x/ibc-rate-limit/keeper/keeper_test.go +++ b/x/ibc-rate-limit/keeper/keeper_test.go @@ -4,17 +4,16 @@ import ( "testing" sdkmath "cosmossdk.io/math" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" "context" - "cosmossdk.io/log" - "cosmossdk.io/store" - "cosmossdk.io/store/metrics" - storetypes "cosmossdk.io/store/types" + "cosmossdk.io/log/v2" + "github.com/cosmos/cosmos-sdk/store/v2" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/codec" @@ -45,7 +44,7 @@ func (suite *KeeperTestSuite) SetupTest() { // Setup database db := dbm.NewMemDB() - stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger()) stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) stateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) require.NoError(suite.T(), stateStore.LoadLatestVersion()) diff --git a/x/ibc-rate-limit/types/types.go b/x/ibc-rate-limit/types/types.go index f47cfb74..9f2012a8 100644 --- a/x/ibc-rate-limit/types/types.go +++ b/x/ibc-rate-limit/types/types.go @@ -3,8 +3,8 @@ package types import ( "fmt" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ) // DefaultGenesis returns the default genesis state diff --git a/x/managersplitter/keeper/keeper.go b/x/managersplitter/keeper/keeper.go index e59145ab..7c510ed9 100644 --- a/x/managersplitter/keeper/keeper.go +++ b/x/managersplitter/keeper/keeper.go @@ -8,7 +8,7 @@ import ( tokenizationkeeper "github.com/bitbadges/bitbadgeschain/x/tokenization/keeper" "cosmossdk.io/core/store" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" "github.com/cosmos/cosmos-sdk/codec" ) diff --git a/x/managersplitter/keeper/store.go b/x/managersplitter/keeper/store.go index c814be1d..574fd84e 100644 --- a/x/managersplitter/keeper/store.go +++ b/x/managersplitter/keeper/store.go @@ -7,8 +7,8 @@ import ( sdkerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" - "cosmossdk.io/store/prefix" - storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/store/v2/prefix" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/managersplitter/module/module.go b/x/managersplitter/module/module.go index d88d535d..d96271e7 100644 --- a/x/managersplitter/module/module.go +++ b/x/managersplitter/module/module.go @@ -8,7 +8,7 @@ import ( "cosmossdk.io/core/appmodule" "cosmossdk.io/core/store" "cosmossdk.io/depinject" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/x/poolmanager/keeper.go b/x/poolmanager/keeper.go index 94990e05..cc884ddd 100644 --- a/x/poolmanager/keeper.go +++ b/x/poolmanager/keeper.go @@ -12,7 +12,7 @@ import ( gammkeeper "github.com/bitbadges/bitbadgeschain/x/gamm/keeper" "github.com/bitbadges/bitbadgeschain/x/poolmanager/types" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ) diff --git a/x/poolmanager/store.go b/x/poolmanager/store.go index 74bf1e36..553142c7 100644 --- a/x/poolmanager/store.go +++ b/x/poolmanager/store.go @@ -8,7 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/gogoproto/proto" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" "github.com/bitbadges/bitbadgeschain/third_party/osmomath" "github.com/bitbadges/bitbadgeschain/third_party/osmoutils" diff --git a/x/poolmanager/taker_fee.go b/x/poolmanager/taker_fee.go index 85598bb5..8d88eb38 100644 --- a/x/poolmanager/taker_fee.go +++ b/x/poolmanager/taker_fee.go @@ -9,7 +9,7 @@ import ( "github.com/bitbadges/bitbadgeschain/third_party/osmomath" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" "github.com/bitbadges/bitbadgeschain/third_party/osmoutils" "github.com/bitbadges/bitbadgeschain/x/poolmanager/types" diff --git a/x/sendmanager/ai_test/testutil/suite.go b/x/sendmanager/ai_test/testutil/suite.go index d1ce6d87..ed7673e9 100644 --- a/x/sendmanager/ai_test/testutil/suite.go +++ b/x/sendmanager/ai_test/testutil/suite.go @@ -6,7 +6,7 @@ import ( "testing" "cosmossdk.io/core/address" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" addresscodec "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/testutil" diff --git a/x/sendmanager/keeper/keeper.go b/x/sendmanager/keeper/keeper.go index 9f196d73..0e5e9606 100644 --- a/x/sendmanager/keeper/keeper.go +++ b/x/sendmanager/keeper/keeper.go @@ -8,7 +8,7 @@ import ( "cosmossdk.io/core/store" sdkerrors "cosmossdk.io/errors" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/sendmanager/keeper/keeper_test.go b/x/sendmanager/keeper/keeper_test.go index 96793e42..5fe68dda 100644 --- a/x/sendmanager/keeper/keeper_test.go +++ b/x/sendmanager/keeper/keeper_test.go @@ -5,7 +5,7 @@ import ( "testing" "cosmossdk.io/core/address" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" addresscodec "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/testutil" diff --git a/x/sendmanager/precompile/precompile.go b/x/sendmanager/precompile/precompile.go index 4d09efff..d514d1ea 100644 --- a/x/sendmanager/precompile/precompile.go +++ b/x/sendmanager/precompile/precompile.go @@ -22,7 +22,7 @@ import ( cmn "github.com/cosmos/evm/precompiles/common" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/tokenization/approval_criteria/alt_time_checks.go b/x/tokenization/approval_criteria/alt_time_checks.go index cc79502a..6723e948 100644 --- a/x/tokenization/approval_criteria/alt_time_checks.go +++ b/x/tokenization/approval_criteria/alt_time_checks.go @@ -38,7 +38,20 @@ func (c *AltTimeChecksChecker) Check(ctx sdk.Context, approval *types.Collection blockTime := ctx.BlockTime() localTime := blockTime.UTC() if c.altTimeChecks.TimezoneOffsetMinutes.GT(sdkmath.NewUint(0)) { - offsetDuration := time.Duration(c.altTimeChecks.TimezoneOffsetMinutes.Uint64()) * time.Minute + // Defense-in-depth: ValidateAltTimeChecks bounds this to ≤ 14*60 + // minutes, but if a checker is ever constructed outside that path + // (e.g. corrupt migrated state), reject rather than panic or wrap. + // Values that don't fit in uint64 would panic in .Uint64(); values + // in [2^63, 2^64-1] would silently wrap through int64 overflow + // when multiplied by time.Minute. + if !c.altTimeChecks.TimezoneOffsetMinutes.BigInt().IsUint64() { + return "", sdkerrors.Wrapf(types.ErrInvalidRequest, "timezoneOffsetMinutes exceeds uint64 range") + } + offsetMinutes := c.altTimeChecks.TimezoneOffsetMinutes.Uint64() + if offsetMinutes > types.MaxTimezoneOffsetMinutes { + return "", sdkerrors.Wrapf(types.ErrInvalidRequest, "timezoneOffsetMinutes %d exceeds maximum real-world offset of %d minutes", offsetMinutes, types.MaxTimezoneOffsetMinutes) + } + offsetDuration := time.Duration(offsetMinutes) * time.Minute if c.altTimeChecks.TimezoneOffsetNegative { localTime = localTime.Add(-offsetDuration) } else { diff --git a/x/tokenization/client/cli/help_links.go b/x/tokenization/client/cli/help_links.go index 0c2b6954..a9edf5ef 100644 --- a/x/tokenization/client/cli/help_links.go +++ b/x/tokenization/client/cli/help_links.go @@ -95,7 +95,7 @@ func schemaHelpFooter(protoFile string) string { Schema & Documentation: Proto definition: %s/%s Full OpenAPI spec: %s/docs/static/openapi.yml - SDK CLI docs: bitbadgeschaind cli sdk docs messages (if SDK CLI is installed)`, + SDK CLI docs: bitbadgeschaind cli docs messages (if SDK CLI is installed)`, protoBaseURL, protoFile, repoBaseURL) } diff --git a/x/tokenization/keeper/approved_transfers_error_helpers.go b/x/tokenization/keeper/approved_transfers_error_helpers.go index 8fa475ee..18b8db06 100644 --- a/x/tokenization/keeper/approved_transfers_error_helpers.go +++ b/x/tokenization/keeper/approved_transfers_error_helpers.go @@ -133,11 +133,35 @@ func buildPotentialErrorsString( potentialErrorsStr += ")" if len(approvalIdxsChecked) == 0 && len(unfilteredApprovals) > 0 { - skippedIds := []string{} + // Distinguish approvals that were dropped by the priority filter (genuinely "require + // prioritization") from those that survived the filter but failed address/time checks. + // The old code lumped both under "require prioritization", which was misleading when + // e.g. a Transfer set OnlyCheckPrioritized*Approvals=true and filtered out an otherwise- + // matching auto-scannable approval. + postFilterIds := make(map[string]struct{}, len(approvals)) + for _, a := range approvals { + if a != nil { + postFilterIds[a.ApprovalId] = struct{}{} + } + } + filteredOut := []string{} + survivedButFailed := []string{} for _, a := range unfilteredApprovals { - skippedIds = append(skippedIds, fmt.Sprintf("%q", a.ApprovalId)) + if a == nil { + continue + } + if _, kept := postFilterIds[a.ApprovalId]; kept { + survivedButFailed = append(survivedButFailed, fmt.Sprintf("%q", a.ApprovalId)) + } else { + filteredOut = append(filteredOut, fmt.Sprintf("%q", a.ApprovalId)) + } + } + if len(filteredOut) > 0 { + potentialErrorsStr += fmt.Sprintf(". Approvals dropped by prioritization filter (set OnlyCheckPrioritized*Approvals or missing from PrioritizedApprovals): [%s]", strings.Join(filteredOut, ", ")) + } + if len(survivedButFailed) > 0 { + potentialErrorsStr += fmt.Sprintf(". Approvals checked but failed address/time match: [%s]", strings.Join(survivedButFailed, ", ")) } - potentialErrorsStr += fmt.Sprintf(". Approvals not checked (require prioritization): [%s]", strings.Join(skippedIds, ", ")) } // Try to be smart about error logs. If we only checked one approval via auto-scan, we can just log the errors for that approval diff --git a/x/tokenization/keeper/coin_transfers.go b/x/tokenization/keeper/coin_transfers.go index 63973db5..a0bcbe5b 100644 --- a/x/tokenization/keeper/coin_transfers.go +++ b/x/tokenization/keeper/coin_transfers.go @@ -8,10 +8,16 @@ import ( sdkerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" ) const ( RoyaltyDivisor = 10000 + // ProtocolFeeDenominator is the divisor for the inclusive protocol fee + // (0.1% = amount / 1000). Applied per-coin before royalty/recipient split, + // so the payer sends exactly the quoted amount. + ProtocolFeeDenominator = 1000 ) // formatDenomForDisplay formats a denom for display in error messages @@ -189,10 +195,28 @@ func (k Keeper) ExecuteCoinTransfers( } for _, coin := range coinsToTransfer { + // Inclusive protocol fee: taken out of the payer's gross amount first, + // so the payer sends exactly coin.Amount (not amount + fee on top). coinAmountUint := sdkmath.NewUintFromBigInt(coin.Amount.BigInt()) + protocolFeeUint := coinAmountUint.Quo(sdkmath.NewUint(ProtocolFeeDenominator)) + protocolFeeInt := sdkmath.NewIntFromBigInt(protocolFeeUint.BigInt()) + royaltyAmountUint := coinAmountUint.Mul(royaltyPercentage).Quo(sdkmath.NewUint(RoyaltyDivisor)) royaltyAmountInt := sdkmath.NewIntFromBigInt(royaltyAmountUint.BigInt()) - remainingAmount := coin.Amount.Sub(royaltyAmountInt) + + // Both fees come off the gross. With royalty capped at 100% the two could add + // to more than gross; reject rather than silently shortchange the recipient. + if protocolFeeInt.Add(royaltyAmountInt).GT(coin.Amount) { + detErrMsg := fmt.Sprintf("royalty %s + protocol fee %s exceeds transfer amount %s for denom %s", royaltyAmountInt.String(), protocolFeeInt.String(), coin.Amount.String(), formatDenomForDisplay(coin.Denom)) + return detErrMsg, sdkerrors.Wrap(types.ErrInvalidRequest, detErrMsg) + } + + remainingAmount := coin.Amount.Sub(royaltyAmountInt).Sub(protocolFeeInt) + + if err := k.sendProtocolFee(ctx, coin, protocolFeeInt, fromAddressAcc, coinTransfersUsed); err != nil { + detErrMsg := fmt.Sprintf("insufficient %s balance to cover protocol fee", formatDenomForDisplay(coin.Denom)) + return detErrMsg, sdkerrors.Wrap(types.ErrUnderflow, err.Error()) + } err := k.sendCoinWithRoyalty( ctx, @@ -219,6 +243,35 @@ func (k Keeper) ExecuteCoinTransfers( return "", nil } +// sendProtocolFee routes the inclusive protocol fee from the payer to the community pool. +// No-op when the fee rounds to zero (amounts below ProtocolFeeDenominator). +func (k Keeper) sendProtocolFee( + ctx sdk.Context, + coin *sdk.Coin, + feeAmount sdkmath.Int, + fromAddressAcc sdk.AccAddress, + coinTransfersUsed *[]CoinTransfers, +) error { + if feeAmount.IsZero() { + return nil + } + + feeCoins := sdk.NewCoins(sdk.NewCoin(coin.Denom, feeAmount)) + if err := k.sendManagerKeeper.FundCommunityPoolWithAliasRouting(ctx, fromAddressAcc, feeCoins); err != nil { + return sdkerrors.Wrapf(err, "error funding community pool with protocol fee: %s", feeCoins) + } + + *coinTransfersUsed = append(*coinTransfersUsed, CoinTransfers{ + From: fromAddressAcc.String(), + To: authtypes.NewModuleAddress(distrtypes.ModuleName).String(), + Amount: feeAmount.String(), + Denom: coin.Denom, + IsProtocolFee: true, + }) + + return nil +} + // sendCoinWithRoyalty handles sending a coin with royalty deduction // It sends the royalty to the payout address and the remaining amount to the recipient func (k Keeper) sendCoinWithRoyalty( diff --git a/x/tokenization/keeper/collection_cleanup.go b/x/tokenization/keeper/collection_cleanup.go index 0314e457..c91a6e29 100644 --- a/x/tokenization/keeper/collection_cleanup.go +++ b/x/tokenization/keeper/collection_cleanup.go @@ -2,8 +2,8 @@ package keeper import ( sdkmath "cosmossdk.io/math" - "cosmossdk.io/store/prefix" - storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/store/v2/prefix" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/tokenization/keeper/inclusive_protocol_fees_test.go b/x/tokenization/keeper/inclusive_protocol_fees_test.go new file mode 100644 index 00000000..3cf099e8 --- /dev/null +++ b/x/tokenization/keeper/inclusive_protocol_fees_test.go @@ -0,0 +1,305 @@ +package keeper_test + +import ( + "github.com/bitbadges/bitbadgeschain/x/tokenization/types" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// Inclusive protocol fee: the payer sends exactly the coin transfer amount. +// The chain skims 0.1% for the community pool out of that amount (not on top). +// See backlog #0335. + +// configureSingleCoinTransferApproval wires up a mint approval whose coinTransfer +// sends `amount` of ubadge from bob (creator) to alice on behalf of a mint. +func (suite *TestSuite) configureSingleCoinTransferApproval(amount sdkmath.Int) { + wctx := sdk.WrapSDKContext(suite.ctx) + collectionsToCreate := GetCollectionsToCreate() + collectionsToCreate[0].CollectionApprovals[0].FromListId = "Mint" + collectionsToCreate[0].CollectionApprovals[0].ApprovalCriteria.CoinTransfers = []*types.CoinTransfer{ + { + To: alice, + Coins: []*sdk.Coin{ + {Amount: amount, Denom: "ubadge"}, + }, + }, + } + collectionsToCreate[0].CollectionApprovals[0].ApprovalCriteria.OverridesFromOutgoingApprovals = true + collectionsToCreate[0].CollectionApprovals[0].ApprovalCriteria.OverridesToIncomingApprovals = true + + err := CreateCollections(suite, wctx, collectionsToCreate) + suite.Require().Nil(err, "error creating collection") +} + +func (suite *TestSuite) runMintTransferForCoinTransferApproval() error { + wctx := sdk.WrapSDKContext(suite.ctx) + return TransferTokens(suite, wctx, &types.MsgTransferTokens{ + Creator: bob, + CollectionId: sdkmath.NewUint(1), + Transfers: []*types.Transfer{ + { + From: "Mint", + ToAddresses: []string{alice}, + Balances: []*types.Balance{ + { + OwnershipTimes: GetFullUintRanges(), + TokenIds: GetFullUintRanges(), + Amount: sdkmath.NewUint(1), + }, + }, + PrioritizedApprovals: GetDefaultPrioritizedApprovals(suite.ctx, suite.app.TokenizationKeeper, sdkmath.NewUint(1)), + }, + }, + }) +} + +// TestInclusiveProtocolFeeDebitsPayerExactly verifies the payer is debited exactly +// the coin transfer amount (not amount + fee). The fee is carved out of the payment. +func (suite *TestSuite) TestInclusiveProtocolFeeDebitsPayerExactly() { + const gross int64 = 10_000 // 0.1% = 10 → non-zero fee + const expectedFee int64 = 10 + + suite.configureSingleCoinTransferApproval(sdkmath.NewInt(gross)) + + bobAddr := sdk.MustAccAddressFromBech32(bob) + aliceAddr := sdk.MustAccAddressFromBech32(alice) + poolAddr := suite.app.DistrKeeper.GetDistributionAccount(suite.ctx).GetAddress() + + bobBefore := suite.app.BankKeeper.GetBalance(suite.ctx, bobAddr, "ubadge").Amount + aliceBefore := suite.app.BankKeeper.GetBalance(suite.ctx, aliceAddr, "ubadge").Amount + poolBefore := suite.app.BankKeeper.GetBalance(suite.ctx, poolAddr, "ubadge").Amount + + err := suite.runMintTransferForCoinTransferApproval() + suite.Require().Nil(err, "transfer should succeed") + + bobAfter := suite.app.BankKeeper.GetBalance(suite.ctx, bobAddr, "ubadge").Amount + aliceAfter := suite.app.BankKeeper.GetBalance(suite.ctx, aliceAddr, "ubadge").Amount + poolAfter := suite.app.BankKeeper.GetBalance(suite.ctx, poolAddr, "ubadge").Amount + + // Payer sends exactly gross — not gross + fee. + suite.Require().Equal( + sdkmath.NewInt(gross), + bobBefore.Sub(bobAfter), + "payer should be debited exactly the coin transfer amount (inclusive fee)", + ) + + // Recipient gets gross - fee. + suite.Require().Equal( + sdkmath.NewInt(gross-expectedFee), + aliceAfter.Sub(aliceBefore), + "recipient should receive gross minus the inclusive protocol fee", + ) + + // Community pool received the fee. + suite.Require().Equal( + sdkmath.NewInt(expectedFee), + poolAfter.Sub(poolBefore), + "community pool should receive the protocol fee", + ) +} + +// TestInclusiveProtocolFeeRoundsToZero verifies small amounts below the fee +// denominator (1000 ubadge) pay no fee — matches the previous behavior at +// the low end, so existing integrations with small amounts are unaffected. +func (suite *TestSuite) TestInclusiveProtocolFeeRoundsToZero() { + const gross int64 = 100 // 0.1% = 0.1 → rounds down to 0 + + suite.configureSingleCoinTransferApproval(sdkmath.NewInt(gross)) + + bobAddr := sdk.MustAccAddressFromBech32(bob) + aliceAddr := sdk.MustAccAddressFromBech32(alice) + poolAddr := suite.app.DistrKeeper.GetDistributionAccount(suite.ctx).GetAddress() + + bobBefore := suite.app.BankKeeper.GetBalance(suite.ctx, bobAddr, "ubadge").Amount + aliceBefore := suite.app.BankKeeper.GetBalance(suite.ctx, aliceAddr, "ubadge").Amount + poolBefore := suite.app.BankKeeper.GetBalance(suite.ctx, poolAddr, "ubadge").Amount + + err := suite.runMintTransferForCoinTransferApproval() + suite.Require().Nil(err, "transfer should succeed") + + bobAfter := suite.app.BankKeeper.GetBalance(suite.ctx, bobAddr, "ubadge").Amount + aliceAfter := suite.app.BankKeeper.GetBalance(suite.ctx, aliceAddr, "ubadge").Amount + poolAfter := suite.app.BankKeeper.GetBalance(suite.ctx, poolAddr, "ubadge").Amount + + suite.Require().Equal(sdkmath.NewInt(gross), bobBefore.Sub(bobAfter), "payer debited gross") + suite.Require().Equal(sdkmath.NewInt(gross), aliceAfter.Sub(aliceBefore), "recipient gets full amount when fee rounds to zero") + suite.Require().Equal(sdkmath.ZeroInt(), poolAfter.Sub(poolBefore), "no fee routed to community pool for sub-denominator amounts") +} + +// TestInclusiveProtocolFeeWithRoyalty verifies royalty + protocol fee are both +// carved out of the gross payment. The payer still sends exactly the quoted +// amount, and the recipient gets gross - royalty - fee. +func (suite *TestSuite) TestInclusiveProtocolFeeWithRoyalty() { + const gross int64 = 10_000 + const royaltyBps = 1000 // 10% + const expectedFee int64 = 10 + const expectedRoyalty int64 = 1000 + const expectedRecipient int64 = gross - expectedFee - expectedRoyalty + + collectionsToCreate := GetTransferableCollectionToCreateAllMintedToCreator(bob) + wctx := sdk.WrapSDKContext(suite.ctx) + + collectionsToCreate[0].CollectionApprovals[1].ApprovalCriteria.UserApprovalSettings = &types.UserApprovalSettings{ + UserRoyalties: &types.UserRoyalties{ + Percentage: sdkmath.NewUint(royaltyBps), + PayoutAddress: charlie, + }, + } + suite.Require().Nil(CreateCollections(suite, wctx, collectionsToCreate), "error creating collection") + + suite.Require().Nil(UpdateUserApprovals(suite, wctx, &types.MsgUpdateUserApprovals{ + Creator: bob, + CollectionId: sdkmath.NewUint(1), + UpdateOutgoingApprovals: true, + OutgoingApprovals: []*types.UserOutgoingApproval{ + { + ToListId: "AllWithoutMint", + InitiatedByListId: alice, + TransferTimes: GetFullUintRanges(), + OwnershipTimes: GetFullUintRanges(), + TokenIds: []*types.UintRange{{Start: sdkmath.NewUint(1), End: sdkmath.NewUint(1)}}, + ApprovalId: "test", + ApprovalCriteria: &types.OutgoingApprovalCriteria{ + MaxNumTransfers: &types.MaxNumTransfers{ + OverallMaxNumTransfers: sdkmath.NewUint(1000), + AmountTrackerId: "test-tracker", + }, + ApprovalAmounts: &types.ApprovalAmounts{ + PerFromAddressApprovalAmount: sdkmath.NewUint(1), + AmountTrackerId: "test-tracker", + }, + CoinTransfers: []*types.CoinTransfer{ + { + To: alice, + OverrideFromWithApproverAddress: true, // bob (approver) pays + Coins: []*sdk.Coin{ + {Amount: sdkmath.NewInt(gross), Denom: "ubadge"}, + }, + }, + }, + }, + }, + }, + }), "error updating user approvals") + + bobAddr := sdk.MustAccAddressFromBech32(bob) + aliceAddr := sdk.MustAccAddressFromBech32(alice) + charlieAddr := sdk.MustAccAddressFromBech32(charlie) + poolAddr := suite.app.DistrKeeper.GetDistributionAccount(suite.ctx).GetAddress() + + bobBefore := suite.app.BankKeeper.GetBalance(suite.ctx, bobAddr, "ubadge").Amount + aliceBefore := suite.app.BankKeeper.GetBalance(suite.ctx, aliceAddr, "ubadge").Amount + charlieBefore := suite.app.BankKeeper.GetBalance(suite.ctx, charlieAddr, "ubadge").Amount + poolBefore := suite.app.BankKeeper.GetBalance(suite.ctx, poolAddr, "ubadge").Amount + + err := TransferTokens(suite, wctx, &types.MsgTransferTokens{ + Creator: alice, + CollectionId: sdkmath.NewUint(1), + Transfers: []*types.Transfer{ + { + From: bob, + ToAddresses: []string{alice}, + Balances: []*types.Balance{ + { + OwnershipTimes: GetFullUintRanges(), + TokenIds: GetOneUintRange(), + Amount: sdkmath.NewUint(1), + }, + }, + PrioritizedApprovals: []*types.ApprovalIdentifierDetails{ + {ApprovalId: "test", ApprovalLevel: "collection", Version: sdkmath.NewUint(0)}, + {ApprovalId: "test", ApprovalLevel: "outgoing", ApproverAddress: bob, Version: sdkmath.NewUint(1)}, + }, + }, + }, + }) + suite.Require().Nil(err, "transfer should succeed") + + bobAfter := suite.app.BankKeeper.GetBalance(suite.ctx, bobAddr, "ubadge").Amount + aliceAfter := suite.app.BankKeeper.GetBalance(suite.ctx, aliceAddr, "ubadge").Amount + charlieAfter := suite.app.BankKeeper.GetBalance(suite.ctx, charlieAddr, "ubadge").Amount + poolAfter := suite.app.BankKeeper.GetBalance(suite.ctx, poolAddr, "ubadge").Amount + + suite.Require().Equal(sdkmath.NewInt(gross), bobBefore.Sub(bobAfter), "payer debited exactly gross") + suite.Require().Equal(sdkmath.NewInt(expectedRecipient), aliceAfter.Sub(aliceBefore), "recipient gets gross - fee - royalty") + suite.Require().Equal(sdkmath.NewInt(expectedRoyalty), charlieAfter.Sub(charlieBefore), "royalty payout receives full royalty % of gross") + suite.Require().Equal(sdkmath.NewInt(expectedFee), poolAfter.Sub(poolBefore), "community pool receives fee % of gross") +} + +// TestInclusiveProtocolFeeRejectsRoyaltyPlusFeeOverflow verifies that a royalty +// percentage high enough that royalty + fee > gross is rejected rather than +// silently shortchanging the recipient by making them negative. +func (suite *TestSuite) TestInclusiveProtocolFeeRejectsRoyaltyPlusFeeOverflow() { + const gross int64 = 10_000 + + collectionsToCreate := GetTransferableCollectionToCreateAllMintedToCreator(bob) + wctx := sdk.WrapSDKContext(suite.ctx) + + // 100% royalty leaves zero for the recipient and 0.1% for the fee — overflow. + collectionsToCreate[0].CollectionApprovals[1].ApprovalCriteria.UserApprovalSettings = &types.UserApprovalSettings{ + UserRoyalties: &types.UserRoyalties{ + Percentage: sdkmath.NewUint(10000), // 100% + PayoutAddress: charlie, + }, + } + suite.Require().Nil(CreateCollections(suite, wctx, collectionsToCreate), "error creating collection") + + suite.Require().Nil(UpdateUserApprovals(suite, wctx, &types.MsgUpdateUserApprovals{ + Creator: bob, + CollectionId: sdkmath.NewUint(1), + UpdateOutgoingApprovals: true, + OutgoingApprovals: []*types.UserOutgoingApproval{ + { + ToListId: "AllWithoutMint", + InitiatedByListId: alice, + TransferTimes: GetFullUintRanges(), + OwnershipTimes: GetFullUintRanges(), + TokenIds: []*types.UintRange{{Start: sdkmath.NewUint(1), End: sdkmath.NewUint(1)}}, + ApprovalId: "test", + ApprovalCriteria: &types.OutgoingApprovalCriteria{ + MaxNumTransfers: &types.MaxNumTransfers{ + OverallMaxNumTransfers: sdkmath.NewUint(1000), + AmountTrackerId: "test-tracker", + }, + ApprovalAmounts: &types.ApprovalAmounts{ + PerFromAddressApprovalAmount: sdkmath.NewUint(1), + AmountTrackerId: "test-tracker", + }, + CoinTransfers: []*types.CoinTransfer{ + { + To: alice, + OverrideFromWithApproverAddress: true, + Coins: []*sdk.Coin{ + {Amount: sdkmath.NewInt(gross), Denom: "ubadge"}, + }, + }, + }, + }, + }, + }, + }), "error updating user approvals") + + err := TransferTokens(suite, wctx, &types.MsgTransferTokens{ + Creator: alice, + CollectionId: sdkmath.NewUint(1), + Transfers: []*types.Transfer{ + { + From: bob, + ToAddresses: []string{alice}, + Balances: []*types.Balance{ + { + OwnershipTimes: GetFullUintRanges(), + TokenIds: GetOneUintRange(), + Amount: sdkmath.NewUint(1), + }, + }, + PrioritizedApprovals: []*types.ApprovalIdentifierDetails{ + {ApprovalId: "test", ApprovalLevel: "collection", Version: sdkmath.NewUint(0)}, + {ApprovalId: "test", ApprovalLevel: "outgoing", ApproverAddress: bob, Version: sdkmath.NewUint(1)}, + }, + }, + }, + }) + suite.Require().Error(err, "royalty + protocol fee exceeding gross should be rejected") +} diff --git a/x/tokenization/keeper/keeper.go b/x/tokenization/keeper/keeper.go index d7adc141..8b2ece16 100644 --- a/x/tokenization/keeper/keeper.go +++ b/x/tokenization/keeper/keeper.go @@ -7,12 +7,12 @@ import ( "github.com/bitbadges/bitbadgeschain/x/tokenization/types" "cosmossdk.io/core/store" - "cosmossdk.io/log" - "cosmossdk.io/store/prefix" + "cosmossdk.io/log/v2" + "github.com/cosmos/cosmos-sdk/store/v2/prefix" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" - ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" + ibckeeper "github.com/cosmos/ibc-go/v11/modules/core/keeper" ) const ( diff --git a/x/tokenization/keeper/migrations.go b/x/tokenization/keeper/migrations.go index 4b3106ef..3ac84b1b 100644 --- a/x/tokenization/keeper/migrations.go +++ b/x/tokenization/keeper/migrations.go @@ -4,8 +4,8 @@ import ( "context" "encoding/json" - "cosmossdk.io/store/prefix" - storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/store/v2/prefix" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/tokenization/keeper/msg_create_dynamic_store_test.go b/x/tokenization/keeper/msg_create_dynamic_store_test.go index 506bffe5..b32d2f4a 100644 --- a/x/tokenization/keeper/msg_create_dynamic_store_test.go +++ b/x/tokenization/keeper/msg_create_dynamic_store_test.go @@ -3,6 +3,7 @@ package keeper_test import ( "testing" + sdkmath "cosmossdk.io/math" "github.com/bitbadges/bitbadgeschain/x/tokenization/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" @@ -25,3 +26,34 @@ func TestKeeper_MsgCreateDynamicStore(t *testing.T) { _, err = suite.msgServer.CreateDynamicStore(wctx, msg) require.Error(t, err) } + +// Regression: when the next-id counter is zero (uninitialized), the first +// create must assign id 1 AND advance the counter to 2 so the second create +// gets id 2 — not id 1, which would silently overwrite the first store. +func TestKeeper_MsgCreateDynamicStore_AssignsSequentialIdsFromZero(t *testing.T) { + suite := new(TestSuite) + suite.SetT(t) + suite.SetupTest() + ctx := suite.ctx + wctx := sdk.WrapSDKContext(ctx) + + suite.app.TokenizationKeeper.SetNextDynamicStoreId(ctx, sdkmath.NewUint(0)) + + creator := "bb1jmjfq0tplp9tmx4v9uemw72y4d2wa5nrjmmk3q" + + first, err := suite.msgServer.CreateDynamicStore(wctx, types.NewMsgCreateDynamicStore(creator, false)) + require.NoError(t, err) + require.Equal(t, sdkmath.NewUint(1), first.StoreId) + + second, err := suite.msgServer.CreateDynamicStore(wctx, types.NewMsgCreateDynamicStore(creator, false)) + require.NoError(t, err) + require.Equal(t, sdkmath.NewUint(2), second.StoreId, "second create must get a new id, not clobber id 1") + + third, err := suite.msgServer.CreateDynamicStore(wctx, types.NewMsgCreateDynamicStore(creator, false)) + require.NoError(t, err) + require.Equal(t, sdkmath.NewUint(3), third.StoreId) + + got, found := suite.app.TokenizationKeeper.GetDynamicStoreFromStore(ctx, sdkmath.NewUint(1)) + require.True(t, found) + require.Equal(t, creator, got.CreatedBy) +} diff --git a/x/tokenization/keeper/msg_server_create_collection.go b/x/tokenization/keeper/msg_server_create_collection.go index 9b5b55aa..b8696817 100644 --- a/x/tokenization/keeper/msg_server_create_collection.go +++ b/x/tokenization/keeper/msg_server_create_collection.go @@ -30,6 +30,7 @@ func (k msgServer) CreateCollection(goCtx context.Context, msg *types.MsgCreateC DefaultBalances: msg.DefaultBalances, // Applicable to creations and updates + UpdateValidTokenIds: true, ValidTokenIds: msg.ValidTokenIds, UpdateCollectionPermissions: true, CollectionPermissions: msg.CollectionPermissions, diff --git a/x/tokenization/keeper/msg_server_create_dynamic_store.go b/x/tokenization/keeper/msg_server_create_dynamic_store.go index ced016c4..0c47cc89 100644 --- a/x/tokenization/keeper/msg_server_create_dynamic_store.go +++ b/x/tokenization/keeper/msg_server_create_dynamic_store.go @@ -17,10 +17,16 @@ func (k msgServer) CreateDynamicStore(goCtx context.Context, msg *types.MsgCreat return nil, err } - // Get the next dynamic store ID + // Get the next dynamic store ID. If the counter has never been written + // (chain launched without genesis init for this field, or upgraded onto a + // chain where it was missing), GetNextDynamicStoreId returns 0. Treat 0 as + // "use 1" AND persist it, so the subsequent IncrementNextDynamicStoreId + // lands at 2 instead of 1 — otherwise the second create would re-use id 1 + // and silently overwrite the first store. nextStoreId := k.GetNextDynamicStoreId(ctx) - if nextStoreId.Equal(sdkmath.NewUint(0)) { + if nextStoreId.IsZero() { nextStoreId = sdkmath.NewUint(1) + k.SetNextDynamicStoreId(ctx, nextStoreId) } // Create the dynamic store diff --git a/x/tokenization/keeper/msg_server_new_collection_test.go b/x/tokenization/keeper/msg_server_new_collection_test.go index 0c38ee41..6eee1ead 100644 --- a/x/tokenization/keeper/msg_server_new_collection_test.go +++ b/x/tokenization/keeper/msg_server_new_collection_test.go @@ -95,6 +95,32 @@ func (suite *TestSuite) TestNewCollectionDuplicateTokenIds() { suite.Require().Error(err, "Error creating token: %s") } +// Regression: MsgCreateCollection wraps MsgUniversalUpdateCollection and must +// set UpdateValidTokenIds=true so ValidTokenIds persists to chain state. +func (suite *TestSuite) TestCreateCollectionPersistsValidTokenIds() { + wctx := sdk.WrapSDKContext(suite.ctx) + + validTokenIds := []*types.UintRange{{Start: sdkmath.NewUint(1), End: sdkmath.NewUint(1)}} + + res, err := suite.msgServer.CreateCollection(wctx, &types.MsgCreateCollection{ + Creator: bob, + ValidTokenIds: validTokenIds, + CollectionPermissions: &types.CollectionPermissions{ + CanUpdateValidTokenIds: []*types.TokenIdsActionPermission{{PermanentlyPermittedTimes: GetFullUintRanges()}}, + }, + DefaultBalances: &types.UserBalanceStore{ + AutoApproveSelfInitiatedOutgoingTransfers: true, + AutoApproveSelfInitiatedIncomingTransfers: true, + }, + }) + suite.Require().NoError(err, "CreateCollection failed") + suite.Require().NotNil(res) + + collection, err := GetCollection(suite, wctx, res.CollectionId) + suite.Require().NoError(err) + AssertUintRangesEqual(suite, validTokenIds, collection.ValidTokenIds) +} + func (suite *TestSuite) TestNewCollectionNonSequentialTokenIds() { wctx := sdk.WrapSDKContext(suite.ctx) diff --git a/x/tokenization/keeper/msg_server_universal_update_collection.go b/x/tokenization/keeper/msg_server_universal_update_collection.go index 62aa66d9..087d09e6 100644 --- a/x/tokenization/keeper/msg_server_universal_update_collection.go +++ b/x/tokenization/keeper/msg_server_universal_update_collection.go @@ -79,6 +79,19 @@ func ensureMintForbiddenPermission(permissions *types.CollectionPermissions, has // Security: Module addresses are derived using NewModuleCredential which uses the module name, // a unique prefix, and the path bytes. This makes collisions with user addresses extremely unlikely. // All generated path addresses are automatically marked as reserved protocol addresses to prevent conflicts. +// +// Cross-collection shared-address note: +// For backed paths (prefix=BackedPathGenerationPrefix, pathString=SideA.Denom), this +// derivation is NOT scoped by collection ID. Two collections declaring the same SideA.Denom +// produce the same bech32. That is intentionally tolerated today because the escrow drain +// path (see HandleSpecialAddressBacking in transfer_wrap.go) is gated by the from=Mint +// invariant in ValidateTransferWithInvariants, which prevents an attacker from minting +// tokens in a second collection that targets the same denom. Wrapper paths have the same +// shape but are safe for a different reason -- they operate on WrappedDenomPrefix+collectionId +// denoms, not raw bank coins. If the Mint-block invariant is ever relaxed, this derivation +// should be changed to mix the collection ID into fullPathBytes (or the reservation store +// extended to bind {address -> collectionId}) before that lands, or cross-collection drain +// becomes live for the backed path. func generatePathAddress(pathString string, prefix []byte) (sdk.AccAddress, error) { // Validate path string is not empty if pathString == "" { diff --git a/x/tokenization/keeper/pool_integration.go b/x/tokenization/keeper/pool_integration.go index d9a07d38..177e458e 100644 --- a/x/tokenization/keeper/pool_integration.go +++ b/x/tokenization/keeper/pool_integration.go @@ -232,9 +232,11 @@ func (k *Keeper) SendNativeTokensFromAddressWithPoolApprovals(ctx sdk.Context, f return sdkerrors.Wrapf(err, "failed to create one-time approval: %s", approvalId) } - // Important: We should only allow auto-scanned approvals here - // Anything prioritized is potentially unsafe if we are using an IBC hook (where we cannot trust the sender) - // The one-time outgoing approval is safe because it uses a unique ID and version + // Restrict the outgoing (pool) side to only the one-time prioritized approval we just set + // up — the pool cannot be drained via any other outgoing approval it happens to have. + // The incoming (recipient) side is intentionally left unrestricted so normal auto-scannable + // approvals (including the synthetic "all-incoming" for intermediate swap addresses with + // AutoApproveAllIncomingTransfers=true) can satisfy the transfer. msg := &tokenizationtypes.MsgTransferTokens{ Creator: recipientAddress, CollectionId: collection.CollectionId, @@ -251,7 +253,7 @@ func (k *Keeper) SendNativeTokensFromAddressWithPoolApprovals(ctx sdk.Context, f Version: approvalVersion, }, }, - OnlyCheckPrioritizedIncomingApprovals: true, + OnlyCheckPrioritizedOutgoingApprovals: true, }, }, } diff --git a/x/tokenization/keeper/pool_integration_test.go b/x/tokenization/keeper/pool_integration_test.go index ee0dfbeb..b43a8002 100644 --- a/x/tokenization/keeper/pool_integration_test.go +++ b/x/tokenization/keeper/pool_integration_test.go @@ -342,3 +342,136 @@ func (suite *PoolIntegrationTestSuite) TestGetBalancesToTransferWithAlias_Invali suite.Require().Error(err) } +// createCollectionWithAliasPathNoIncomingOverride builds a collection with alias paths but, +// unlike createCollectionWithAliasPath, leaves OverridesToIncomingApprovals=false so the +// recipient's incoming approvals are actually exercised on transfer. +func (suite *PoolIntegrationTestSuite) createCollectionWithAliasPathNoIncomingOverride(creator string, denom string) (*types.TokenCollection, string, error) { + wctx := sdk.WrapSDKContext(suite.ctx) + + collectionsToCreate := GetTransferableCollectionToCreateAllMintedToCreator(creator) + collectionsToCreate[0].AliasPathsToAdd = []*types.AliasPathAddObject{ + { + Denom: denom, + Conversion: &types.ConversionWithoutDenom{ + SideA: &types.ConversionSideA{Amount: sdkmath.NewUint(1)}, + SideB: []*types.Balance{ + { + Amount: sdkmath.NewUint(1), + OwnershipTimes: GetFullUintRanges(), + TokenIds: GetOneUintRange(), + }, + }, + }, + Symbol: "SWAPHOOK", + DenomUnits: []*types.DenomUnit{{Decimals: sdkmath.NewUint(6), Symbol: denom, IsDefaultDisplay: true}}, + }, + } + collectionsToCreate[0].CollectionApprovals = append(collectionsToCreate[0].CollectionApprovals, &types.CollectionApproval{ + ApprovalId: "wrapper-transfer", + TransferTimes: GetFullUintRanges(), + OwnershipTimes: GetFullUintRanges(), + TokenIds: GetOneUintRange(), + FromListId: "AllWithoutMint", + ToListId: "AllWithoutMint", + InitiatedByListId: "AllWithoutMint", + ApprovalCriteria: &types.ApprovalCriteria{ + OverridesFromOutgoingApprovals: true, + // Deliberately NOT setting OverridesToIncomingApprovals — we want the recipient's + // incoming approvals to run, which is how the swap-and-action-hooks flow actually + // behaves for intermediate addresses. + }, + }) + + if err := CreateCollections(&suite.TestSuite, wctx, collectionsToCreate); err != nil { + return nil, "", err + } + + collection, err := GetCollection(&suite.TestSuite, wctx, sdkmath.NewUint(1)) + if err != nil { + return nil, "", err + } + + wrapperDenom := keeper.AliasDenomPrefix + collection.CollectionId.String() + ":" + denom + return collection, wrapperDenom, nil +} + +// TestSendNativeTokensFromAddressWithPoolApprovals_RecipientUsesAutoApproveAllIncoming simulates +// the swap-and-action-hooks flow where a pool sends wrapped tokens to an intermediate address +// that was just flagged with AutoApproveAllIncomingTransfers=true (e.g., an IBC-derived swap +// recipient). The synthetic "all-incoming" approval must satisfy the transfer. +// +// Regression: previously this path set OnlyCheckPrioritizedIncomingApprovals=true on the +// generated transfer, which dropped the synthetic (and every other non-prioritized incoming +// approval) from the filter, causing "incoming approvals not satisfied" even though the +// recipient had explicitly opted into receiving everything. +func (suite *PoolIntegrationTestSuite) TestSendNativeTokensFromAddressWithPoolApprovals_RecipientUsesAutoApproveAllIncoming() { + wctx := sdk.WrapSDKContext(suite.ctx) + + collection, wrapperDenom, err := suite.createCollectionWithAliasPathNoIncomingOverride(bob, "swaphooktest") + suite.Require().NoError(err) + + // Mint tokens to bob (stand-in for the pool's pre-funded source). + err = TransferTokens(&suite.TestSuite, wctx, &types.MsgTransferTokens{ + Creator: bob, + CollectionId: sdkmath.NewUint(1), + Transfers: []*types.Transfer{ + { + From: "Mint", + ToAddresses: []string{bob}, + Balances: []*types.Balance{ + { + Amount: sdkmath.NewUint(10), + TokenIds: GetOneUintRange(), + OwnershipTimes: GetFullUintRanges(), + }, + }, + PrioritizedApprovals: []*types.ApprovalIdentifierDetails{ + { + ApprovalId: "mint-test", + ApprovalLevel: "collection", + ApproverAddress: "", + Version: sdkmath.NewUint(0), + }, + }, + }, + }, + }) + suite.Require().NoError(err) + + // Recipient = alice, standing in for the IBC-derived intermediate swap address. + // Simulate swap-and-action-hooks flagging the intermediate for auto-approve. + err = UpdateUserApprovals(&suite.TestSuite, wctx, &types.MsgUpdateUserApprovals{ + Creator: alice, + CollectionId: sdkmath.NewUint(1), + UpdateAutoApproveAllIncomingTransfers: true, + AutoApproveAllIncomingTransfers: true, + }) + suite.Require().NoError(err) + + aliceBalanceBefore, err := GetUserBalance(&suite.TestSuite, wctx, collection.CollectionId, alice) + suite.Require().NoError(err) + suite.Require().True(aliceBalanceBefore.AutoApproveAllIncomingTransfers) + + // The call under test — mirrors what SendCoinsFromPoolWithAliasRouting invokes after the + // gamm swap finishes and needs to move tokenized output to the recipient. + err = suite.app.TokenizationKeeper.SendNativeTokensFromAddressWithPoolApprovals( + suite.ctx, + bob, // fromAddress (pool stand-in) + alice, // recipient (intermediate swap address) + wrapperDenom, + sdkmath.NewUint(1), + ) + suite.Require().NoError(err, "pool->intermediate transfer must succeed when recipient has AutoApproveAllIncomingTransfers") + + // Sanity: alice received the tokens and the one-time outgoing approval was cleaned up on bob. + aliceBalanceAfter, err := GetUserBalance(&suite.TestSuite, wctx, collection.CollectionId, alice) + suite.Require().NoError(err) + suite.Require().True(len(aliceBalanceAfter.Balances) > 0, "recipient should have received tokens") + + bobBalanceAfter, err := GetUserBalance(&suite.TestSuite, wctx, collection.CollectionId, bob) + suite.Require().NoError(err) + for _, ap := range bobBalanceAfter.OutgoingApprovals { + suite.Require().NotContains(ap.ApprovalId, "one-time-outgoing-", "one-time approval must be deleted after transfer") + } +} + diff --git a/x/tokenization/keeper/store.go b/x/tokenization/keeper/store.go index 603a5dd0..c2f3b14f 100644 --- a/x/tokenization/keeper/store.go +++ b/x/tokenization/keeper/store.go @@ -13,8 +13,8 @@ import ( sdkmath "cosmossdk.io/math" - "cosmossdk.io/store/prefix" - storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/store/v2/prefix" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" ) // The following methods are used for the store and everything associated with tokens. diff --git a/x/tokenization/keeper/transfer_utils.go b/x/tokenization/keeper/transfer_utils.go index 4c1a979c..596e49c7 100644 --- a/x/tokenization/keeper/transfer_utils.go +++ b/x/tokenization/keeper/transfer_utils.go @@ -3,94 +3,13 @@ package keeper import ( "encoding/json" "fmt" - "sort" "github.com/bitbadges/bitbadgeschain/x/tokenization/types" - sdkerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" ) -const ( - // ProtocolFeeDenominator represents the denominator for protocol fee calculation (0.1% = 1/1000) - ProtocolFeeDenominator = 1000 -) - -// CalculateAndDistributeProtocolFees calculates protocol fees from coin transfers and distributes them -// to the community pool -func (k Keeper) CalculateAndDistributeProtocolFees( - ctx sdk.Context, - coinTransfers []CoinTransfers, - initiatedBy string, -) ([]CoinTransfers, error) { - // Calculate protocol fees for all denoms (0.1% of each denom transferred) - protocolFees := sdk.NewCoins() - denomAmounts := make(map[string]sdkmath.Uint) - - for _, coinTransfer := range coinTransfers { - amount := sdkmath.NewUintFromString(coinTransfer.Amount) - // initialize it if it doesn't exist - if _, ok := denomAmounts[coinTransfer.Denom]; !ok { - denomAmounts[coinTransfer.Denom] = sdkmath.NewUint(0) - } - - denomAmounts[coinTransfer.Denom] = denomAmounts[coinTransfer.Denom].Add(amount) - } - - // Sort map keys for deterministic iteration order - denoms := make([]string, 0, len(denomAmounts)) - for denom := range denomAmounts { - denoms = append(denoms, denom) - } - sort.Strings(denoms) - - for _, denom := range denoms { - totalAmount := denomAmounts[denom] - // 0.1% of the total amount for this denom - // Safety check to prevent division by zero - if ProtocolFeeDenominator == 0 { - return nil, sdkerrors.Wrapf(types.ErrInvalidRequest, "protocol fee denominator cannot be zero") - } - protocolFee := totalAmount.Quo(sdkmath.NewUint(ProtocolFeeDenominator)) - - // For other denoms, just use 0.1% - if !protocolFee.IsZero() { - protocolFees = protocolFees.Add(sdk.NewCoin(denom, sdkmath.NewIntFromBigInt(protocolFee.BigInt()))) - } - } - - fromAddressAcc, err := sdk.AccAddressFromBech32(initiatedBy) - if err != nil { - return nil, err - } - - var protocolFeeTransfers []CoinTransfers - - if !protocolFees.IsZero() { - // Send all fees to community pool using FundCommunityPoolWithAliasRouting to support wrapped badge denoms - err = k.sendManagerKeeper.FundCommunityPoolWithAliasRouting(ctx, fromAddressAcc, protocolFees) - if err != nil { - return nil, sdkerrors.Wrapf(err, "error funding community pool with protocol fees: %s", protocolFees) - } - - // Add all protocol fees to coinTransfers for community pool - for _, protocolFee := range protocolFees { - protocolFeeTransfers = append(protocolFeeTransfers, CoinTransfers{ - From: initiatedBy, - To: authtypes.NewModuleAddress(distrtypes.ModuleName).String(), - Amount: protocolFee.Amount.String(), - Denom: protocolFee.Denom, - IsProtocolFee: true, - }) - } - } - - return protocolFeeTransfers, nil -} - // HandleAutoDeletions processes auto-deletion logic for approvals after transfers func (k Keeper) HandleAutoDeletions( ctx sdk.Context, diff --git a/x/tokenization/keeper/transfer_wrap.go b/x/tokenization/keeper/transfer_wrap.go index 44362eeb..9fae2096 100644 --- a/x/tokenization/keeper/transfer_wrap.go +++ b/x/tokenization/keeper/transfer_wrap.go @@ -163,8 +163,36 @@ func (k Keeper) HandleSpecialAddressWrapping( return nil } -// HandleSpecialAddressBacking processes cosmos coin backing/unbacking for special addresses -// This uses bankKeeper.SendCoins instead of minting/burning coins +// HandleSpecialAddressBacking processes cosmos coin backing/unbacking for special addresses. +// This uses bankKeeper.SendCoins instead of minting/burning coins. +// +// Cross-collection shared-escrow note (not exploitable under current invariants): +// The escrow address `path.Address` is derived from (denom, BackedPathGenerationPrefix) only, +// so two collections declaring the same SideA.Denom resolve to the same bech32. A naive read +// of the code below (SendCoins from specialAddressAcc -> initiator) looks like it would let a +// new collection drain a victim collection's pre-existing bank balance at the shared address. +// That drain is currently blocked upstream by: +// 1. ValidateTransferWithInvariants (validate_basic.go) rejects from=Mint transfers on any +// collection with CosmosCoinBackedPath, so an attacker cannot mint collection tokens +// from thin air to feed into the backing direction. +// 2. The only way to obtain collection tokens is the legitimate unbacking flow, which +// requires SendCoins(initiator -> specialAddress, ibcDenom) first -- i.e. the attacker +// has to deposit the real bank coin before they can redeem it. +// 3. calculateConversionMultiplier enforces evenly-divisible conversions, so the same +// SideA/SideB ratio applies in both directions -- redeem returns exactly what was deposited. +// Together (1)+(2)+(3) make the drain net-zero for an attacker under their OWN collection's +// conversion, regardless of what other collections have deposited at the shared address. +// +// Caveats / do NOT remove lightly: +// - Defense-in-depth gap: ValidateCollectionApprovalsWithInvariants does not reject +// from=Mint approvals at creation time on backed collections; the block only fires +// at transfer time. Hardening would move the check earlier. +// - If a future change introduces any collection-token issuance path that bypasses the +// from=Mint invariant (e.g. a new message type, a cross-chain inbound mint, a relaxed +// invariant), the shared-address drain becomes live and this comment is no longer true. +// - Scoping the derived address by collectionId (mixing collection.CollectionId into the +// module-credential input in generatePathAddress) would make this defense structural +// rather than invariant-dependent, and is the recommended long-term fix. func (k Keeper) HandleSpecialAddressBacking( ctx sdk.Context, collection *types.TokenCollection, diff --git a/x/tokenization/keeper/transfers.go b/x/tokenization/keeper/transfers.go index 8cde1c1d..a6396f64 100644 --- a/x/tokenization/keeper/transfers.go +++ b/x/tokenization/keeper/transfers.go @@ -219,14 +219,8 @@ func (k Keeper) handleTransfersInternal(ctx sdk.Context, collection *types.Token return err } - // Calculate and distribute protocol fees - protocolFeeTransfers, err := k.CalculateAndDistributeProtocolFees(ctx, coinTransfers, initiatedBy) - if err != nil { - return err - } - - // Add protocol fee transfers to the main coinTransfers slice - coinTransfers = append(coinTransfers, protocolFeeTransfers...) + // Protocol fees are now deducted inclusively inside ExecuteCoinTransfers and + // are already present in coinTransfers as entries with IsProtocolFee=true. err = EmitUsedApprovalDetailsEvent(ctx, collection.CollectionId, transfer.From, to, initiatedBy, coinTransfers, approvalsUsed, transfer.Balances) if err != nil { diff --git a/x/tokenization/module/module.go b/x/tokenization/module/module.go index cd821744..461e8b3d 100644 --- a/x/tokenization/module/module.go +++ b/x/tokenization/module/module.go @@ -8,7 +8,7 @@ import ( "cosmossdk.io/core/appmodule" "cosmossdk.io/core/store" "cosmossdk.io/depinject" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" cdctypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -16,8 +16,8 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" - ibckeeper "github.com/cosmos/ibc-go/v10/modules/core/keeper" + porttypes "github.com/cosmos/ibc-go/v11/modules/core/05-port/types" + ibckeeper "github.com/cosmos/ibc-go/v11/modules/core/keeper" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" diff --git a/x/tokenization/module/module_ibc.go b/x/tokenization/module/module_ibc.go index c50e5f49..bb7618f3 100644 --- a/x/tokenization/module/module_ibc.go +++ b/x/tokenization/module/module_ibc.go @@ -9,9 +9,9 @@ import ( errorsmod "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" - porttypes "github.com/cosmos/ibc-go/v10/modules/core/05-port/types" - ibcexported "github.com/cosmos/ibc-go/v10/modules/core/exported" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v11/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" ) // IBCModule implements the ICS26 interface for interchain accounts host chains diff --git a/x/tokenization/precompile/precompile.go b/x/tokenization/precompile/precompile.go index b52a5e46..265d0bc0 100644 --- a/x/tokenization/precompile/precompile.go +++ b/x/tokenization/precompile/precompile.go @@ -37,7 +37,7 @@ import ( "github.com/cosmos/gogoproto/proto" sdkmath "cosmossdk.io/math" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/tokenization/precompile/test/integration/evm_keeper_integration_test.go b/x/tokenization/precompile/test/integration/evm_keeper_integration_test.go index 07fdc0f7..36dec95f 100644 --- a/x/tokenization/precompile/test/integration/evm_keeper_integration_test.go +++ b/x/tokenization/precompile/test/integration/evm_keeper_integration_test.go @@ -23,7 +23,7 @@ import ( "github.com/stretchr/testify/suite" sdkmath "cosmossdk.io/math" - storetypes "cosmossdk.io/store/types" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" sdk "github.com/cosmos/cosmos-sdk/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" diff --git a/x/tokenization/testutil/keeper/tokenization.go b/x/tokenization/testutil/keeper/tokenization.go index e5786112..49e4caf9 100644 --- a/x/tokenization/testutil/keeper/tokenization.go +++ b/x/tokenization/testutil/keeper/tokenization.go @@ -3,11 +3,10 @@ package keeper import ( "testing" - "cosmossdk.io/log" + "cosmossdk.io/log/v2" "cosmossdk.io/math" - "cosmossdk.io/store" - "cosmossdk.io/store/metrics" - storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/store/v2" + storetypes "github.com/cosmos/cosmos-sdk/store/v2/types" cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/codec" @@ -35,7 +34,7 @@ func TokenizationKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { transientStoreKey := customhookstypes.TransientStoreKey db := dbm.NewMemDB() - stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger()) stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) stateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) stateStore.MountStoreWithDB(transientStoreKey, storetypes.StoreTypeTransient, db) diff --git a/x/tokenization/types/expected_ibc_keeper.go b/x/tokenization/types/expected_ibc_keeper.go index 34873e70..0c7c65fb 100644 --- a/x/tokenization/types/expected_ibc_keeper.go +++ b/x/tokenization/types/expected_ibc_keeper.go @@ -4,8 +4,8 @@ import ( "context" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" - clienttypes "github.com/cosmos/ibc-go/v10/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" ) // ChannelKeeper defines the expected IBC channel keeper. diff --git a/x/tokenization/types/genesis.go b/x/tokenization/types/genesis.go index eee22e59..eff7180b 100644 --- a/x/tokenization/types/genesis.go +++ b/x/tokenization/types/genesis.go @@ -2,7 +2,7 @@ package types import ( types "cosmossdk.io/math" - host "github.com/cosmos/ibc-go/v10/modules/core/24-host" + host "github.com/cosmos/ibc-go/v11/modules/core/24-host" // this line is used by starport scaffolding # genesis/types/import ) diff --git a/x/tokenization/types/validate_basic.go b/x/tokenization/types/validate_basic.go index 143f0a00..ac6f03cb 100644 --- a/x/tokenization/types/validate_basic.go +++ b/x/tokenization/types/validate_basic.go @@ -230,7 +230,22 @@ func ValidateNoStringElementIsX(addresses []string, x string) error { return nil } -// ValidateAltTimeChecks validates alt time checks for offline hours and days +// MaxTimezoneOffsetMinutes is the widest real-world UTC offset in minutes +// (UTC+14:00 is observed in Kiribati; UTC-12:00 is the westernmost common +// offset). We bound |offset| ≤ 14 * 60 = 840 regardless of sign. Anything +// larger is either a malformed client or a griefing attempt. +const MaxTimezoneOffsetMinutes = uint64(14 * 60) + +// ValidateAltTimeChecks validates alt time checks for offline hours, days, +// months, days-of-month, weeks-of-year, and the timezone offset magnitude. +// +// All fields originate from attacker-controlled messages (e.g. +// MsgSetIncomingApproval). Without these bounds, a caller can set +// TimezoneOffsetMinutes to an arbitrary sdkmath.Uint, which would later +// panic during transfer evaluation when the consumer calls .Uint64() on an +// out-of-uint64-range value, or silently wrap through int64 overflow for +// values in [2^63, 2^64-1]. We reject at validate-basic time so the producer +// fails fast rather than the consumer band-aiding. func ValidateAltTimeChecks(altTimeChecks *AltTimeChecks) error { if altTimeChecks == nil { return nil @@ -241,11 +256,42 @@ func ValidateAltTimeChecks(altTimeChecks *AltTimeChecks) error { return err } - // Validate offline days (0-6) + // Validate offline days of week (0-6, Sunday..Saturday) if err := validateTimeRanges(altTimeChecks.OfflineDays, 0, 6, "offline days"); err != nil { return err } + // Validate offline months (1-12, January..December) + if err := validateTimeRanges(altTimeChecks.OfflineMonths, 1, 12, "offline months"); err != nil { + return err + } + + // Validate offline days of month (1-31) + if err := validateTimeRanges(altTimeChecks.OfflineDaysOfMonth, 1, 31, "offline days of month"); err != nil { + return err + } + + // Validate offline weeks of year (1-53, ISO 8601 week numbering). + // ISO weeks can be 53 in long years (e.g. 2020, 2026), so upper bound is 53. + if err := validateTimeRanges(altTimeChecks.OfflineWeeksOfYear, 1, 53, "offline weeks of year"); err != nil { + return err + } + + // Validate timezone offset magnitude. The proto field is an sdkmath.Uint + // (arbitrary 256-bit), so we must defend against values that would panic + // or silently wrap when converted to a time.Duration later in + // x/tokenization/approval_criteria/alt_time_checks.go. + if !altTimeChecks.TimezoneOffsetMinutes.IsNil() { + // Reject anything that doesn't fit in uint64 (would panic in .Uint64()). + if !altTimeChecks.TimezoneOffsetMinutes.BigInt().IsUint64() { + return sdkerrors.Wrapf(ErrInvalidRequest, "timezoneOffsetMinutes exceeds uint64 range (max real-world offset is %d minutes)", MaxTimezoneOffsetMinutes) + } + offsetMinutes := altTimeChecks.TimezoneOffsetMinutes.Uint64() + if offsetMinutes > MaxTimezoneOffsetMinutes { + return sdkerrors.Wrapf(ErrInvalidRequest, "timezoneOffsetMinutes %d exceeds maximum real-world offset of %d minutes (±14 hours from UTC)", offsetMinutes, MaxTimezoneOffsetMinutes) + } + } + return nil } @@ -271,10 +317,29 @@ func validateTimeRanges(ranges []*UintRange, min, max uint64, fieldName string) return sdkerrors.Wrapf(ErrUintUnititialized, "%s range at index %d has nil start or end", fieldName, i) } + // Reject values that do not fit in uint64 before calling .Uint64(), + // which would panic on overflow. The subsequent `start > max` / + // `end > max` checks will then reject values that fit in uint64 but + // exceed the field's logical max. + if !r.Start.BigInt().IsUint64() { + return sdkerrors.Wrapf(ErrInvalidRequest, "%s range at index %d has start value that exceeds uint64 range (maximum is %d)", fieldName, i, max) + } + if !r.End.BigInt().IsUint64() { + return sdkerrors.Wrapf(ErrInvalidRequest, "%s range at index %d has end value that exceeds uint64 range (maximum is %d)", fieldName, i, max) + } + start := r.Start.Uint64() end := r.End.Uint64() - // Check that start and end are within valid range (0 to max, inclusive) + // Check that start and end are within valid range [min, max] inclusive. + if start < min { + return sdkerrors.Wrapf(ErrInvalidRequest, "%s range at index %d has start value %d which is below minimum %d", fieldName, i, start, min) + } + + if end < min { + return sdkerrors.Wrapf(ErrInvalidRequest, "%s range at index %d has end value %d which is below minimum %d", fieldName, i, end, min) + } + if start > max { return sdkerrors.Wrapf(ErrInvalidRequest, "%s range at index %d has start value %d which exceeds maximum %d", fieldName, i, start, max) } @@ -1160,7 +1225,19 @@ func ValidateTransferWithInvariants(ctx sdk.Context, transfer *Transfer, canChan } } - // If cosmosCoinBackedPath is set, transfers from Mint address are not allowed + // If cosmosCoinBackedPath is set, transfers from Mint address are not allowed. + // + // SECURITY: this check is load-bearing for cross-collection drain safety, not just + // a UX/accounting rule. The backed-path escrow address is derived from (denom, prefix) + // only, so two collections declaring the same SideA.Denom share one on-chain address + // that may hold real bank coins deposited by a victim collection's users. Blocking + // from=Mint here means an attacker cannot conjure collection tokens out of thin air + // to feed into the backing direction -- they can only obtain tokens via the legitimate + // unbacking flow, which requires depositing the real bank coin first. Combined with + // evenly-divisible symmetric conversion, this makes the shared-escrow drain net-zero. + // See HandleSpecialAddressBacking in keeper/transfer_wrap.go for the full argument. + // Do NOT relax this check without also scoping the backed-path address derivation + // by collection ID, or the drain becomes live. if collection.Invariants.CosmosCoinBackedPath != nil { if IsMintAddress(transfer.From) { return sdkerrors.Wrapf(ErrInvalidRequest, "transfers from Mint address are not allowed when cosmosCoinBackedPath is set") diff --git a/x/tokenization/types/validate_basic_test.go b/x/tokenization/types/validate_basic_test.go index f1bfa280..72a5553b 100644 --- a/x/tokenization/types/validate_basic_test.go +++ b/x/tokenization/types/validate_basic_test.go @@ -362,16 +362,166 @@ func TestValidateAltTimeChecks(t *testing.T) { }, expectError: false, }, + // --- v29 field coverage: OfflineMonths (1-12) --- + { + name: "valid offline months boundary - should pass", + altTimeChecks: &AltTimeChecks{ + OfflineMonths: []*UintRange{ + {Start: sdkmath.NewUint(1), End: sdkmath.NewUint(12)}, + }, + }, + expectError: false, + }, + { + name: "offline months start below minimum (0) - should fail", + altTimeChecks: &AltTimeChecks{ + OfflineMonths: []*UintRange{ + {Start: sdkmath.NewUint(0), End: sdkmath.NewUint(5)}, + }, + }, + expectError: true, + }, + { + name: "offline months end exceeds 12 - should fail", + altTimeChecks: &AltTimeChecks{ + OfflineMonths: []*UintRange{ + {Start: sdkmath.NewUint(1), End: sdkmath.NewUint(13)}, + }, + }, + expectError: true, + }, + // --- v29 field coverage: OfflineDaysOfMonth (1-31) --- + { + name: "valid offline days of month boundary - should pass", + altTimeChecks: &AltTimeChecks{ + OfflineDaysOfMonth: []*UintRange{ + {Start: sdkmath.NewUint(1), End: sdkmath.NewUint(31)}, + }, + }, + expectError: false, + }, + { + name: "offline days of month start 0 - should fail", + altTimeChecks: &AltTimeChecks{ + OfflineDaysOfMonth: []*UintRange{ + {Start: sdkmath.NewUint(0), End: sdkmath.NewUint(15)}, + }, + }, + expectError: true, + }, + { + name: "offline days of month end 32 - should fail", + altTimeChecks: &AltTimeChecks{ + OfflineDaysOfMonth: []*UintRange{ + {Start: sdkmath.NewUint(1), End: sdkmath.NewUint(32)}, + }, + }, + expectError: true, + }, + // --- v29 field coverage: OfflineWeeksOfYear (1-53, ISO-week upper bound) --- + { + name: "valid offline weeks of year boundary 53 - should pass", + altTimeChecks: &AltTimeChecks{ + OfflineWeeksOfYear: []*UintRange{ + {Start: sdkmath.NewUint(1), End: sdkmath.NewUint(53)}, + }, + }, + expectError: false, + }, + { + name: "offline weeks of year start 0 - should fail", + altTimeChecks: &AltTimeChecks{ + OfflineWeeksOfYear: []*UintRange{ + {Start: sdkmath.NewUint(0), End: sdkmath.NewUint(10)}, + }, + }, + expectError: true, + }, + { + name: "offline weeks of year end 54 - should fail", + altTimeChecks: &AltTimeChecks{ + OfflineWeeksOfYear: []*UintRange{ + {Start: sdkmath.NewUint(1), End: sdkmath.NewUint(54)}, + }, + }, + expectError: true, + }, + // --- v29 field coverage: TimezoneOffsetMinutes (0..840) --- + { + name: "timezone offset zero (UTC) - should pass", + altTimeChecks: &AltTimeChecks{ + TimezoneOffsetMinutes: sdkmath.NewUint(0), + }, + expectError: false, + }, + { + name: "timezone offset 300 (EST) - should pass", + altTimeChecks: &AltTimeChecks{ + TimezoneOffsetMinutes: sdkmath.NewUint(300), + }, + expectError: false, + }, + { + name: "timezone offset 840 (UTC+14:00 Kiribati - max real-world) - should pass", + altTimeChecks: &AltTimeChecks{ + TimezoneOffsetMinutes: sdkmath.NewUint(840), + }, + expectError: false, + }, + { + name: "timezone offset 841 (just over max real-world) - should fail", + altTimeChecks: &AltTimeChecks{ + TimezoneOffsetMinutes: sdkmath.NewUint(841), + }, + expectError: true, + }, + { + name: "timezone offset in silent-wrap range [2^63+1] - should fail", + altTimeChecks: &AltTimeChecks{ + // 2^63 + 1 — fits in uint64 but time.Duration(u64) * time.Minute + // silently wraps through int64 overflow at the consumer. + TimezoneOffsetMinutes: sdkmath.NewUintFromString("9223372036854775809"), + }, + expectError: true, + }, + { + name: "timezone offset at uint64 max - should fail", + altTimeChecks: &AltTimeChecks{ + TimezoneOffsetMinutes: sdkmath.NewUintFromString("18446744073709551615"), + }, + expectError: true, + }, + { + name: "timezone offset exceeds uint64 (2^64) - should fail without panic", + altTimeChecks: &AltTimeChecks{ + // 2^64 — would panic in .Uint64() at the consumer. Must be + // caught by ValidateBasic with a regular error, not a panic. + TimezoneOffsetMinutes: sdkmath.NewUintFromString("18446744073709551616"), + }, + expectError: true, + }, + { + name: "timezone offset 200-bit value - should fail without panic", + altTimeChecks: &AltTimeChecks{ + // Larger than 2^64 and well into sdkmath.Uint territory. + TimezoneOffsetMinutes: sdkmath.NewUintFromString("1606938044258990275541962092341162602522202993782792835301376"), + }, + expectError: true, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err := ValidateAltTimeChecks(tt.altTimeChecks) - if tt.expectError { - require.Error(t, err, "expected error but got none") - } else { - require.NoError(t, err, "expected no error but got: %v", err) - } + // The fix must never panic — attacker-controlled values going + // into validate_basic should yield errors, not crashes. + require.NotPanics(t, func() { + err := ValidateAltTimeChecks(tt.altTimeChecks) + if tt.expectError { + require.Error(t, err, "expected error but got none") + } else { + require.NoError(t, err, "expected no error but got: %v", err) + } + }) }) } }