diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..922c8a1fd --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,90 @@ +name: CI + +on: + push: + tags: + - "*" + release: + types: + - created + branches: + - "releases/v3.x" + - "chore/fix-ci" + pull_request: + branches: + - "releases/v3.x" + - "chore/fix-ci" + workflow_dispatch: + inputs: + tag: + description: 'Tag to run the workflow for' + required: false + default: '' + +jobs: + docker: + runs-on: self-hosted + env: + DOCKER_BUILDKIT: 1 + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.event.inputs.tag || github.ref }} + + - name: Install dependencies + run: sudo apt-get update && sudo apt-get install -y jq curl git + + - name: Install Go + run: | + GO_VERSION=1.22.4 + curl -LO https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz + echo "export PATH=$PATH:/usr/local/go/bin" >> $HOME/.profile + source $HOME/.profile + shell: bash + + - name: Download Buildx with Hydrobuilder support + run: | + ARCH=amd64 + BUILDX_URL=$(curl -s https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/buildx-lab-releases.json | jq -r ".latest.assets[] | select(endswith(\"linux-$ARCH\"))") + mkdir -vp ~/.docker/cli-plugins/ + curl --silent -L --output ~/.docker/cli-plugins/docker-buildx $BUILDX_URL + chmod a+x ~/.docker/cli-plugins/docker-buildx + + - name: Get version from git tags or input + id: get_version + run: | + if [ -n "${{ github.event.inputs.tag }}" ]; then + VERSION=${{ github.event.inputs.tag }} + else + VERSION=$(git describe --tags --abbrev=0) + fi + echo "VERSION=$VERSION" >> $GITHUB_ENV + + - name: Log in to Docker Hub + run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login --username ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + with: + version: "lab:latest" + driver: cloud + endpoint: "neutronorg/neutron" + install: true + + - name: Build and push Docker image + env: + VERSION: ${{ env.VERSION }} + BUILDER: ${{ steps.buildx.outputs.name }} + run: | + docker buildx use $BUILDER + make build-static-linux-amd64 + docker tag neutron-amd64:latest neutronorg/neutron:${{ env.VERSION }} + docker push neutronorg/neutron:${{ env.VERSION }} + + - name: Cleanup temporary container + run: docker rm -f neutronbinary || true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0560f62e9..8fce320a6 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,7 +14,7 @@ permissions: jobs: golangci: name: lint - runs-on: ubuntu-latest + runs-on: self-hosted steps: - uses: actions/setup-go@v4 with: diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 4fa60b7e6..3bf73312b 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -5,7 +5,7 @@ on: [push, pull_request] jobs: tests: name: Test - runs-on: ubuntu-latest + runs-on: self-hosted steps: - name: Set up Go 1.22 uses: actions/setup-go@v4 diff --git a/.github/workflows/test_trigger.yml b/.github/workflows/test_trigger.yml index f58802c71..6b2102ae8 100644 --- a/.github/workflows/test_trigger.yml +++ b/.github/workflows/test_trigger.yml @@ -14,7 +14,7 @@ on: jobs: dispatch: name: Dispatch Tests Workflow - runs-on: ubuntu-latest + runs-on: self-hosted steps: - name: Evaluate PR Merged Status and Labels run: | diff --git a/Dockerfile.builder b/Dockerfile.builder index a4bf34db0..7cd81b0ee 100644 --- a/Dockerfile.builder +++ b/Dockerfile.builder @@ -7,7 +7,7 @@ ARG RUNNER_IMAGE="gcr.io/distroless/static" # Builder # -------------------------------------------------------- -FROM golang:${GO_VERSION}-alpine3.18 as builder +FROM golang:${GO_VERSION}-alpine3.20 as builder ARG GIT_VERSION ARG GIT_COMMIT diff --git a/Makefile b/Makefile index f99479a9b..9c8a00e2d 100644 --- a/Makefile +++ b/Makefile @@ -121,7 +121,7 @@ build-static-linux-amd64: go.sum $(BUILDDIR)/ $(DOCKER) cp neutronbinary:/bin/neutrond $(BUILDDIR)/neutrond-linux-amd64 $(DOCKER) rm -f neutronbinary -build-slinky-e2e-docker-image: go.sum $(BUILDDIR)/ +build-e2e-docker-image: go.sum $(BUILDDIR)/ $(DOCKER) buildx create --name neutronbuilder || true $(DOCKER) buildx use neutronbuilder $(DOCKER) buildx build \ @@ -136,7 +136,12 @@ build-slinky-e2e-docker-image: go.sum $(BUILDDIR)/ -f Dockerfile.builder . slinky-e2e-test: - cd ./tests/slinky && go mod tidy && go test -v -race -timeout 20m ./... + @echo "Running e2e slinky tests..." + cd ./tests/slinky && go mod tidy && go test -v -race -timeout 30m -count=1 ./... + +feemarket-e2e-test: + @echo "Running e2e feemarket tests..." + @cd ./tests/feemarket && go mod tidy && go test -p 1 -v -race -timeout 30m -count=1 ./... install-test-binary: check_version go.sum go install -mod=readonly $(BUILD_FLAGS_TEST_BINARY) ./cmd/neutrond @@ -197,15 +202,14 @@ test-sim-multi-seed-short: runsim ############################################################################### lint: - golangci-lint run - find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "*_test.go" | xargs gofmt -d -s + golangci-lint run --skip-files ".*.pb.go" + find . -name '*.go' -not -name "*.pb.go" -type f -not -path "./vendor*" -not -path "*.git*" -not -path "*_test.go" | xargs gofmt -d -s format: @go install mvdan.cc/gofumpt@latest @go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION) - find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "./client/docs/statik/statik.go" -not -path "./tests/mocks/*" -not -name "*.pb.go" -not -name "*.pb.gw.go" -not -name "*.pulsar.go" -not -path "./crypto/keys/secp256k1/*" | xargs gofumpt -w -l - golangci-lint run --fix - goimports -w -local github.com/neutron-org . + find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "./client/docs/statik/statik.go" -not -path "./tests/mocks/*" -not -name "*.pb.go" -not -name "*.pb.gw.go" -not -name "*.pulsar.go" -not -path "./crypto/keys/secp256k1/*" | xargs -I % sh -c 'gofumpt -w -l % && goimports -w -local github.com/neutron-org %' + golangci-lint run --fix --skip-files ".*.pb.go" .PHONY: format diff --git a/app/ante_handler.go b/app/ante_handler.go index 07d352afc..5cbc05a07 100644 --- a/app/ante_handler.go +++ b/app/ante_handler.go @@ -9,13 +9,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" - ibcante "github.com/cosmos/ibc-go/v8/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" consumerante "github.com/cosmos/interchain-security/v5/app/consumer/ante" ibcconsumerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/consumer/keeper" - auctionante "github.com/skip-mev/block-sdk/v2/x/auction/ante" - auctionkeeper "github.com/skip-mev/block-sdk/v2/x/auction/keeper" + feemarketante "github.com/skip-mev/feemarket/x/feemarket/ante" globalfeeante "github.com/neutron-org/neutron/v4/x/globalfee/ante" globalfeekeeper "github.com/neutron-org/neutron/v4/x/globalfee/keeper" @@ -26,16 +24,13 @@ import ( type HandlerOptions struct { ante.HandlerOptions + AccountKeeper feemarketante.AccountKeeper IBCKeeper *ibckeeper.Keeper ConsumerKeeper ibcconsumerkeeper.Keeper GlobalFeeKeeper globalfeekeeper.Keeper WasmConfig *wasmTypes.WasmConfig TXCounterStoreService corestoretypes.KVStoreService - - // dependencies for the x/auction ante-handler - AuctionKeeper auctionkeeper.Keeper - TxEncoder sdk.TxEncoder - MEVLane auctionante.MEVLane + FeeMarketKeeper feemarketante.FeeMarketKeeper } func NewAnteHandler(options HandlerOptions, logger log.Logger) (sdk.AnteHandler, error) { @@ -55,8 +50,8 @@ func NewAnteHandler(options HandlerOptions, logger log.Logger) (sdk.AnteHandler, return nil, errors.Wrap(sdkerrors.ErrLogic, "tx counter store service is required for ante builder") } - if options.MEVLane == nil { - return nil, errors.Wrap(sdkerrors.ErrLogic, "mev lane is required for AnteHandler") + if options.FeeMarketKeeper == nil { + return nil, errors.Wrap(sdkerrors.ErrLogic, "feemarket keeper is required for ante builder") } sigGasConsumer := options.SigGasConsumer @@ -74,9 +69,10 @@ func NewAnteHandler(options HandlerOptions, logger log.Logger) (sdk.AnteHandler, ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - globalfeeante.NewFeeDecorator(options.GlobalFeeKeeper), - - ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), + feemarketante.NewFeeMarketCheckDecorator( + options.FeeMarketKeeper, + NewFeeDecoratorWithSwitch(options), + ), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewSetPubKeyDecorator(options.AccountKeeper), ante.NewValidateSigCountDecorator(options.AccountKeeper), @@ -84,11 +80,6 @@ func NewAnteHandler(options HandlerOptions, logger log.Logger) (sdk.AnteHandler, ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), ante.NewIncrementSequenceDecorator(options.AccountKeeper), ibcante.NewRedundantRelayDecorator(options.IBCKeeper), - auctionante.NewAuctionDecorator( - options.AuctionKeeper, - options.TxEncoder, - options.MEVLane, - ), } // Don't delete it even if IDE tells you so. @@ -101,3 +92,29 @@ func NewAnteHandler(options HandlerOptions, logger log.Logger) (sdk.AnteHandler, return sdk.ChainAnteDecorators(anteDecorators...), nil } + +// FeeDecoratorWithSwitch is a fee ante decorator which switches between globalfee ante handler +// and feemarket's one, depending on the `params.Enabled` field feemarket's module. +// If feemarket is enabled, we don't need to perform checks for min gas prices, since they are handled by feemarket +// so we switch the execution directly to feemarket ante handler +// If feemarket is disabled, we call globalfee + native cosmos fee ante handler where min gas prices will be checked +// via globalfee and then they will be deducted via native cosmos fee ante handler. +type FeeDecoratorWithSwitch struct { + globalfeeDecorator globalfeeante.FeeDecorator + cosmosFeeDecorator ante.DeductFeeDecorator +} + +func NewFeeDecoratorWithSwitch(options HandlerOptions) FeeDecoratorWithSwitch { + return FeeDecoratorWithSwitch{ + globalfeeDecorator: globalfeeante.NewFeeDecorator(options.GlobalFeeKeeper), + cosmosFeeDecorator: ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), + } +} + +func (d FeeDecoratorWithSwitch) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { + // If feemarket is disabled, we call globalfee + native cosmos fee ante handler where min gas prices will be checked + // via globalfee and then they will be deducted via native cosmos fee ante handler. + return d.globalfeeDecorator.AnteHandle(ctx, tx, simulate, func(ctx sdk.Context, tx sdk.Tx, simulate bool) (sdk.Context, error) { + return d.cosmosFeeDecorator.AnteHandle(ctx, tx, simulate, next) + }) +} diff --git a/app/app.go b/app/app.go index 4ea84fcfe..87293d3f7 100644 --- a/app/app.go +++ b/app/app.go @@ -10,12 +10,20 @@ import ( "path/filepath" "time" + "github.com/neutron-org/neutron/v4/x/dynamicfees" + dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + + "github.com/skip-mev/feemarket/x/feemarket" + feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" + "cosmossdk.io/client/v2/autocli" "cosmossdk.io/core/appmodule" authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec" appconfig "github.com/neutron-org/neutron/v4/app/config" + "github.com/skip-mev/slinky/abci/strategies/aggregator" "github.com/skip-mev/slinky/x/oracle" oraclepreblock "github.com/skip-mev/slinky/abci/preblock/oracle" @@ -28,7 +36,7 @@ import ( oracleclient "github.com/skip-mev/slinky/service/clients/oracle" servicemetrics "github.com/skip-mev/slinky/service/metrics" - v400 "github.com/neutron-org/neutron/v4/app/upgrades/v4.0.0" + v401 "github.com/neutron-org/neutron/v4/app/upgrades/v4.0.1" "github.com/neutron-org/neutron/v4/x/globalfee" globalfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" @@ -139,10 +147,10 @@ import ( tokenfactorykeeper "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" tokenfactorytypes "github.com/neutron-org/neutron/v4/x/tokenfactory/types" - "github.com/cosmos/admin-module/x/adminmodule" - adminmodulecli "github.com/cosmos/admin-module/x/adminmodule/client/cli" - adminmodulekeeper "github.com/cosmos/admin-module/x/adminmodule/keeper" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" + "github.com/cosmos/admin-module/v2/x/adminmodule" + adminmodulecli "github.com/cosmos/admin-module/v2/x/adminmodule/client/cli" + adminmodulekeeper "github.com/cosmos/admin-module/v2/x/adminmodule/keeper" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" @@ -151,6 +159,7 @@ import ( "github.com/neutron-org/neutron/v4/x/contractmanager" contractmanagermodulekeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" contractmanagermoduletypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" + dynamicfeeskeeper "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" "github.com/neutron-org/neutron/v4/x/feeburner" feeburnerkeeper "github.com/neutron-org/neutron/v4/x/feeburner/keeper" feeburnertypes "github.com/neutron-org/neutron/v4/x/feeburner/types" @@ -216,7 +225,7 @@ const ( ) var ( - Upgrades = []upgrades.Upgrade{v400.Upgrade} + Upgrades = []upgrades.Upgrade{v401.Upgrade} // DefaultNodeHome default home directories for the application daemon DefaultNodeHome string @@ -265,10 +274,12 @@ var ( packetforward.AppModuleBasic{}, auction.AppModuleBasic{}, globalfee.AppModule{}, + feemarket.AppModuleBasic{}, dex.AppModuleBasic{}, ibcswap.AppModuleBasic{}, oracle.AppModuleBasic{}, marketmap.AppModuleBasic{}, + dynamicfees.AppModuleBasic{}, ) // module account permissions @@ -289,6 +300,7 @@ var ( ibcswaptypes.ModuleName: {authtypes.Burner}, oracletypes.ModuleName: nil, marketmaptypes.ModuleName: nil, + feemarkettypes.FeeCollectorName: nil, } ) @@ -348,6 +360,8 @@ type App struct { EvidenceKeeper evidencekeeper.Keeper TransferKeeper wrapkeeper.KeeperTransferWrapper FeeGrantKeeper feegrantkeeper.Keeper + FeeMarkerKeeper *feemarketkeeper.Keeper + DynamicFeesKeeper *dynamicfeeskeeper.Keeper FeeKeeper *feekeeper.Keeper FeeBurnerKeeper *feeburnerkeeper.Keeper ConsumerKeeper ccvconsumerkeeper.Keeper @@ -474,7 +488,7 @@ func New( interchainqueriesmoduletypes.StoreKey, contractmanagermoduletypes.StoreKey, interchaintxstypes.StoreKey, wasmtypes.StoreKey, feetypes.StoreKey, feeburnertypes.StoreKey, adminmoduletypes.StoreKey, ccvconsumertypes.StoreKey, tokenfactorytypes.StoreKey, pfmtypes.StoreKey, crontypes.StoreKey, ibchookstypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, dextypes.StoreKey, auctiontypes.StoreKey, - globalfeetypes.StoreKey, oracletypes.StoreKey, marketmaptypes.StoreKey, + oracletypes.StoreKey, marketmaptypes.StoreKey, feemarkettypes.StoreKey, dynamicfeestypes.StoreKey, globalfeetypes.StoreKey, ) tkeys := storetypes.NewTransientStoreKeys(paramstypes.TStoreKey, dextypes.TStoreKey) memKeys := storetypes.NewMemoryStoreKeys(capabilitytypes.MemStoreKey, feetypes.MemStoreKey) @@ -560,6 +574,16 @@ func New( authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), ) + app.DynamicFeesKeeper = dynamicfeeskeeper.NewKeeper(appCodec, keys[dynamicfeestypes.StoreKey], authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String()) + + app.FeeMarkerKeeper = feemarketkeeper.NewKeeper( + appCodec, + keys[feemarkettypes.StoreKey], + app.AccountKeeper, + app.DynamicFeesKeeper, + authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + ) + // ... other modules keepers // pre-initialize ConsumerKeeper to satisfy ibckeeper.NewKeeper // which would panic on nil or zero keeper @@ -944,6 +968,8 @@ func New( tokenfactory.NewAppModule(appCodec, *app.TokenFactoryKeeper, app.AccountKeeper, app.BankKeeper), cronModule, globalfee.NewAppModule(app.GlobalFeeKeeper, app.GetSubspace(globalfee.ModuleName), app.AppCodec(), app.keys[globalfee.ModuleName]), + feemarket.NewAppModule(appCodec, *app.FeeMarkerKeeper), + dynamicfees.NewAppModule(appCodec, *app.DynamicFeesKeeper), swapModule, dexModule, marketmapModule, @@ -991,7 +1017,8 @@ func New( crontypes.ModuleName, marketmaptypes.ModuleName, oracletypes.ModuleName, - // globalfee.ModuleName, + globalfee.ModuleName, + feemarkettypes.ModuleName, ibcswaptypes.ModuleName, dextypes.ModuleName, ) @@ -1026,7 +1053,8 @@ func New( crontypes.ModuleName, marketmaptypes.ModuleName, oracletypes.ModuleName, - // globalfee.ModuleName, + globalfee.ModuleName, + feemarkettypes.ModuleName, ibcswaptypes.ModuleName, dextypes.ModuleName, ) @@ -1065,10 +1093,12 @@ func New( pfmtypes.ModuleName, crontypes.ModuleName, globalfee.ModuleName, - marketmaptypes.ModuleName, + feemarkettypes.ModuleName, oracletypes.ModuleName, + marketmaptypes.ModuleName, ibcswaptypes.ModuleName, dextypes.ModuleName, + dynamicfeestypes.ModuleName, ) app.mm.RegisterInvariants(&app.CrisisKeeper) @@ -1116,8 +1146,8 @@ func New( app.SetEndBlocker(app.EndBlocker) // create the lanes - mevLane, baseLane := app.CreateLanes() - mempool, err := blocksdk.NewLanedMempool(app.Logger(), []blocksdk.Lane{mevLane, baseLane}) + baseLane := app.CreateLanes() + mempool, err := blocksdk.NewLanedMempool(app.Logger(), []blocksdk.Lane{baseLane}) if err != nil { panic(err) } @@ -1129,20 +1159,18 @@ func New( anteHandler, err := NewAnteHandler( HandlerOptions{ HandlerOptions: ante.HandlerOptions{ - AccountKeeper: app.AccountKeeper, BankKeeper: app.BankKeeper, FeegrantKeeper: app.FeeGrantKeeper, SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), SigGasConsumer: ante.DefaultSigVerificationGasConsumer, }, + AccountKeeper: app.AccountKeeper, IBCKeeper: app.IBCKeeper, GlobalFeeKeeper: app.GlobalFeeKeeper, WasmConfig: &wasmConfig, TXCounterStoreService: runtime.NewKVStoreService(keys[wasmtypes.StoreKey]), ConsumerKeeper: app.ConsumerKeeper, - AuctionKeeper: app.AuctionKeeper, - TxEncoder: app.GetTxConfig().TxEncoder(), - MEVLane: mevLane, + FeeMarketKeeper: app.FeeMarkerKeeper, }, app.Logger(), ) @@ -1151,15 +1179,26 @@ func New( } app.SetAnteHandler(anteHandler) + postHandlerOptions := PostHandlerOptions{ + AccountKeeper: app.AccountKeeper, + BankKeeper: app.BankKeeper, + FeeGrantKeeper: app.FeeGrantKeeper, + FeeMarketKeeper: app.FeeMarkerKeeper, + } + postHandler, err := NewPostHandler(postHandlerOptions) + if err != nil { + panic(err) + } + app.SetPostHandler(postHandler) + // set ante-handlers opts := []base.LaneOption{ base.WithAnteHandler(anteHandler), } baseLane.WithOptions(opts...) - mevLane.WithOptions(opts...) // set the block-sdk prepare / process-proposal handlers - blockSdkProposalHandler := blocksdkabci.NewProposalHandler( + blockSdkProposalHandler := blocksdkabci.NewDefaultProposalHandler( app.Logger(), app.GetTxConfig().TxDecoder(), app.GetTxConfig().TxEncoder(), @@ -1220,21 +1259,13 @@ func New( app.SetPrepareProposal(oracleProposalHandler.PrepareProposalHandler()) app.SetProcessProposal(oracleProposalHandler.ProcessProposalHandler()) - // block-sdk CheckTx handler - mevCheckTxHandler := checktx.NewMEVCheckTxHandler( - app, - app.GetTxConfig().TxDecoder(), - mevLane, - anteHandler, - app.BaseApp.CheckTx, - ) - // wrap checkTxHandler with mempool parity handler parityCheckTx := checktx.NewMempoolParityCheckTx( app.Logger(), mempool, app.GetTxConfig().TxDecoder(), - mevCheckTxHandler.CheckTx(), + app.BaseApp.CheckTx, + app.BaseApp, ) app.SetCheckTx(parityCheckTx.CheckTx()) @@ -1267,6 +1298,14 @@ func New( // Create the vote extensions handler that will be used to extend and verify // vote extensions (i.e. oracle data). + veCodec := compression.NewCompressionVoteExtensionCodec( + compression.NewDefaultVoteExtensionCodec(), + compression.NewZLibCompressor(), + ) + extCommitCodec := compression.NewCompressionExtendedCommitCodec( + compression.NewDefaultExtendedCommitCodec(), + compression.NewZStdCompressor(), + ) voteExtensionsHandler := ve.NewVoteExtensionHandler( app.Logger(), app.oracleClient, @@ -1276,7 +1315,17 @@ func New( compression.NewDefaultVoteExtensionCodec(), compression.NewZLibCompressor(), ), - app.oraclePreBlockHandler.PreBlocker(), + aggregator.NewOraclePriceApplier( + aggregator.NewDefaultVoteAggregator( + app.Logger(), + aggregatorFn, + currencypair.NewDeltaCurrencyPairStrategy(app.OracleKeeper), + ), + app.OracleKeeper, + veCodec, + extCommitCodec, + app.Logger(), + ), oracleMetrics, ) app.SetExtendVoteHandler(voteExtensionsHandler.ExtendVoteHandler()) @@ -1360,6 +1409,8 @@ func (app *App) setupUpgradeHandlers() { ConsensusKeeper: &app.ConsensusParamsKeeper, ConsumerKeeper: &app.ConsumerKeeper, MarketmapKeeper: app.MarketMapKeeper, + FeeMarketKeeper: app.FeeMarkerKeeper, + DynamicfeesKeeper: app.DynamicFeesKeeper, GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), CcvConsumerSubspace: app.GetSubspace(ccvconsumertypes.ModuleName), }, diff --git a/app/genesis.go b/app/genesis.go index 6397a5f64..128ac7806 100644 --- a/app/genesis.go +++ b/app/genesis.go @@ -3,9 +3,15 @@ package app import ( "encoding/json" + "cosmossdk.io/math" + + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" + "github.com/cosmos/cosmos-sdk/codec" ) +var FeeDenom = "untrn" + // GenesisState is the genesis state of the blockchain represented here as a map of raw json // messages key'd by a identifier string. // The identifier is used to determine which module genesis information belongs @@ -17,30 +23,34 @@ type GenesisState map[string]json.RawMessage // NewDefaultGenesisState generates the default state for the application. func NewDefaultGenesisState(cdc codec.JSONCodec) GenesisState { - // This ugly hack is required to alter globalfee module genesis state - // because in current chain implementation staking module is absent which is required by globalfee module - // and we can't use default genesis state for globalfee module. - // If we do not alter globalfee module genesis state, then we will get panic during tests run. - genesisState := ModuleBasics.DefaultGenesis(cdc) - // globalFeeGenesisState := globalfeetypes.GenesisState{ - // Params: globalfeetypes.Params{ - // MinimumGasPrices: sdk.DecCoins{ - // sdk.NewDecCoinFromDec(params.DefaultDenom, sdk.MustNewDecFromStr("0")), - // }, - // BypassMinFeeMsgTypes: []string{ - // sdk.MsgTypeURL(&ibcchanneltypes.MsgRecvPacket{}), - // sdk.MsgTypeURL(&ibcchanneltypes.MsgAcknowledgement{}), - // sdk.MsgTypeURL(&ibcclienttypes.MsgUpdateClient{}), - // }, - // MaxTotalBypassMinFeeMsgGasUsage: globalfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage, - // }, - //} - // globalFeeGenesisStateBytes, err := json.Marshal(globalFeeGenesisState) - // if err != nil { - // panic("cannot marshal globalfee genesis state for tests") - //} - // genesisState["globalfee"] = globalFeeGenesisStateBytes + + feemarketFeeGenesis := feemarkettypes.GenesisState{ + Params: feemarkettypes.Params{ + Alpha: math.LegacyOneDec(), + Beta: math.LegacyOneDec(), + Delta: math.LegacyOneDec(), + MinBaseGasPrice: math.LegacyMustNewDecFromStr("0.0025"), + MinLearningRate: math.LegacyMustNewDecFromStr("0.5"), + MaxLearningRate: math.LegacyMustNewDecFromStr("1.5"), + MaxBlockUtilization: 30_000_000, + Window: 1, + FeeDenom: FeeDenom, + Enabled: false, + DistributeFees: true, + }, + State: feemarkettypes.State{ + BaseGasPrice: math.LegacyMustNewDecFromStr("0.0025"), + LearningRate: math.LegacyOneDec(), + Window: []uint64{100}, + Index: 0, + }, + } + feemarketFeeGenesisStateBytes, err := json.Marshal(feemarketFeeGenesis) + if err != nil { + panic("cannot marshal feemarket genesis state for tests") + } + genesisState["feemarket"] = feemarketFeeGenesisStateBytes return genesisState } diff --git a/app/lane.go b/app/lane.go index 6ee0e316d..d29dfe72f 100644 --- a/app/lane.go +++ b/app/lane.go @@ -5,21 +5,16 @@ import ( signer_extraction_adapter "github.com/skip-mev/block-sdk/v2/adapters/signer_extraction_adapter" blocksdkbase "github.com/skip-mev/block-sdk/v2/block/base" base_lane "github.com/skip-mev/block-sdk/v2/lanes/base" - mev_lane "github.com/skip-mev/block-sdk/v2/lanes/mev" ) const ( MaxTxsForDefaultLane = 3000 // maximal number of txs that can be stored in this lane at any point in time - MaxTxsForMEVLane = 500 // ditto ) -var ( - MaxBlockspaceForDefaultLane = math.LegacyMustNewDecFromStr("0.9") // maximal fraction of blockMaxBytes / gas that can be used by this lane at any point in time (90%) - MaxBlockspaceForMEVLane = math.LegacyMustNewDecFromStr("0.1") // ditto (10%) -) +var MaxBlockspaceForDefaultLane = math.LegacyMustNewDecFromStr("1") // maximal fraction of blockMaxBytes / gas that can be used by this lane at any point in time (100%) // CreateLanes creates a LaneMempool containing MEV, default lanes (in that order) -func (app *App) CreateLanes() (*mev_lane.MEVLane, *blocksdkbase.BaseLane) { +func (app *App) CreateLanes() *blocksdkbase.BaseLane { // initialize the default lane basecfg := blocksdkbase.LaneConfig{ Logger: app.Logger(), @@ -33,23 +28,11 @@ func (app *App) CreateLanes() (*mev_lane.MEVLane, *blocksdkbase.BaseLane) { // BaseLane (DefaultLane) is intended to hold all txs that are not matched by any lanes ordered before this // lane. baseLane := base_lane.NewDefaultLane(basecfg, blocksdkbase.DefaultMatchHandler()) - - // initialize the MEV lane, this lane is intended to hold all bid txs - factory := mev_lane.NewDefaultAuctionFactory(app.GetTxConfig().TxDecoder(), signer_extraction_adapter.NewDefaultAdapter()) - - mevcfg := blocksdkbase.LaneConfig{ - Logger: app.Logger(), - TxDecoder: app.GetTxConfig().TxDecoder(), - TxEncoder: app.GetTxConfig().TxEncoder(), - SignerExtractor: signer_extraction_adapter.NewDefaultAdapter(), - MaxBlockSpace: MaxBlockspaceForMEVLane, - MaxTxs: MaxTxsForMEVLane, - } - mevLane := mev_lane.NewMEVLane( - mevcfg, - factory, - factory.MatchHandler(), + baseLane.LaneMempool = blocksdkbase.NewMempool( + blocksdkbase.NewDefaultTxPriority(), + basecfg.SignerExtractor, + basecfg.MaxTxs, ) - return mevLane, baseLane + return baseLane } diff --git a/app/post_handler.go b/app/post_handler.go new file mode 100644 index 000000000..a273c8338 --- /dev/null +++ b/app/post_handler.go @@ -0,0 +1,43 @@ +package app + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + feemarketpost "github.com/skip-mev/feemarket/x/feemarket/post" +) + +// PostHandlerOptions are the options required for constructing a FeeMarket PostHandler. +type PostHandlerOptions struct { + AccountKeeper feemarketpost.AccountKeeper + BankKeeper feemarketpost.BankKeeper + FeeMarketKeeper feemarketpost.FeeMarketKeeper + FeeGrantKeeper feemarketpost.FeeGrantKeeper +} + +// NewPostHandler returns a PostHandler chain with the fee deduct decorator. +func NewPostHandler(options PostHandlerOptions) (sdk.PostHandler, error) { + if options.AccountKeeper == nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "account keeper is required for post builder") + } + + if options.BankKeeper == nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "bank keeper is required for post builder") + } + + if options.FeeMarketKeeper == nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "feemarket keeper is required for post builder") + } + + postDecorators := []sdk.PostDecorator{ + feemarketpost.NewFeeMarketDeductDecorator( + options.AccountKeeper, + options.BankKeeper, + options.FeeGrantKeeper, + options.FeeMarketKeeper, + ), + } + + return sdk.ChainPostDecorators(postDecorators...), nil +} diff --git a/app/proposals_allowlisting.go b/app/proposals_allowlisting.go index 5b86fa7cb..8af48963b 100644 --- a/app/proposals_allowlisting.go +++ b/app/proposals_allowlisting.go @@ -15,9 +15,10 @@ import ( ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck ccvconsumertypes "github.com/cosmos/interchain-security/v5/x/ccv/consumer/types" - auctiontypes "github.com/skip-mev/block-sdk/v2/x/auction/types" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" + dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" globalfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" contractmanagertypes "github.com/neutron-org/neutron/v4/x/contractmanager/types" @@ -82,10 +83,11 @@ func isSdkMessageWhitelisted(msg sdk.Msg) bool { *marketmaptypes.MsgUpdateMarkets, *marketmaptypes.MsgRemoveMarketAuthorities, *marketmaptypes.MsgParams, - *auctiontypes.MsgUpdateParams, *authtypes.MsgUpdateParams, *ccvconsumertypes.MsgUpdateParams, *icahosttypes.MsgUpdateParams, + *feemarkettypes.MsgParams, + *dynamicfeestypes.MsgUpdateParams, *ibctransfertypes.MsgUpdateParams, *globalfeetypes.MsgUpdateParams: return true diff --git a/app/upgrades/types.go b/app/upgrades/types.go index ccd832271..d94491025 100644 --- a/app/upgrades/types.go +++ b/app/upgrades/types.go @@ -3,7 +3,7 @@ package upgrades import ( store "cosmossdk.io/store/types" upgradetypes "cosmossdk.io/x/upgrade/types" - adminmodulekeeper "github.com/cosmos/admin-module/x/adminmodule/keeper" + adminmodulekeeper "github.com/cosmos/admin-module/v2/x/adminmodule/keeper" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/types/module" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" @@ -14,8 +14,11 @@ import ( capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" ccvconsumerkeeper "github.com/cosmos/interchain-security/v5/x/ccv/consumer/keeper" auctionkeeper "github.com/skip-mev/block-sdk/v2/x/auction/keeper" + feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" + dynamicfeeskeeper "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" + contractmanagerkeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" cronkeeper "github.com/neutron-org/neutron/v4/x/cron/keeper" feeburnerkeeper "github.com/neutron-org/neutron/v4/x/feeburner/keeper" @@ -59,6 +62,8 @@ type UpgradeKeepers struct { ConsensusKeeper *consensuskeeper.Keeper ConsumerKeeper *ccvconsumerkeeper.Keeper MarketmapKeeper *marketmapkeeper.Keeper + FeeMarketKeeper *feemarketkeeper.Keeper + DynamicfeesKeeper *dynamicfeeskeeper.Keeper // subspaces GlobalFeeSubspace paramtypes.Subspace CcvConsumerSubspace paramtypes.Subspace diff --git a/app/upgrades/v4.0.0/markets.json b/app/upgrades/v4.0.0/markets.json deleted file mode 100644 index e6c8695db..000000000 --- a/app/upgrades/v4.0.0/markets.json +++ /dev/null @@ -1,4056 +0,0 @@ -[ - { - "ticker": { - "currency_pair": { - "Base": "BNB", - "Quote": "USD" - }, - "decimals": 7, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "okx_ws", - "off_chain_ticker": "BNB-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "BNB-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "BNBUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "binance_api", - "off_chain_ticker": "BNBUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "BNBUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "BNB_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "BTC", - "Quote": "USD" - }, - "decimals": 5, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "BTCUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "BTCUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "BTC-USD" - }, - { - "name": "huobi_ws", - "off_chain_ticker": "btcusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "XXBTZUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "BTC-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "BTCUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "BTC-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "DOGE", - "Quote": "USD" - }, - "decimals": 11, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "DOGEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "DOGEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "DOGE-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "DOGE_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "dogeusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "XDGUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "DOGE-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "DOGEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "DOGE-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "EOS", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "EOSUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "EOSUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "EOS-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "EOS_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "EOSUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "EOS-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "EOS-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "EOSUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ICP", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ICPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "ICPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "ICP-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "ICPUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ICP-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "ICP-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ICPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "NTRN", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 2, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "NTRNUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "NTRN_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "NTRN-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "NTRN-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "PEPE", - "Quote": "USD" - }, - "decimals": 16, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "PEPEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "PEPEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "PEPE_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "PEPEUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "PEPE-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "PEPEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "PEPE-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "SHIB", - "Quote": "USD" - }, - "decimals": 15, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "SHIBUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "SHIBUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "SHIB-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "SHIB_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "SHIBUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "SHIB-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "SHIBUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "SHIB-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "PYTH", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "PYTHUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "PYTHUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "PYTH_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "PYTH-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "PYTH-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "PYTHUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "RNDR", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "RNDRUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "RNDR-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "RNDRUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "RNDR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "RNDR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "RNDRUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "STRK", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "STRKUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "STRKUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "STRKUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "STRK-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "STRK-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "STRK_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ALGO", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ALGOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "ALGOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "ALGO-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "ALGOUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ALGO-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ALGOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "ALGO-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "BCH", - "Quote": "USD" - }, - "decimals": 7, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "BCHUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "BCHUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "BCH-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "BCH_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "bchusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "BCHUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "BCH-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "BCHUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "BCH-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "DYDX", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "DYDXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "DYDXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "DYDX_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "DYDX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "DYDXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "DYDX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "HBAR", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "HBARUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bitstamp_ws", - "off_chain_ticker": "hbarusd" - }, - { - "name": "bybit_ws", - "off_chain_ticker": "HBARUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "HBAR-USD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "HBAR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "HBARUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "HBAR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "OP", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "OPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "OP-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "OP_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "OP-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "OPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "OP-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ORDI", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ORDIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "ORDIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "ORDI_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "ordiusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ORDI-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "ORDI-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ORDIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "TRX", - "Quote": "USD" - }, - "decimals": 11, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "TRXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "TRXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "TRX_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "trxusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "TRXUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "TRX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "TRXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "TRX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "AAVE", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "mexc_ws", - "off_chain_ticker": "AAVEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "aaveusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "AAVEUSD" - }, - { - "name": "okx_ws", - "off_chain_ticker": "AAVE-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "AAVE-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "binance_api", - "off_chain_ticker": "AAVEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "AAVE-USD" - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "BLUR", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "coinbase_api", - "off_chain_ticker": "BLUR-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "BLUR_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "BLURUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "BLUR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "BLURUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "BLUR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "UNI", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "UNIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "UNIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "UNI-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "UNI_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "UNIUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "UNI-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "UNI-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ARKM", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ARKMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "ARKMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "ARKM_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ARKM-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ARKMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "JUP", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "kucoin_ws", - "off_chain_ticker": "JUP-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "JUP-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "binance_api", - "off_chain_ticker": "JUPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "JUPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "JUP_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "JUPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "LDO", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "LDOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "LDO-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "LDOUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "LDO-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "LDOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "LDO-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "WLD", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "WLDUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "WLDUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "WLD_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "wldusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "WLD-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "WLDUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "WLD-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "DYM", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "DYMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "DYMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "DYM_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "DYM-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "DYMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "COMP", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "COMPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "COMP-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "COMP_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "COMPUSD" - }, - { - "name": "mexc_ws", - "off_chain_ticker": "COMPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "COMP-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "DOT", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "DOTUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "DOTUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "DOT-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "DOT_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "DOTUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "DOT-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "DOTUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "DOT-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ETC", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ETCUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "ETC-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "ETC_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "etcusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ETC-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ETCUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "ETC-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "LINK", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "LINKUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "LINKUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "LINK-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "LINKUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "LINK-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "LINKUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "LINK-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "USDT", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 1, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "USDCUSDT", - "invert": true - }, - { - "name": "bybit_ws", - "off_chain_ticker": "USDCUSDT", - "invert": true - }, - { - "name": "coinbase_api", - "off_chain_ticker": "USDT-USD" - }, - { - "name": "huobi_ws", - "off_chain_ticker": "ethusdt", - "normalize_by_pair": { - "Base": "ETH", - "Quote": "USD" - }, - "invert": true - }, - { - "name": "kraken_api", - "off_chain_ticker": "USDTZUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "BTC-USDT", - "normalize_by_pair": { - "Base": "BTC", - "Quote": "USD" - }, - "invert": true - }, - { - "name": "okx_ws", - "off_chain_ticker": "USDC-USDT", - "invert": true - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "AVAX", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "AVAXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "AVAXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "AVAX-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "AVAX_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "avaxusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "AVAXUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "AVAX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "AVAX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "BONK", - "Quote": "USD" - }, - "decimals": 14, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "BONKUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "BONKUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "BONK-USD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "BONK-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "BONK-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "BONKUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "CRV", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "CRVUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "CRV-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "CRV_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "CRVUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "CRV-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "CRVUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "CRV-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "IMX", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "IMXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "IMX-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "IMXUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "IMX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "IMXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "IMX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "SEI", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "SEIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "SEIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "SEI-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "SEI_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "seiusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "SEI-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "SEIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "SUI", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "SUIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "SUIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "SUI-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "SUI_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "suiusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "SUI-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "SUIUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "SUI-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "GRT", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "GRTUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "GRTUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "GRT-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "GRT_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "GRTUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "GRT-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "GRTUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "GRT-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "MATIC", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "MATICUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "MATICUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "MATIC-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "MATIC_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "maticusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "MATICUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "MATIC-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "MATICUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "MATIC-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "FET", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "FETUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "FET-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "FETUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "FET-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "FET-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "FETUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "LTC", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "LTCUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "LTCUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "LTC-USD" - }, - { - "name": "huobi_ws", - "off_chain_ticker": "ltcusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "XLTCZUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "LTC-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "LTCUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "LTC-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "APE", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "APEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "APE-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "APE_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "APEUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "APE-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "APEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "APE-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "JTO", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "coinbase_api", - "off_chain_ticker": "JTO-USD" - }, - { - "name": "binance_api", - "off_chain_ticker": "JTOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "JTOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "JTOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "JTO-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "JTO-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "SNX", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "SNXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "SNXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "SNX-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "SNXUSD" - }, - { - "name": "mexc_ws", - "off_chain_ticker": "SNXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "SNX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "SOL", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "SOLUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "SOLUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "SOL-USD" - }, - { - "name": "huobi_ws", - "off_chain_ticker": "solusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "SOLUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "SOL-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "SOLUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "SOL-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "AEVO", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "AEVOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "AEVOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "AEVO_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "AEVOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "AEVO-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "AGIX", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "AGIXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "AGIXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "AGIX_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "AGIX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "AGIX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "AGIXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "FIL", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "FILUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "FIL-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "FIL_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "filusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "FILUSD" - }, - { - "name": "mexc_ws", - "off_chain_ticker": "FILUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "FIL-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "INJ", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "INJUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "INJUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "INJ-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "INJUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "INJ-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "INJ-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "INJUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "TIA", - "Quote": "USD" - }, - "decimals": 8, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "TIAUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "TIAUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "TIA-USD" - }, - { - "name": "huobi_ws", - "off_chain_ticker": "tiausdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "TIAUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "TIA-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "TIAUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "TIA-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "WOO", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "WOOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "WOO_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "WOO-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "WOO-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "WOOUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "APT", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "APTUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "APTUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "APT-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "APT_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "aptusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "APT-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "APTUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "APT-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ARB", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ARBUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "ARBUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "ARB-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "ARB_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "arbusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ARB-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ARBUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "ARB-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ATOM", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ATOMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "ATOMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "ATOM-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "ATOM_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "ATOMUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ATOM-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ATOMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "ATOM-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "MKR", - "Quote": "USD" - }, - "decimals": 6, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "MKRUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "MKR-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "MKRUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "MKR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "MKRUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "MKR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "STX", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "STXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "STXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "STX-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "STX_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "STXUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "STX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "STX-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "STXUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "XRP", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "XRPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "XRPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "XRP-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "XRP_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "xrpusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "XXRPZUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "XRP-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "XRPUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "XRP-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ASTR", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ASTRUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "ASTR_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "ASTRUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ASTR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ASTRUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "ASTR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ETH", - "Quote": "USD" - }, - "decimals": 6, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ETHUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "ETHUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "ETH-USD" - }, - { - "name": "huobi_ws", - "off_chain_ticker": "ethusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "XETHZUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ETH-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ETHUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "ETH-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "MANA", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "MANAUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "MANA-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "MANA_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "MANAUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "MANA-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "MANAUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "MANA-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "AXL", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "AXLUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "AXLUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "AXL-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "WAXL_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "WAXLUSD" - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "NEAR", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "NEARUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "NEAR-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "NEAR_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "nearusdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "NEAR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "NEARUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "NEAR-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "XLM", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "XLMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "XLMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "XLM-USD" - }, - { - "name": "kraken_api", - "off_chain_ticker": "XXLMZUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "XLM-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "XLMUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "XLM-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "ADA", - "Quote": "USD" - }, - "decimals": 10, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "ADAUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "bybit_ws", - "off_chain_ticker": "ADAUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "coinbase_api", - "off_chain_ticker": "ADA-USD" - }, - { - "name": "gate_ws", - "off_chain_ticker": "ADA_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "huobi_ws", - "off_chain_ticker": "adausdt", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "ADAUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "ADA-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "ADAUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "okx_ws", - "off_chain_ticker": "ADA-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - }, - { - "ticker": { - "currency_pair": { - "Base": "RUNE", - "Quote": "USD" - }, - "decimals": 9, - "min_provider_count": 3, - "enabled": true - }, - "provider_configs": [ - { - "name": "binance_api", - "off_chain_ticker": "RUNEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "gate_ws", - "off_chain_ticker": "RUNE_USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "kraken_api", - "off_chain_ticker": "RUNEUSD" - }, - { - "name": "kucoin_ws", - "off_chain_ticker": "RUNE-USDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - }, - { - "name": "mexc_ws", - "off_chain_ticker": "RUNEUSDT", - "normalize_by_pair": { - "Base": "USDT", - "Quote": "USD" - } - } - ] - } -] \ No newline at end of file diff --git a/app/upgrades/v4.0.0/upgrades.go b/app/upgrades/v4.0.0/upgrades.go deleted file mode 100644 index 2f20113eb..000000000 --- a/app/upgrades/v4.0.0/upgrades.go +++ /dev/null @@ -1,115 +0,0 @@ -package v400 - -import ( - "context" - "fmt" - - upgradetypes "cosmossdk.io/x/upgrade/types" - comettypes "github.com/cometbft/cometbft/proto/tendermint/types" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" - "github.com/cosmos/cosmos-sdk/x/consensus/types" - marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" - marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" - - _ "embed" - - "github.com/neutron-org/neutron/v4/app/upgrades" - slinkyutils "github.com/neutron-org/neutron/v4/utils/slinky" -) - -//go:embed markets.json -var marketsJSON []byte - -func CreateUpgradeHandler( - mm *module.Manager, - configurator module.Configurator, - keepers *upgrades.UpgradeKeepers, - _ upgrades.StoreKeys, - _ codec.Codec, -) upgradetypes.UpgradeHandler { - return func(c context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { - ctx := sdk.UnwrapSDKContext(c) - - ctx.Logger().Info("Starting module migrations...") - vm, err := mm.RunMigrations(ctx, configurator, vm) - if err != nil { - return vm, err - } - - ctx.Logger().Info("Setting consensus params...") - err = enableVoteExtensions(ctx, keepers.ConsensusKeeper) - if err != nil { - return nil, err - } - - ctx.Logger().Info("Setting marketmap params...") - err = setMarketMapParams(ctx, keepers.MarketmapKeeper) - if err != nil { - return nil, err - } - - ctx.Logger().Info("Setting marketmap and oracle state...") - err = setMarketState(ctx, keepers.MarketmapKeeper) - if err != nil { - return nil, err - } - - ctx.Logger().Info(fmt.Sprintf("Migration {%s} applied", UpgradeName)) - return vm, nil - } -} - -func setMarketMapParams(ctx sdk.Context, marketmapKeeper *marketmapkeeper.Keeper) error { - marketmapParams := marketmaptypes.Params{ - MarketAuthorities: []string{authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String()}, - Admin: authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - } - return marketmapKeeper.SetParams(ctx, marketmapParams) -} - -func setMarketState(ctx sdk.Context, mmKeeper *marketmapkeeper.Keeper) error { - markets, err := slinkyutils.ReadMarketsFromFile(marketsJSON) - if err != nil { - return err - } - - for _, market := range markets { - err = mmKeeper.CreateMarket(ctx, market) - if err != nil { - return err - } - - err = mmKeeper.Hooks().AfterMarketCreated(ctx, market) - if err != nil { - return err - } - - } - return nil -} - -func enableVoteExtensions(ctx sdk.Context, consensusKeeper *consensuskeeper.Keeper) error { - oldParams, err := consensusKeeper.Params(ctx, &types.QueryParamsRequest{}) - if err != nil { - return err - } - - // we need to enable VoteExtensions for Slinky - oldParams.Params.Abci = &comettypes.ABCIParams{VoteExtensionsEnableHeight: ctx.BlockHeight() + 4} - - updateParamsMsg := types.MsgUpdateParams{ - Authority: authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), - Block: oldParams.Params.Block, - Evidence: oldParams.Params.Evidence, - Validator: oldParams.Params.Validator, - Abci: oldParams.Params.Abci, - } - - _, err = consensusKeeper.UpdateParams(ctx, &updateParamsMsg) - return err -} diff --git a/app/upgrades/v4.0.0/constants.go b/app/upgrades/v4.0.1/constants.go similarity index 57% rename from app/upgrades/v4.0.0/constants.go rename to app/upgrades/v4.0.1/constants.go index d16bc774c..6e78acb3b 100644 --- a/app/upgrades/v4.0.0/constants.go +++ b/app/upgrades/v4.0.1/constants.go @@ -2,16 +2,25 @@ package v400 import ( storetypes "cosmossdk.io/store/types" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" oracletypes "github.com/skip-mev/slinky/x/oracle/types" + dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + "github.com/neutron-org/neutron/v4/app/upgrades" globalfeetypes "github.com/neutron-org/neutron/v4/x/globalfee/types" ) const ( // UpgradeName defines the on-chain upgrade name. - UpgradeName = "v4.0.0" + UpgradeName = "v4.0.1" + + // MarketMapAuthorityMultisig defines the address of a market-map authority governed by a + // multi-sig of contributors. + MarketMapAuthorityMultisig = "neutron1ua63s43u2p4v38pxhcxmps0tj2gudyw2hfeetz" + + DecimalsAdjustment = 1_000_000_000_000 ) var Upgrade = upgrades.Upgrade{ @@ -22,6 +31,8 @@ var Upgrade = upgrades.Upgrade{ globalfeetypes.ModuleName, marketmaptypes.ModuleName, oracletypes.ModuleName, + feemarkettypes.ModuleName, + dynamicfeestypes.ModuleName, }, }, } diff --git a/app/upgrades/v4.0.1/upgrades.go b/app/upgrades/v4.0.1/upgrades.go new file mode 100644 index 000000000..2897e2fb0 --- /dev/null +++ b/app/upgrades/v4.0.1/upgrades.go @@ -0,0 +1,259 @@ +package v400 + +import ( + "context" + "fmt" + "sort" + + appparams "github.com/neutron-org/neutron/v4/app/params" + + "cosmossdk.io/errors" + "cosmossdk.io/math" + + feemarketkeeper "github.com/skip-mev/feemarket/x/feemarket/keeper" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" + + dynamicfeeskeeper "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" + dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + + upgradetypes "cosmossdk.io/x/upgrade/types" + comettypes "github.com/cometbft/cometbft/proto/tendermint/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" + "github.com/cosmos/cosmos-sdk/x/consensus/types" + marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" + marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" + + slinkyconstants "github.com/skip-mev/slinky/cmd/constants" + + "github.com/neutron-org/neutron/v4/app/upgrades" +) + +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, + keepers *upgrades.UpgradeKeepers, + _ upgrades.StoreKeys, + _ codec.Codec, +) upgradetypes.UpgradeHandler { + return func(c context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + ctx := sdk.UnwrapSDKContext(c) + + ctx.Logger().Info("Starting module migrations...") + vm, err := mm.RunMigrations(ctx, configurator, vm) + if err != nil { + return vm, err + } + + ctx.Logger().Info("Setting consensus params...") + err = enableVoteExtensions(ctx, keepers.ConsensusKeeper) + if err != nil { + return nil, err + } + + ctx.Logger().Info("Setting marketmap params...") + err = setMarketMapParams(ctx, keepers.MarketmapKeeper) + if err != nil { + return nil, err + } + + ctx.Logger().Info("Setting dynamicfees/feemarket params...") + err = setFeeMarketParams(ctx, keepers.FeeMarketKeeper) + if err != nil { + return nil, err + } + + err = setDynamicFeesParams(ctx, keepers.DynamicfeesKeeper) + if err != nil { + return nil, err + } + + ctx.Logger().Info("Setting marketmap and oracle state...") + err = setMarketState(ctx, keepers.MarketmapKeeper) + if err != nil { + return nil, err + } + + ctx.Logger().Info(fmt.Sprintf("Migration {%s} applied", UpgradeName)) + return vm, nil + } +} + +func setMarketMapParams(ctx sdk.Context, marketmapKeeper *marketmapkeeper.Keeper) error { + marketmapParams := marketmaptypes.Params{ + MarketAuthorities: []string{authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), MarketMapAuthorityMultisig}, + Admin: authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + } + return marketmapKeeper.SetParams(ctx, marketmapParams) +} + +// NtrnPrices describes prices of any token in NTRN for dynamic fee resolver +// there are several 18decimals coins, we need to adjust all the coins with the same base (6 decimals) prior to do any math +// by dividing by 10^12 +var NtrnPrices = sdk.NewDecCoins( + // Token,Denom,TWAP30D (USD),Price in NTRN (30d TWAP of DENOM / 30d TWAP of NTRN),Price + 30% premium + // wstETH,factory/neutron1ug740qrkquxzrk2hh29qrlx3sktkfml3je7juusc2te7xmvsscns0n2wry/wstETH,3616.34,5779.670768739013,7513.571999360713 + // 18 decimals coin + sdk.NewDecCoinFromDec("factory/neutron1ug740qrkquxzrk2hh29qrlx3sktkfml3je7juusc2te7xmvsscns0n2wry/wstETH", math.LegacyMustNewDecFromStr("7513.571999360713").QuoInt64(DecimalsAdjustment)), + + // stATOM,ibc/B7864B03E1B9FD4F049243E92ABD691586F682137037A9F3FCA5222815620B3C,10.268,16.410420329231,21.333546427991 + sdk.NewDecCoinFromDec("ibc/B7864B03E1B9FD4F049243E92ABD691586F682137037A9F3FCA5222815620B3C", math.LegacyMustNewDecFromStr("21.333546427991")), + + // stTIA,ibc/6569E05DEE32B339D9286A52BE33DFCEFC97267F23EF9CFDE0C055140967A9A5,8.52,13.61674924085,17.70177401312 + sdk.NewDecCoinFromDec("ibc/6569E05DEE32B339D9286A52BE33DFCEFC97267F23EF9CFDE0C055140967A9A5", math.LegacyMustNewDecFromStr("17.70177401312")), + + // stkATOM,ibc/3649CE0C8A2C79048D8C6F31FF18FA69C9BC7EB193512E0BD03B733011290445,9.656,15.432315806297,20.062010548187 + sdk.NewDecCoinFromDec("ibc/3649CE0C8A2C79048D8C6F31FF18FA69C9BC7EB193512E0BD03B733011290445", math.LegacyMustNewDecFromStr("20.062010548187")), + + // USDC.noble,ibc/B559A80D62249C8AA07A380E2A2BEA6E5CA9A6F079C912C3A9E9B494105E4F81,1,1.598210004795,2.077673006235 + sdk.NewDecCoinFromDec("ibc/B559A80D62249C8AA07A380E2A2BEA6E5CA9A6F079C912C3A9E9B494105E4F81", math.LegacyMustNewDecFromStr("2.077673006235")), + + // USDC.axl,ibc/F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E349,1,1.598210004795,2.077673006235 + sdk.NewDecCoinFromDec("ibc/F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E349", math.LegacyMustNewDecFromStr("2.077673006235")), + + // USDT,ibc/57503D7852EF4E1899FE6D71C5E81D7C839F76580F86F21E39348FC2BC9D7CE2,1,1.598210004795,2.077673006235 + sdk.NewDecCoinFromDec("ibc/57503D7852EF4E1899FE6D71C5E81D7C839F76580F86F21E39348FC2BC9D7CE2", math.LegacyMustNewDecFromStr("2.077673006235")), + + // http://astro.cw/,ibc/5751B8BCDA688FD0A8EC0B292EEF1CDEAB4B766B63EC632778B196D317C40C3A,0.0693,0.110755953332,0.143982739322 + sdk.NewDecCoinFromDec("ibc/5751B8BCDA688FD0A8EC0B292EEF1CDEAB4B766B63EC632778B196D317C40C3A", math.LegacyMustNewDecFromStr("0.143982739322")), + + // ASTRO,factory/neutron1ffus553eet978k024lmssw0czsxwr97mggyv85lpcsdkft8v9ufsz3sa07/astro,0.0693,0.110755953332,0.143982739322 + sdk.NewDecCoinFromDec("factory/neutron1ffus553eet978k024lmssw0czsxwr97mggyv85lpcsdkft8v9ufsz3sa07/astro", math.LegacyMustNewDecFromStr("0.143982739322")), + + // MARS,ibc/9598CDEB7C6DB7FC21E746C8E0250B30CD5154F39CA111A9D4948A4362F638BD,0.0652,0.104203292313,0.135464280003 + sdk.NewDecCoinFromDec("ibc/9598CDEB7C6DB7FC21E746C8E0250B30CD5154F39CA111A9D4948A4362F638BD", math.LegacyMustNewDecFromStr("0.135464280003")), + + // APOLLO,factory/neutron154gg0wtm2v4h9ur8xg32ep64e8ef0g5twlsgvfeajqwghdryvyqsqhgk8e/APOLLO,0.06079,0.097155186191,0.126301742051 + sdk.NewDecCoinFromDec("factory/neutron154gg0wtm2v4h9ur8xg32ep64e8ef0g5twlsgvfeajqwghdryvyqsqhgk8e/APOLLO", math.LegacyMustNewDecFromStr("0.126301742051")), + + // TIA,ibc/773B4D0A3CD667B2275D5A4A7A2F0909C0BA0F4059C0B9181E680DDF4965DCC7,8.52,13.61674924085,17.70177401312 + sdk.NewDecCoinFromDec("ibc/773B4D0A3CD667B2275D5A4A7A2F0909C0BA0F4059C0B9181E680DDF4965DCC7", math.LegacyMustNewDecFromStr("17.70177401312")), + + // ATOM,ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9,7.559,12.080869426243,15.705130254103 + sdk.NewDecCoinFromDec("ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9", math.LegacyMustNewDecFromStr("15.705130254103")), + + // axlWETH,ibc/A585C2D15DCD3B010849B453A2CFCB5E213208A5AB665691792684C26274304D,3616.34,5779.670768739013,7513.571999360713 + // 18 decimals coin + sdk.NewDecCoinFromDec("ibc/A585C2D15DCD3B010849B453A2CFCB5E213208A5AB665691792684C26274304D", math.LegacyMustNewDecFromStr("7513.571999360713").QuoInt64(DecimalsAdjustment)), + + // OSMO,ibc/376222D6D9DAE23092E29740E56B758580935A6D77C24C2ABD57A6A78A1F3955,0.6699,1.070640882212,1.391833146872 + sdk.NewDecCoinFromDec("ibc/376222D6D9DAE23092E29740E56B758580935A6D77C24C2ABD57A6A78A1F3955", math.LegacyMustNewDecFromStr("1.391833146872")), + + // DYM,ibc/4A6A46D4263F2ED3DCE9CF866FE15E6903FB5E12D87EB8BDC1B6B1A1E2D397B4,2.329,3.722231101167,4.838900431527 + // 18 decimals coin + sdk.NewDecCoinFromDec("ibc/4A6A46D4263F2ED3DCE9CF866FE15E6903FB5E12D87EB8BDC1B6B1A1E2D397B4", math.LegacyMustNewDecFromStr("4.838900431527").QuoInt64(DecimalsAdjustment)), + + // DYDX,ibc/2CB87BCE0937B1D1DFCEE79BE4501AAF3C265E923509AEAC410AD85D27F35130,1.71,2.732939108199,3.552820840659 + // 18 decimals coin + sdk.NewDecCoinFromDec("ibc/2CB87BCE0937B1D1DFCEE79BE4501AAF3C265E923509AEAC410AD85D27F35130", math.LegacyMustNewDecFromStr("3.552820840659").QuoInt64(DecimalsAdjustment)), + + // KUJI,ibc/1053E271314D36FECBC915B51474F8B3962597CE88FF3E4A74795B0E3F367A8B,1.22,1.949816205849,2.534761067589 + sdk.NewDecCoinFromDec("ibc/1053E271314D36FECBC915B51474F8B3962597CE88FF3E4A74795B0E3F367A8B", math.LegacyMustNewDecFromStr("2.534761067589")), + + // STARS,ibc/A139C0E0B5E87CBA8EAEEB12B9BEE13AC7C814CFBBFA87BBCADD67E31003466C,0.0138,0.022055298066,0.028671887496 + sdk.NewDecCoinFromDec("ibc/A139C0E0B5E87CBA8EAEEB12B9BEE13AC7C814CFBBFA87BBCADD67E31003466C", math.LegacyMustNewDecFromStr("0.028671887496")), + + // AXL,ibc/C0E66D1C81D8AAF0E6896E05190FDFBC222367148F86AC3EA679C28327A763CD,0.802,1.281764423845,1.666293750985 + sdk.NewDecCoinFromDec("ibc/C0E66D1C81D8AAF0E6896E05190FDFBC222367148F86AC3EA679C28327A763CD", math.LegacyMustNewDecFromStr("1.666293750985")), + + // STRD,ibc/3552CECB7BCE1891DB6070D37EC6E954C972B1400141308FCD85FD148BD06DE5,1.542,2.464439827393,3.203771775613 + sdk.NewDecCoinFromDec("ibc/3552CECB7BCE1891DB6070D37EC6E954C972B1400141308FCD85FD148BD06DE5", math.LegacyMustNewDecFromStr("3.203771775613")), +) + +func setDynamicFeesParams(ctx sdk.Context, dfKeeper *dynamicfeeskeeper.Keeper) error { + dfParams := dynamicfeestypes.Params{ + NtrnPrices: NtrnPrices, + } + err := dfKeeper.SetParams(ctx, dfParams) + if err != nil { + return errors.Wrap(err, "failed to set dynamic fees params") + } + + return nil +} + +func setFeeMarketParams(ctx sdk.Context, feemarketKeeper *feemarketkeeper.Keeper) error { + feemarketParams := feemarkettypes.Params{ + Alpha: math.LegacyZeroDec(), + Beta: math.LegacyZeroDec(), + Delta: math.LegacyZeroDec(), + MinBaseGasPrice: math.LegacyMustNewDecFromStr("0.0053"), + MinLearningRate: math.LegacyMustNewDecFromStr("0.08"), + MaxLearningRate: math.LegacyMustNewDecFromStr("0.08"), + MaxBlockUtilization: 30_000_000, + Window: 1, + FeeDenom: appparams.DefaultDenom, + Enabled: true, + DistributeFees: true, + } + feemarketState := feemarkettypes.NewState(feemarketParams.Window, feemarketParams.MinBaseGasPrice, feemarketParams.MinLearningRate) + err := feemarketKeeper.SetParams(ctx, feemarketParams) + if err != nil { + return errors.Wrap(err, "failed to set feemarket params") + } + err = feemarketKeeper.SetState(ctx, feemarketState) + if err != nil { + return errors.Wrap(err, "failed to set feemarket state") + } + + return nil +} + +func setMarketState(ctx sdk.Context, mmKeeper *marketmapkeeper.Keeper) error { + markets := marketMapToDeterministicallyOrderedMarkets(slinkyconstants.CoreMarketMap) + for _, market := range markets { + if err := mmKeeper.CreateMarket(ctx, market); err != nil { + return err + } + + if err := mmKeeper.Hooks().AfterMarketCreated(ctx, market); err != nil { + return err + } + + } + return nil +} + +func marketMapToDeterministicallyOrderedMarkets(mm marketmaptypes.MarketMap) []marketmaptypes.Market { + markets := make([]marketmaptypes.Market, 0, len(mm.Markets)) + for _, market := range mm.Markets { + markets = append(markets, market) + } + + // order the markets alphabetically by their ticker.String() + sort.Slice(markets, func(i, j int) bool { + return markets[i].Ticker.String() < markets[j].Ticker.String() + }) + + return markets +} + +func enableVoteExtensions(ctx sdk.Context, consensusKeeper *consensuskeeper.Keeper) error { + oldParams, err := consensusKeeper.Params(ctx, &types.QueryParamsRequest{}) + if err != nil { + return err + } + + oldParams.Params.Version = &comettypes.VersionParams{App: 0} + if err := consensusKeeper.ParamsStore.Set(ctx, *oldParams.Params); err != nil { + return err + } + + // we need to enable VoteExtensions for Slinky + oldParams.Params.Abci = &comettypes.ABCIParams{VoteExtensionsEnableHeight: ctx.BlockHeight() + 4} + + updateParamsMsg := types.MsgUpdateParams{ + Authority: authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + Block: oldParams.Params.Block, + Evidence: oldParams.Params.Evidence, + Validator: oldParams.Params.Validator, + Abci: oldParams.Params.Abci, + } + + _, err = consensusKeeper.UpdateParams(ctx, &updateParamsMsg) + return err +} diff --git a/app/upgrades/v4.0.0/upgrades_test.go b/app/upgrades/v4.0.1/upgrades_test.go similarity index 63% rename from app/upgrades/v4.0.0/upgrades_test.go rename to app/upgrades/v4.0.1/upgrades_test.go index ffec5e137..987cf20bb 100644 --- a/app/upgrades/v4.0.0/upgrades_test.go +++ b/app/upgrades/v4.0.1/upgrades_test.go @@ -1,11 +1,13 @@ package v400_test import ( + "sort" "testing" marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" - slinkyutils "github.com/neutron-org/neutron/v4/utils/slinky" + slinkyconstants "github.com/skip-mev/slinky/cmd/constants" + slinkytypes "github.com/skip-mev/slinky/pkg/types" upgradetypes "cosmossdk.io/x/upgrade/types" comettypes "github.com/cometbft/cometbft/proto/tendermint/types" @@ -14,15 +16,10 @@ import ( "github.com/stretchr/testify/suite" - _ "embed" - - v400 "github.com/neutron-org/neutron/v4/app/upgrades/v4.0.0" + v400 "github.com/neutron-org/neutron/v4/app/upgrades/v4.0.1" "github.com/neutron-org/neutron/v4/testutil" ) -//go:embed markets.json -var marketsJSON []byte - type UpgradeTestSuite struct { testutil.IBCConnectionTestSuite } @@ -40,9 +37,15 @@ func (suite *UpgradeTestSuite) TestOracleUpgrade() { ctx := suite.ChainA.GetContext() t := suite.T() - markets, err := slinkyutils.ReadMarketsFromFile(marketsJSON) + oldParams, err := app.ConsensusParamsKeeper.Params(ctx, &types.QueryParamsRequest{}) + suite.Require().NoError(err) + // it is automatically tracked in upgrade handler, we need to set it manually for tests + oldParams.Params.Version = &comettypes.VersionParams{App: 0} + // we need to properly set consensus params for tests or we get a panic + suite.Require().NoError(app.ConsensusParamsKeeper.ParamsStore.Set(ctx, *oldParams.Params)) + + markets := slinkyconstants.CoreMarketMap.Markets suite.Require().NoError(err) - marketMap := slinkyutils.ToMarketMap(markets) upgrade := upgradetypes.Plan{ Name: v400.UpgradeName, @@ -54,19 +57,21 @@ func (suite *UpgradeTestSuite) TestOracleUpgrade() { params, err := app.MarketMapKeeper.GetParams(ctx) suite.Require().NoError(err) suite.Require().Equal(params.MarketAuthorities[0], "neutron1hxskfdxpp5hqgtjj6am6nkjefhfzj359x0ar3z") + suite.Require().Equal(params.MarketAuthorities[1], "neutron1ua63s43u2p4v38pxhcxmps0tj2gudyw2hfeetz") suite.Require().Equal(params.Admin, "neutron1hxskfdxpp5hqgtjj6am6nkjefhfzj359x0ar3z") // check that the market map was properly set mm, err := app.MarketMapKeeper.GetAllMarkets(ctx) gotMM := marketmaptypes.MarketMap{Markets: mm} suite.Require().NoError(err) - suite.Require().True(marketMap.Equal(gotMM)) + suite.Require().True(slinkyconstants.CoreMarketMap.Equal(gotMM)) numCps, err := app.OracleKeeper.GetNumCurrencyPairs(ctx) suite.Require().NoError(err) suite.Require().Equal(numCps, uint64(len(markets))) // check that all currency pairs have been initialized in the oracle module + tickers := make([]slinkytypes.CurrencyPair, 0, len(markets)) for _, market := range markets { decimals, err := app.OracleKeeper.GetDecimalsForCurrencyPair(ctx, market.Ticker.CurrencyPair) suite.Require().NoError(err) @@ -78,6 +83,19 @@ func (suite *UpgradeTestSuite) TestOracleUpgrade() { suite.Require().Equal(uint64(0), price.BlockHeight) // no block height because no price written yet suite.Require().True(market.Ticker.Enabled) + + tickers = append(tickers, market.Ticker.CurrencyPair) + } + + // check IDs for inserted currency pairs, sort currency-pairs alphabetically + sort.Slice(tickers, func(i, j int) bool { + return tickers[i].String() < tickers[j].String() + }) + + for i, cp := range tickers { + id, found := app.OracleKeeper.GetIDForCurrencyPair(ctx, cp) + suite.Require().True(found) + suite.Require().Equal(uint64(i), id) } } @@ -94,6 +112,8 @@ func (suite *UpgradeTestSuite) TestEnableVoteExtensionsUpgrade() { oldParams.Params.Abci = &comettypes.ABCIParams{VoteExtensionsEnableHeight: ctx.BlockHeight() + 4} // it is automatically tracked in upgrade handler, we need to set it manually for tests oldParams.Params.Version = &comettypes.VersionParams{App: 0} + // we need to properly set consensus params for tests or we get a panic + suite.Require().NoError(app.ConsensusParamsKeeper.ParamsStore.Set(ctx, *oldParams.Params)) upgrade := upgradetypes.Plan{ Name: v400.UpgradeName, @@ -107,3 +127,19 @@ func (suite *UpgradeTestSuite) TestEnableVoteExtensionsUpgrade() { suite.Require().Equal(oldParams, newParams) } + +func (suite *UpgradeTestSuite) TestDynamicFeesUpgrade() { + app := suite.GetNeutronZoneApp(suite.ChainA) + ctx := suite.ChainA.GetContext() + t := suite.T() + + upgrade := upgradetypes.Plan{ + Name: v400.UpgradeName, + Info: "some text here", + Height: 100, + } + require.NoError(t, app.UpgradeKeeper.ApplyUpgrade(ctx, upgrade)) + + params := app.DynamicFeesKeeper.GetParams(ctx) + suite.Require().Equal(params.NtrnPrices, v400.NtrnPrices) +} diff --git a/cmd/neutrond/root.go b/cmd/neutrond/root.go index f924fd62e..2c5c7a940 100644 --- a/cmd/neutrond/root.go +++ b/cmd/neutrond/root.go @@ -113,6 +113,8 @@ func NewRootCmd() (*cobra.Command, params.EncodingConfig) { }, } + genAutoCompleteCmd(rootCmd) + initRootCmd(rootCmd, encodingConfig) initClientCtx, err := config.ReadDefaultValuesFromDefaultClientConfig(initClientCtx) if err != nil { @@ -278,7 +280,7 @@ func (ac appCreator) newApp( chainID := cast.ToString(appOpts.Get(flags.FlagChainID)) if chainID == "" { // fallback to genesis chain-id - appGenesis, err := genutiltypes.AppGenesisFromFile(filepath.Join(homeDir, "config", "genesis.json")) + appGenesis, err := genutiltypes.AppGenesisFromFile(filepath.Join(homeDir, cast.ToString(appOpts.Get("genesis_file")))) if err != nil { panic(err) } @@ -287,7 +289,7 @@ func (ac appCreator) newApp( } return app.New(logger, db, traceStore, true, skipUpgradeHeights, - cast.ToString(appOpts.Get(flags.FlagHome)), + homeDir, cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), ac.encCfg, appOpts, @@ -385,3 +387,35 @@ func setCustomEnvVariablesFromClientToml(ctx client.Context) { // memo setEnvFromConfig("note", "NEUTROND_NOTE") } + +func genAutoCompleteCmd(rootCmd *cobra.Command) { + rootCmd.AddCommand(&cobra.Command{ + Use: "enable-cli-autocomplete [bash|zsh|fish|powershell]", + Short: "Generates cli completion scripts", + Long: `To configure your shell to load completions for each session, add to your profile: + +# bash example +echo '. <(neutrond enable-cli-autocomplete bash)' >> ~/.bash_profile +source ~/.bash_profile + +# zsh example +echo '. <(neutrond enable-cli-autocomplete zsh)' >> ~/.zshrc +source ~/.zshrc +`, + DisableFlagsInUseLine: true, + ValidArgs: []string{"bash", "zsh", "fish", "powershell"}, + Args: cobra.ExactArgs(1), + Run: func(cmd *cobra.Command, args []string) { + switch args[0] { + case "bash": + _ = cmd.Root().GenBashCompletion(os.Stdout) + case "zsh": + _ = cmd.Root().GenZshCompletion(os.Stdout) + case "fish": + _ = cmd.Root().GenFishCompletion(os.Stdout, true) + case "powershell": + _ = cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout) + } + }, + }) +} diff --git a/contracts/credits_vault.wasm b/contracts/credits_vault.wasm index 6a4794629..0efab2f48 100644 Binary files a/contracts/credits_vault.wasm and b/contracts/credits_vault.wasm differ diff --git a/contracts/cwd_core.wasm b/contracts/cwd_core.wasm index 5d9da762e..139d421a4 100644 Binary files a/contracts/cwd_core.wasm and b/contracts/cwd_core.wasm differ diff --git a/contracts/cwd_pre_propose_multiple.wasm b/contracts/cwd_pre_propose_multiple.wasm index 5fb3ed243..b383834ab 100644 Binary files a/contracts/cwd_pre_propose_multiple.wasm and b/contracts/cwd_pre_propose_multiple.wasm differ diff --git a/contracts/cwd_pre_propose_overrule.wasm b/contracts/cwd_pre_propose_overrule.wasm index b0bd27a03..06e9457b5 100644 Binary files a/contracts/cwd_pre_propose_overrule.wasm and b/contracts/cwd_pre_propose_overrule.wasm differ diff --git a/contracts/cwd_pre_propose_single.wasm b/contracts/cwd_pre_propose_single.wasm index a18f01e5c..6dddff793 100644 Binary files a/contracts/cwd_pre_propose_single.wasm and b/contracts/cwd_pre_propose_single.wasm differ diff --git a/contracts/cwd_proposal_multiple.wasm b/contracts/cwd_proposal_multiple.wasm index 964fe451b..6aed15cca 100644 Binary files a/contracts/cwd_proposal_multiple.wasm and b/contracts/cwd_proposal_multiple.wasm differ diff --git a/contracts/cwd_proposal_single.wasm b/contracts/cwd_proposal_single.wasm index 2ba57c79a..ed37b8686 100644 Binary files a/contracts/cwd_proposal_single.wasm and b/contracts/cwd_proposal_single.wasm differ diff --git a/contracts/cwd_security_subdao_pre_propose.wasm b/contracts/cwd_security_subdao_pre_propose.wasm index e2bd2d4c6..d0259ca36 100644 Binary files a/contracts/cwd_security_subdao_pre_propose.wasm and b/contracts/cwd_security_subdao_pre_propose.wasm differ diff --git a/contracts/cwd_subdao_core.wasm b/contracts/cwd_subdao_core.wasm index 532deaa54..05d3c348d 100644 Binary files a/contracts/cwd_subdao_core.wasm and b/contracts/cwd_subdao_core.wasm differ diff --git a/contracts/cwd_subdao_pre_propose_single.wasm b/contracts/cwd_subdao_pre_propose_single.wasm index 30b66f6ea..4643518b9 100644 Binary files a/contracts/cwd_subdao_pre_propose_single.wasm and b/contracts/cwd_subdao_pre_propose_single.wasm differ diff --git a/contracts/cwd_subdao_proposal_single.wasm b/contracts/cwd_subdao_proposal_single.wasm index 3cf18f29e..da208fc0a 100644 Binary files a/contracts/cwd_subdao_proposal_single.wasm and b/contracts/cwd_subdao_proposal_single.wasm differ diff --git a/contracts/cwd_subdao_timelock_single.wasm b/contracts/cwd_subdao_timelock_single.wasm index 9348d6eab..5b310f944 100644 Binary files a/contracts/cwd_subdao_timelock_single.wasm and b/contracts/cwd_subdao_timelock_single.wasm differ diff --git a/contracts/investors_vesting_vault.wasm b/contracts/investors_vesting_vault.wasm index 9cca8de9a..473a01e41 100644 Binary files a/contracts/investors_vesting_vault.wasm and b/contracts/investors_vesting_vault.wasm differ diff --git a/contracts/lockdrop_vault.wasm b/contracts/lockdrop_vault.wasm index 44621acb7..81e3ae9a4 100644 Binary files a/contracts/lockdrop_vault.wasm and b/contracts/lockdrop_vault.wasm differ diff --git a/contracts/neutron_chain_manager.wasm b/contracts/neutron_chain_manager.wasm index 9fe227122..912789846 100644 Binary files a/contracts/neutron_chain_manager.wasm and b/contracts/neutron_chain_manager.wasm differ diff --git a/contracts/neutron_distribution.wasm b/contracts/neutron_distribution.wasm index 5e7e5673d..fcec74085 100644 Binary files a/contracts/neutron_distribution.wasm and b/contracts/neutron_distribution.wasm differ diff --git a/contracts/neutron_reserve.wasm b/contracts/neutron_reserve.wasm index a4b0fa4c8..9c8485794 100644 Binary files a/contracts/neutron_reserve.wasm and b/contracts/neutron_reserve.wasm differ diff --git a/contracts/neutron_vault.wasm b/contracts/neutron_vault.wasm index 117fdeae7..1c5417a6f 100644 Binary files a/contracts/neutron_vault.wasm and b/contracts/neutron_vault.wasm differ diff --git a/contracts/neutron_voting_registry.wasm b/contracts/neutron_voting_registry.wasm index 8aee85212..ec74e3487 100644 Binary files a/contracts/neutron_voting_registry.wasm and b/contracts/neutron_voting_registry.wasm differ diff --git a/contracts/vesting_lp_vault.wasm b/contracts/vesting_lp_vault.wasm index 937992f55..3ae2c107a 100644 Binary files a/contracts/vesting_lp_vault.wasm and b/contracts/vesting_lp_vault.wasm differ diff --git a/contrib/statesync.bash b/contrib/statesync.bash index 96d84b989..c314af9aa 100644 --- a/contrib/statesync.bash +++ b/contrib/statesync.bash @@ -70,4 +70,4 @@ NEUTROND_P2P_SEEDS=$(curl -s https://raw.githubusercontent.com/cosmos/chain-regi export NEUTROND_P2P_SEEDS # Start chain. -neutrond start --x-crisis-skip-assert-invariants --iavl-disable-fastnode false +neutrond start --x-crisis-skip-assert-invariants --iavl-disable-fastnode false --minimum-gas-prices 0untrn diff --git a/docs/static/swagger.yaml b/docs/static/swagger.yaml index 6e83a8d33..26bf7a1b0 100644 --- a/docs/static/swagger.yaml +++ b/docs/static/swagger.yaml @@ -13876,6 +13876,17 @@ definitions: QueryAllContractStateResponse is the response type for the Query/AllContractState RPC method type: object + cosmwasm.wasm.v1.QueryBuildAddressResponse: + description: >- + QueryBuildAddressResponse is the response type for the Query/BuildAddress + RPC + + method. + properties: + address: + title: Address is the contract address + type: string + type: object cosmwasm.wasm.v1.QueryCodeResponse: properties: code_info: @@ -14300,6 +14311,296 @@ definitions: QuerySmartContractStateResponse is the response type for the Query/SmartContractState RPC method type: object + feemarket.feemarket.v1.GasPriceResponse: + description: |- + GasPriceResponse is the response type for the Query/GasPrice RPC method. + Returns a gas price in specified denom. + properties: + price: + description: |- + DecCoin defines a token with a denomination and a decimal amount. + + NOTE: The amount field is an Dec which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: object + feemarket.feemarket.v1.GasPricesResponse: + description: |- + GasPricesResponse is the response type for the Query/GasPrices RPC method. + Returns a gas price in all available denoms. + properties: + prices: + items: + description: |- + DecCoin defines a token with a denomination and a decimal amount. + + NOTE: The amount field is an Dec which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array + type: object + feemarket.feemarket.v1.Params: + description: |- + Params contains the required set of parameters for the EIP1559 fee market + plugin implementation. + properties: + alpha: + description: |- + Alpha is the amount we additively increase the learning rate + when it is above or below the target +/- threshold. + + Must be > 0. + type: string + beta: + description: |- + Beta is the amount we multiplicatively decrease the learning rate + when it is within the target +/- threshold. + + Must be [0, 1]. + type: string + delta: + description: >- + Delta is the amount we additively increase/decrease the gas price when + the + + net block utilization difference in the window is above/below the + target + + utilization. + type: string + distribute_fees: + description: >- + DistributeFees is a boolean that determines whether the fees are + burned or + + distributed to all stakers. + type: boolean + enabled: + description: |- + Enabled is a boolean that determines whether the EIP1559 fee market is + enabled. + type: boolean + fee_denom: + description: FeeDenom is the denom that will be used for all fee payments. + type: string + gamma: + description: |- + Gamma is the threshold for the learning rate. If the learning rate is + above or below the target +/- threshold, we additively increase the + learning rate by Alpha. Otherwise, we multiplicatively decrease the + learning rate by Beta. + + Must be [0, 0.5]. + type: string + max_block_utilization: + description: MaxBlockUtilization is the maximum block utilization. + format: uint64 + type: string + max_learning_rate: + description: MaxLearningRate is the upper bound for the learning rate. + type: string + min_base_gas_price: + description: |- + MinBaseGasPrice determines the initial gas price of the module and the + global minimum for the network. + type: string + min_learning_rate: + description: MinLearningRate is the lower bound for the learning rate. + type: string + window: + description: >- + Window defines the window size for calculating an adaptive learning + rate + + over a moving window of blocks. + format: uint64 + type: string + type: object + feemarket.feemarket.v1.ParamsResponse: + description: ParamsResponse is the response type for the Query/Params RPC method. + properties: + params: + description: >- + Params contains the required set of parameters for the EIP1559 fee + market + + plugin implementation. + properties: + alpha: + description: |- + Alpha is the amount we additively increase the learning rate + when it is above or below the target +/- threshold. + + Must be > 0. + type: string + beta: + description: |- + Beta is the amount we multiplicatively decrease the learning rate + when it is within the target +/- threshold. + + Must be [0, 1]. + type: string + delta: + description: >- + Delta is the amount we additively increase/decrease the gas price + when the + + net block utilization difference in the window is above/below the + target + + utilization. + type: string + distribute_fees: + description: >- + DistributeFees is a boolean that determines whether the fees are + burned or + + distributed to all stakers. + type: boolean + enabled: + description: >- + Enabled is a boolean that determines whether the EIP1559 fee + market is + + enabled. + type: boolean + fee_denom: + description: FeeDenom is the denom that will be used for all fee payments. + type: string + gamma: + description: >- + Gamma is the threshold for the learning rate. If the learning rate + is + + above or below the target +/- threshold, we additively increase + the + + learning rate by Alpha. Otherwise, we multiplicatively decrease + the + + learning rate by Beta. + + + Must be [0, 0.5]. + type: string + max_block_utilization: + description: MaxBlockUtilization is the maximum block utilization. + format: uint64 + type: string + max_learning_rate: + description: MaxLearningRate is the upper bound for the learning rate. + type: string + min_base_gas_price: + description: >- + MinBaseGasPrice determines the initial gas price of the module and + the + + global minimum for the network. + type: string + min_learning_rate: + description: MinLearningRate is the lower bound for the learning rate. + type: string + window: + description: >- + Window defines the window size for calculating an adaptive + learning rate + + over a moving window of blocks. + format: uint64 + type: string + type: object + type: object + feemarket.feemarket.v1.State: + description: >- + State is utilized to track the current state of the fee market. This + includes + + the current base fee, learning rate, and block utilization within the + + specified AIMD window. + properties: + base_gas_price: + description: >- + BaseGasPrice is the current base fee. This is denominated in the fee + per + + gas unit. + type: string + index: + description: >- + Index is the index of the current block in the block utilization + window. + format: uint64 + type: string + learning_rate: + description: LearningRate is the current learning rate. + type: string + window: + description: >- + Window contains a list of the last blocks' utilization values. This is + used + + to calculate the next base fee. This stores the number of units of gas + + consumed per block. + items: + format: uint64 + type: string + type: array + type: object + feemarket.feemarket.v1.StateResponse: + description: StateResponse is the response type for the Query/State RPC method. + properties: + state: + description: >- + State is utilized to track the current state of the fee market. This + includes + + the current base fee, learning rate, and block utilization within the + + specified AIMD window. + properties: + base_gas_price: + description: >- + BaseGasPrice is the current base fee. This is denominated in the + fee per + + gas unit. + type: string + index: + description: >- + Index is the index of the current block in the block utilization + window. + format: uint64 + type: string + learning_rate: + description: LearningRate is the current learning rate. + type: string + window: + description: >- + Window contains a list of the last blocks' utilization values. + This is used + + to calculate the next base fee. This stores the number of units of + gas + + consumed per block. + items: + format: uint64 + type: string + type: array + type: object + type: object gaia.globalfee.v1beta1.Params: description: Params defines the set of module parameters. properties: @@ -15608,8 +15909,14 @@ definitions: format: uint64 type: string type: array - max_true_taker_spread: + good_til_purge_allowance: + format: uint64 type: string + max_jits_per_block: + format: uint64 + type: string + paused: + type: boolean type: object neutron.dex.Pool: properties: @@ -16569,8 +16876,14 @@ definitions: format: uint64 type: string type: array - max_true_taker_spread: + good_til_purge_allowance: + format: uint64 type: string + max_jits_per_block: + format: uint64 + type: string + paused: + type: boolean type: object type: object neutron.dex.QueryPoolResponse: @@ -16707,6 +17020,68 @@ definitions: taker_denom: type: string type: object + neutron.dynamicfees.v1.Params: + description: Params defines the parameters for the module. + properties: + ntrn_prices: + items: + description: |- + DecCoin defines a token with a denomination and a decimal amount. + + NOTE: The amount field is an Dec which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + List of asset prices by the NTRN + + it's used in cooperation with feemarket module + + ntrn_prices is a data source to convert gas_price from feemarket's + base_denom (untrn) + + into a given asset + type: array + type: object + neutron.dynamicfees.v1.QueryParamsResponse: + description: QueryParamsResponse is response type for the Query/Params RPC method. + properties: + params: + description: params holds all the parameters of this module. + properties: + ntrn_prices: + items: + description: >- + DecCoin defines a token with a denomination and a decimal + amount. + + + NOTE: The amount field is an Dec which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + List of asset prices by the NTRN + + it's used in cooperation with feemarket module + + ntrn_prices is a data source to convert gas_price from feemarket's + base_denom (untrn) + + into a given asset + type: array + type: object + type: object neutron.feeburner.Params: description: Params defines the parameters for the module. properties: @@ -18262,17 +18637,7 @@ definitions: type: array type: object type: object - osmosis.tokenfactory.v1beta1.DenomAuthorityMetadata: - description: |- - DenomAuthorityMetadata specifies metadata for addresses that have specific - capabilities over a token factory denom. Right now there is only one Admin - permission, but is planned to be extended to the future. - properties: - Admin: - title: Can be empty for no admin, or a valid osmosis address - type: string - type: object - osmosis.tokenfactory.v1beta1.Params: + osmosis.tokenfactory.Params: description: Params defines the parameters for the tokenfactory module. properties: denom_creation_fee: @@ -18311,6 +18676,52 @@ definitions: are sent to type: string + whitelisted_hooks: + items: + properties: + code_id: + format: uint64 + type: string + denom_creator: + type: string + title: >- + WhitelistedHook describes a beforeSendHook which is allowed to be + added and executed + + SetBeforeSendHook can only be called on denoms where the denom + creator and + + code_id for the `contract_addr` match a WhitelistedHook + type: object + title: >- + whitelisted_hooks is the list of hooks which are allowed to be added + and executed + type: array + type: object + osmosis.tokenfactory.WhitelistedHook: + properties: + code_id: + format: uint64 + type: string + denom_creator: + type: string + title: >- + WhitelistedHook describes a beforeSendHook which is allowed to be added + and executed + + SetBeforeSendHook can only be called on denoms where the denom creator and + + code_id for the `contract_addr` match a WhitelistedHook + type: object + osmosis.tokenfactory.v1beta1.DenomAuthorityMetadata: + description: |- + DenomAuthorityMetadata specifies metadata for addresses that have specific + capabilities over a token factory denom. Right now there is only one Admin + permission, but is planned to be extended to the future. + properties: + Admin: + title: Can be empty for no admin, or a valid osmosis address + type: string type: object osmosis.tokenfactory.v1beta1.QueryBeforeSendHookAddressResponse: description: |- @@ -18399,6 +18810,27 @@ definitions: are sent to type: string + whitelisted_hooks: + items: + properties: + code_id: + format: uint64 + type: string + denom_creator: + type: string + title: >- + WhitelistedHook describes a beforeSendHook which is allowed to + be added and executed + + SetBeforeSendHook can only be called on denoms where the denom + creator and + + code_id for the `contract_addr` match a WhitelistedHook + type: object + title: >- + whitelisted_hooks is the list of hooks which are allowed to be + added and executed + type: array type: object type: object packetforward.v1.Params: @@ -18564,2112 +18996,2385 @@ definitions: mempool for that lane. type: object type: object - tendermint.abci.Event: - description: |- - Event allows application developers to attach additional information to - ResponseFinalizeBlock and ResponseCheckTx. - Later, transactions may be queried using these events. - properties: - attributes: - items: - description: EventAttribute is a single key-value pair, associated with an event. - properties: - index: - type: boolean - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - tendermint.abci.EventAttribute: - description: EventAttribute is a single key-value pair, associated with an event. - properties: - index: - type: boolean - key: - type: string - value: - type: string - type: object - tendermint.abci.ExecTxResult: + slinky.alerts.v1.Alert: description: >- - ExecTxResult contains results of executing one individual transaction. + Alert defines the basic meta-data necessary for the alerts module to + resolve + a claim that the price of a CurrencyPair on-chain is deviating from the + price - * Its structure is equivalent to #ResponseDeliverTx which will be - deprecated/deleted + off-chain. properties: - code: - format: int64 - type: integer - codespace: - type: string - data: - format: byte - type: string - events: - items: - description: >- - Event allows application developers to attach additional information - to + currency_pair: + description: >- + currency_pair is the currency-pair that this claim asserts is + deviating - ResponseFinalizeBlock and ResponseCheckTx. + from the price off-chain. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of assets, where + one - Later, transactions may be queried using these events. - properties: - attributes: - items: - description: >- - EventAttribute is a single key-value pair, associated with an - event. - properties: - index: - type: boolean - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - type: array - gas_used: - format: int64 - type: string - gas_wanted: - format: int64 - type: string - info: - type: string - log: - type: string - type: object - tendermint.abci.Validator: - properties: - address: - format: byte - type: string - power: - format: int64 - title: PubKey pub_key = 2 [(gogoproto.nullable)=false]; - type: string - type: object - tendermint.crypto.Proof: - properties: - aunts: - items: - format: byte - type: string - type: array - index: - format: int64 - type: string - leaf_hash: - format: byte + (Base) is priced in terms of the other (Quote) + type: object + height: + description: height represents the height for which the alert is filed. + format: uint64 type: string - total: - format: int64 + signer: + description: >- + signer is the signer of this alert, this is the address that will + receive + + the reward in the case of a positive conclusion, or whose bond will + get + + slashed in the event of a negative conclusion. type: string type: object - tendermint.crypto.ProofOp: + slinky.alerts.v1.AlertParams: + description: >- + AlertParams is the set of parameters for the x/Alerts module's Alerting. + It + + defines whether or not Alerts can be submitted, and if so, the minimum + + bond amount required to submit an Alert. properties: - data: - format: byte - type: string - key: - format: byte - type: string - type: + bond_amount: + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: |- + BondAmount is the minimum amount of bond required to submit an + Alert + enabled: + title: |- + Enabled is a boolean defining whether or not Alerts can be submitted + to the module + type: boolean + max_block_age: + description: >- + MaxBlockAge defines the maximum age of an Alert before it is pruned, + notice + + this is defined wrt. the height that the Alert references, i.e Alerts + are + + only relevant until Alert.Height + MaxBlockAge is reached. + format: uint64 type: string - title: |- - ProofOp defines an operation used for calculating Merkle root - The data could be arbitrary format, providing nessecary data - for example neighbouring node hash type: object - tendermint.crypto.ProofOps: + slinky.alerts.v1.AlertStatusID: + default: CONCLUSION_STATUS_UNSPECIFIED + description: >- + AlertStatus is the type for the status of an Alert, it can be Unconcluded + or + + Concluded. + enum: + - CONCLUSION_STATUS_UNSPECIFIED + - CONCLUSION_STATUS_UNCONCLUDED + - CONCLUSION_STATUS_CONCLUDED + type: string + slinky.alerts.v1.AlertsResponse: + description: |- + AlertsResponse is the response type for the Query.Alerts RPC method, it + contains the list of Alerts that are being tracked by the alerts module. properties: - ops: + alerts: items: + description: >- + Alert defines the basic meta-data necessary for the alerts module to + resolve + + a claim that the price of a CurrencyPair on-chain is deviating from + the price + + off-chain. properties: - data: - format: byte - type: string - key: - format: byte + currency_pair: + description: >- + currency_pair is the currency-pair that this claim asserts is + deviating + + from the price off-chain. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of assets, + where one + + (Base) is priced in terms of the other (Quote) + type: object + height: + description: height represents the height for which the alert is filed. + format: uint64 type: string - type: + signer: + description: >- + signer is the signer of this alert, this is the address that + will receive + + the reward in the case of a positive conclusion, or whose bond + will get + + slashed in the event of a negative conclusion. type: string - title: |- - ProofOp defines an operation used for calculating Merkle root - The data could be arbitrary format, providing nessecary data - for example neighbouring node hash type: object type: array - title: ProofOps is Merkle proof defined by the list of ProofOps - type: object - tendermint.crypto.PublicKey: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: PublicKey defines the keys available for use with Validators type: object - tendermint.p2p.DefaultNodeInfo: + slinky.alerts.v1.Params: + description: Params is the set of parameters for the x/Alerts module. properties: - channels: - format: byte - type: string - default_node_id: - type: string - listen_addr: - type: string - moniker: - type: string - network: - type: string - other: + alert_params: + description: >- + AlertParams is the set of parameters for the x/Alerts module's + Alerting. properties: - rpc_address: - type: string - tx_index: + bond_amount: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: |- + BondAmount is the minimum amount of bond required to submit an + Alert + enabled: + title: >- + Enabled is a boolean defining whether or not Alerts can be + submitted + + to the module + type: boolean + max_block_age: + description: >- + MaxBlockAge defines the maximum age of an Alert before it is + pruned, notice + + this is defined wrt. the height that the Alert references, i.e + Alerts are + + only relevant until Alert.Height + MaxBlockAge is reached. + format: uint64 type: string type: object - protocol_version: + conclusion_verification_params: properties: - app: - format: uint64 - type: string - block: - format: uint64 + type_url: type: string - p2p: - format: uint64 + value: + format: byte type: string type: object - version: - type: string + description: |- + ConclusionVerificationParams is the set of parameters for the x/Alerts + module's conclusion verification. + pruning_params: + description: >- + PruningParams is the set of parameters for the x/Alerts module's + pruning. + properties: + blocks_to_prune: + description: >- + BlocksToPrune defines the number of blocks until an Alert will be + pruned + + from state, notice this is defined wrt. the current block height, + i.e + + Alerts will be stored in state until current_height + + BlocksToPrune is + + reached. + format: uint64 + type: string + enabled: + title: Enabled defines whether Alerts are to be pruned + type: boolean + type: object type: object - tendermint.p2p.DefaultNodeInfoOther: + slinky.alerts.v1.ParamsResponse: + description: |- + ParamsResponse is the response type for the Query.Params RPC method, it + contains the Params of the module. properties: - rpc_address: - type: string - tx_index: - type: string + params: + description: Params is the set of parameters for the x/Alerts module. + properties: + alert_params: + description: >- + AlertParams is the set of parameters for the x/Alerts module's + Alerting. + properties: + bond_amount: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: |- + BondAmount is the minimum amount of bond required to submit an + Alert + enabled: + title: >- + Enabled is a boolean defining whether or not Alerts can be + submitted + + to the module + type: boolean + max_block_age: + description: >- + MaxBlockAge defines the maximum age of an Alert before it is + pruned, notice + + this is defined wrt. the height that the Alert references, i.e + Alerts are + + only relevant until Alert.Height + MaxBlockAge is reached. + format: uint64 + type: string + type: object + conclusion_verification_params: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + ConclusionVerificationParams is the set of parameters for the + x/Alerts + + module's conclusion verification. + pruning_params: + description: >- + PruningParams is the set of parameters for the x/Alerts module's + pruning. + properties: + blocks_to_prune: + description: >- + BlocksToPrune defines the number of blocks until an Alert will + be pruned + + from state, notice this is defined wrt. the current block + height, i.e + + Alerts will be stored in state until current_height + + BlocksToPrune is + + reached. + format: uint64 + type: string + enabled: + title: Enabled defines whether Alerts are to be pruned + type: boolean + type: object + type: object type: object - tendermint.p2p.ProtocolVersion: + slinky.alerts.v1.PruningParams: + description: PruningParams defines the criterion for pruning Alerts from the state. properties: - app: + blocks_to_prune: + description: >- + BlocksToPrune defines the number of blocks until an Alert will be + pruned + + from state, notice this is defined wrt. the current block height, i.e + + Alerts will be stored in state until current_height + BlocksToPrune is + + reached. format: uint64 type: string - block: - format: uint64 + enabled: + title: Enabled defines whether Alerts are to be pruned + type: boolean + type: object + slinky.incentives.v1.GetAllIncentivesResponse: + description: >- + GetAllIncentivesResponse is the response type for the + Query/GetAllIncentives + + RPC method. + properties: + registry: + description: Registry is the list of all incentives, grouped by type. + items: + description: >- + IncentivesByType encapsulates a list of incentives by type. Each of + the + + entries here must correspond to the same incentive type defined + here. + properties: + entries: + description: Entries is a list of incentive bytes. + items: + format: byte + type: string + type: array + incentive_type: + description: |- + IncentiveType is the incentive type i.e. (BadPriceIncentiveType, + GoodPriceIncentiveType). + type: string + type: object + type: array + type: object + slinky.incentives.v1.GetIncentivesByTypeResponse: + description: |- + GetIncentivesByTypeResponse is the response type for the + Query/GetIncentivesByType RPC method. + properties: + entries: + description: Entries is the list of incentives of the given type. + items: + format: byte + type: string + type: array + type: object + slinky.incentives.v1.IncentivesByType: + description: |- + IncentivesByType encapsulates a list of incentives by type. Each of the + entries here must correspond to the same incentive type defined here. + properties: + entries: + description: Entries is a list of incentive bytes. + items: + format: byte + type: string + type: array + incentive_type: + description: |- + IncentiveType is the incentive type i.e. (BadPriceIncentiveType, + GoodPriceIncentiveType). type: string - p2p: + type: object + slinky.marketmap.v1.LastUpdatedResponse: + description: |- + LastUpdatedResponse is the response type for the Query/LastUpdated RPC + method. + properties: + last_updated: format: uint64 type: string type: object - tendermint.types.ABCIParams: - description: >- - ABCIParams configure functionality specific to the Application Blockchain - Interface. + slinky.marketmap.v1.Market: + description: Market encapsulates a Ticker and its provider-specific configuration. properties: - vote_extensions_enable_height: + provider_configs: description: >- - vote_extensions_enable_height configures the first height during which + ProviderConfigs is the list of provider-specific configs for this + Market. + items: + properties: + invert: + title: >- + Invert is a boolean indicating if the BASE and QUOTE of the + market should - vote extensions will be enabled. During this specified height, and for - all + be inverted. i.e. BASE -> QUOTE, QUOTE -> BASE + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes any extra + configuration - subsequent heights, precommit messages that do not contain valid - extension data + for the given provider config. + type: string + name: + description: >- + Name corresponds to the name of the provider for which the + configuration is - will be considered invalid. Prior to this height, vote extensions will - not + being set. + type: string + normalize_by_pair: + description: >- + NormalizeByPair is the currency pair for this ticker to be + normalized by. - be used or accepted by validators on the network. + For example, if the desired Ticker is BTC/USD, this market could + be reached + using: OffChainTicker = BTC/USDT NormalizeByPair = USDT/USD This + field is - Once enabled, vote extensions will be created by the application in - ExtendVote, + optional and nullable. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of assets, + where one - passed to the application for validation in VerifyVoteExtension and - given + (Base) is priced in terms of the other (Quote) + type: object + off_chain_ticker: + description: >- + OffChainTicker is the off-chain representation of the ticker + i.e. BTC/USD. - to the application to use when proposing a block during - PrepareProposal. - format: int64 - type: string - type: object - tendermint.types.Block: - properties: - data: + The off-chain ticker is unique to a given provider and is used + to fetch the + + price of the ticker from the provider. + type: string + type: object + type: array + ticker: + description: >- + Ticker represents a price feed for a given asset pair i.e. BTC/USD. + The + + price feed is scaled to a number of decimal places and has a minimum + number + + of providers required to consider the ticker valid. properties: - txs: + currency_pair: + description: CurrencyPair is the currency pair for this ticker. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of assets, + where one + + (Base) is priced in terms of the other (Quote) + type: object + decimals: description: >- - Txs that will be applied by state @ block.Height+1. + Decimals is the number of decimal places for the ticker. The + number of - NOTE: not all txs here are valid. We're just agreeing on the - order first. + decimal places is used to convert the price to a human-readable + format. + format: uint64 + type: string + enabled: + description: >- + Enabled is the flag that denotes if the Ticker is enabled for + price - This means that block.AppHash does not include these txs. - items: - format: byte - type: string - type: array - title: Data contains the set of transactions included in the block + fetching by an oracle. + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes any extra + configuration + + for the given ticker. + type: string + min_provider_count: + description: >- + MinProviderCount is the minimum number of providers required to + consider + + the ticker valid. + format: uint64 + type: string type: object - evidence: - properties: - evidence: - items: + type: object + slinky.marketmap.v1.MarketMap: + description: MarketMap maps ticker strings to their Markets. + properties: + markets: + additionalProperties: + description: >- + Market encapsulates a Ticker and its provider-specific + configuration. + properties: + provider_configs: + description: >- + ProviderConfigs is the list of provider-specific configs for + this Market. + items: + properties: + invert: + title: >- + Invert is a boolean indicating if the BASE and QUOTE of + the market should + + be inverted. i.e. BASE -> QUOTE, QUOTE -> BASE + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes any extra + configuration + + for the given provider config. + type: string + name: + description: >- + Name corresponds to the name of the provider for which the + configuration is + + being set. + type: string + normalize_by_pair: + description: >- + NormalizeByPair is the currency pair for this ticker to be + normalized by. + + For example, if the desired Ticker is BTC/USD, this market + could be reached + + using: OffChainTicker = BTC/USDT NormalizeByPair = + USDT/USD This field is + + optional and nullable. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of + assets, where one + + (Base) is priced in terms of the other (Quote) + type: object + off_chain_ticker: + description: >- + OffChainTicker is the off-chain representation of the + ticker i.e. BTC/USD. + + The off-chain ticker is unique to a given provider and is + used to fetch the + + price of the ticker from the provider. + type: string + type: object + type: array + ticker: + description: >- + Ticker represents a price feed for a given asset pair i.e. + BTC/USD. The + + price feed is scaled to a number of decimal places and has a + minimum number + + of providers required to consider the ticker valid. properties: - duplicate_vote_evidence: - description: >- - DuplicateVoteEvidence contains evidence of a validator - signed two conflicting votes. + currency_pair: + description: CurrencyPair is the currency pair for this ticker. properties: - timestamp: - format: date-time - type: string - total_voting_power: - format: int64 + Base: type: string - validator_power: - format: int64 + Quote: type: string - vote_a: - description: >- - Vote represents a prevote or precommit vote from - validators for + title: >- + CurrencyPair is the standard representation of a pair of + assets, where one - consensus. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - extension: - description: >- - Vote extension provided by the application. Only - valid for precommit + (Base) is priced in terms of the other (Quote) + type: object + decimals: + description: >- + Decimals is the number of decimal places for the ticker. The + number of - messages. - format: byte - type: string - extension_signature: - description: >- - Vote extension signature by the validator if they - participated in + decimal places is used to convert the price to a + human-readable format. + format: uint64 + type: string + enabled: + description: >- + Enabled is the flag that denotes if the Ticker is enabled + for price - consensus for the associated block. + fetching by an oracle. + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes any extra + configuration - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: - description: >- - Vote signature by the validator if they participated - in consensus for the + for the given ticker. + type: string + min_provider_count: + description: >- + MinProviderCount is the minimum number of providers required + to consider - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: >- - SignedMsgType is a type of signed message in the - consensus. + the ticker valid. + format: uint64 + type: string + type: object + type: object + description: >- + Markets is the full list of tickers and their associated + configurations - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL - type: string - validator_address: - format: byte - type: string - validator_index: - format: int32 - type: integer - type: object - vote_b: - description: >- - Vote represents a prevote or precommit vote from - validators for + to be stored on-chain. + type: object + type: object + slinky.marketmap.v1.MarketMapResponse: + description: MarketMapResponse is the query response for the MarketMap query. + properties: + chain_id: + description: ChainId is the chain identifier for the market map. + type: string + last_updated: + description: >- + LastUpdated is the last block height that the market map was updated. - consensus. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - extension: - description: >- - Vote extension provided by the application. Only - valid for precommit + This field can be used as an optimization for clients checking if + there - messages. - format: byte - type: string - extension_signature: - description: >- - Vote extension signature by the validator if they - participated in + is a new update to the map. + format: uint64 + type: string + market_map: + description: >- + MarketMap defines the global set of market configurations for all + providers - consensus for the associated block. + and markets. + properties: + markets: + additionalProperties: + description: >- + Market encapsulates a Ticker and its provider-specific + configuration. + properties: + provider_configs: + description: >- + ProviderConfigs is the list of provider-specific configs for + this Market. + items: + properties: + invert: + title: >- + Invert is a boolean indicating if the BASE and QUOTE + of the market should - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: - description: >- - Vote signature by the validator if they participated - in consensus for the + be inverted. i.e. BASE -> QUOTE, QUOTE -> BASE + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes any + extra configuration - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: >- - SignedMsgType is a type of signed message in the - consensus. + for the given provider config. + type: string + name: + description: >- + Name corresponds to the name of the provider for which + the configuration is - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL + being set. + type: string + normalize_by_pair: + description: >- + NormalizeByPair is the currency pair for this ticker + to be normalized by. + + For example, if the desired Ticker is BTC/USD, this + market could be reached + + using: OffChainTicker = BTC/USDT NormalizeByPair = + USDT/USD This field is + + optional and nullable. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair + of assets, where one + + (Base) is priced in terms of the other (Quote) + type: object + off_chain_ticker: + description: >- + OffChainTicker is the off-chain representation of the + ticker i.e. BTC/USD. + + The off-chain ticker is unique to a given provider and + is used to fetch the + + price of the ticker from the provider. + type: string + type: object + type: array + ticker: + description: >- + Ticker represents a price feed for a given asset pair i.e. + BTC/USD. The + + price feed is scaled to a number of decimal places and has a + minimum number + + of providers required to consider the ticker valid. + properties: + currency_pair: + description: CurrencyPair is the currency pair for this ticker. + properties: + Base: type: string - validator_address: - format: byte + Quote: type: string - validator_index: - format: int32 - type: integer + title: >- + CurrencyPair is the standard representation of a pair of + assets, where one + + (Base) is priced in terms of the other (Quote) type: object + decimals: + description: >- + Decimals is the number of decimal places for the ticker. + The number of + + decimal places is used to convert the price to a + human-readable format. + format: uint64 + type: string + enabled: + description: >- + Enabled is the flag that denotes if the Ticker is + enabled for price + + fetching by an oracle. + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes any extra + configuration + + for the given ticker. + type: string + min_provider_count: + description: >- + MinProviderCount is the minimum number of providers + required to consider + + the ticker valid. + format: uint64 + type: string type: object - light_client_attack_evidence: + type: object + description: >- + Markets is the full list of tickers and their associated + configurations + + to be stored on-chain. + type: object + type: object + type: object + slinky.marketmap.v1.MarketResponse: + description: MarketResponse is the query response for the Market query. + properties: + market: + description: Market encapsulates a Ticker and its provider-specific configuration. + properties: + provider_configs: + description: >- + ProviderConfigs is the list of provider-specific configs for this + Market. + items: + properties: + invert: + title: >- + Invert is a boolean indicating if the BASE and QUOTE of the + market should + + be inverted. i.e. BASE -> QUOTE, QUOTE -> BASE + type: boolean + metadata_JSON: description: >- - LightClientAttackEvidence contains evidence of a set of - validators attempting to mislead a light client. + MetadataJSON is a string of JSON that encodes any extra + configuration + + for the given provider config. + type: string + name: + description: >- + Name corresponds to the name of the provider for which the + configuration is + + being set. + type: string + normalize_by_pair: + description: >- + NormalizeByPair is the currency pair for this ticker to be + normalized by. + + For example, if the desired Ticker is BTC/USD, this market + could be reached + + using: OffChainTicker = BTC/USDT NormalizeByPair = USDT/USD + This field is + + optional and nullable. properties: - byzantine_validators: - items: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: >- - PublicKey defines the keys available for use with - Validators - type: object - voting_power: - format: int64 - type: string - type: object - type: array - common_height: - format: int64 - type: string - conflicting_block: - properties: - signed_header: - properties: - commit: - description: >- - Commit contains the evidence that a block was - committed by a set of validators. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - height: - format: int64 - type: string - round: - format: int32 - type: integer - signatures: - items: - description: >- - CommitSig is a part of the Vote included - in a Commit. - properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: >- - BlockIdFlag indicates which BlockID the - signature is for - type: string - signature: - format: byte - type: string - timestamp: - format: date-time - type: string - validator_address: - format: byte - type: string - type: object - type: array - type: object - header: - description: Header defines the structure of a block header. - properties: - app_hash: - format: byte - type: string - chain_id: - type: string - consensus_hash: - format: byte - type: string - data_hash: - format: byte - type: string - evidence_hash: - format: byte - title: consensus info - type: string - height: - format: int64 - type: string - last_block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - last_commit_hash: - format: byte - title: hashes of block data - type: string - last_results_hash: - format: byte - type: string - next_validators_hash: - format: byte - type: string - proposer_address: - format: byte - type: string - time: - format: date-time - type: string - validators_hash: - format: byte - title: >- - hashes from the app output from the prev - block - type: string - version: - title: basic block info - description: >- - Consensus captures the consensus rules for - processing a block in the blockchain, - - including all blockchain data structures and - the rules of the application's - - state transition machine. - properties: - app: - format: uint64 - type: string - block: - format: uint64 - type: string - type: object - type: object - type: object - validator_set: - properties: - proposer: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: >- - PublicKey defines the keys available for use - with Validators - type: object - voting_power: - format: int64 - type: string - type: object - total_voting_power: - format: int64 - type: string - validators: - items: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: >- - PublicKey defines the keys available for - use with Validators - type: object - voting_power: - format: int64 - type: string - type: object - type: array - type: object - type: object - timestamp: - format: date-time + Base: type: string - total_voting_power: - format: int64 + Quote: type: string + title: >- + CurrencyPair is the standard representation of a pair of + assets, where one + + (Base) is priced in terms of the other (Quote) type: object + off_chain_ticker: + description: >- + OffChainTicker is the off-chain representation of the ticker + i.e. BTC/USD. + + The off-chain ticker is unique to a given provider and is + used to fetch the + + price of the ticker from the provider. + type: string type: object type: array - type: object - header: - description: Header defines the structure of a block header. - properties: - app_hash: - format: byte - type: string - chain_id: - type: string - consensus_hash: - format: byte - type: string - data_hash: - format: byte - type: string - evidence_hash: - format: byte - title: consensus info - type: string - height: - format: int64 - type: string - last_block_id: + ticker: + description: >- + Ticker represents a price feed for a given asset pair i.e. + BTC/USD. The + + price feed is scaled to a number of decimal places and has a + minimum number + + of providers required to consider the ticker valid. properties: - hash: - format: byte - type: string - part_set_header: + currency_pair: + description: CurrencyPair is the currency pair for this ticker. properties: - hash: - format: byte + Base: type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - last_commit_hash: - format: byte - title: hashes of block data - type: string - last_results_hash: - format: byte - type: string - next_validators_hash: - format: byte - type: string - proposer_address: - format: byte - type: string - time: - format: date-time - type: string - validators_hash: - format: byte - title: hashes from the app output from the prev block - type: string - version: - title: basic block info - description: >- - Consensus captures the consensus rules for processing a block in - the blockchain, + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of + assets, where one - including all blockchain data structures and the rules of the - application's + (Base) is priced in terms of the other (Quote) + type: object + decimals: + description: >- + Decimals is the number of decimal places for the ticker. The + number of - state transition machine. - properties: - app: + decimal places is used to convert the price to a + human-readable format. format: uint64 type: string - block: + enabled: + description: >- + Enabled is the flag that denotes if the Ticker is enabled for + price + + fetching by an oracle. + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes any extra + configuration + + for the given ticker. + type: string + min_provider_count: + description: >- + MinProviderCount is the minimum number of providers required + to consider + + the ticker valid. format: uint64 type: string type: object type: object - last_commit: + type: object + slinky.marketmap.v1.Params: + description: Params defines the parameters for the x/marketmap module. + properties: + admin: description: >- - Commit contains the evidence that a block was committed by a set of - validators. + Admin is an address that can remove addresses from the + MarketAuthorities + + list. Only governance can add to the MarketAuthorities or change the + Admin. + type: string + market_authorities: + description: |- + MarketAuthorities is the list of authority accounts that are able to + control updating the marketmap. + items: + type: string + type: array + type: object + slinky.marketmap.v1.ParamsResponse: + description: ParamsResponse is the response type for the Query/Params RPC method. + properties: + params: + description: Params defines the parameters for the x/marketmap module. properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - height: - format: int64 + admin: + description: >- + Admin is an address that can remove addresses from the + MarketAuthorities + + list. Only governance can add to the MarketAuthorities or change + the Admin. type: string - round: - format: int32 - type: integer - signatures: + market_authorities: + description: >- + MarketAuthorities is the list of authority accounts that are able + to + + control updating the marketmap. items: - description: CommitSig is a part of the Vote included in a Commit. - properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: BlockIdFlag indicates which BlockID the signature is for - type: string - signature: - format: byte - type: string - timestamp: - format: date-time - type: string - validator_address: - format: byte - type: string - type: object + type: string type: array type: object type: object - tendermint.types.BlockID: + slinky.marketmap.v1.ProviderConfig: properties: - hash: - format: byte + invert: + title: >- + Invert is a boolean indicating if the BASE and QUOTE of the market + should + + be inverted. i.e. BASE -> QUOTE, QUOTE -> BASE + type: boolean + metadata_JSON: + description: |- + MetadataJSON is a string of JSON that encodes any extra configuration + for the given provider config. type: string - part_set_header: + name: + description: >- + Name corresponds to the name of the provider for which the + configuration is + + being set. + type: string + normalize_by_pair: + description: >- + NormalizeByPair is the currency pair for this ticker to be normalized + by. + + For example, if the desired Ticker is BTC/USD, this market could be + reached + + using: OffChainTicker = BTC/USDT NormalizeByPair = USDT/USD This field + is + + optional and nullable. properties: - hash: - format: byte + Base: type: string - total: - format: int64 - type: integer - title: PartsetHeader + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of assets, where + one + + (Base) is priced in terms of the other (Quote) type: object - title: BlockID - type: object - tendermint.types.BlockIDFlag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: BlockIdFlag indicates which BlockID the signature is for - type: string - tendermint.types.BlockParams: - description: BlockParams contains limits on the block size. - properties: - max_bytes: - format: int64 - title: |- - Max block size, in bytes. - Note: must be greater than 0 - type: string - max_gas: - format: int64 - title: |- - Max gas per block. - Note: must be greater or equal to -1 + off_chain_ticker: + description: >- + OffChainTicker is the off-chain representation of the ticker i.e. + BTC/USD. + + The off-chain ticker is unique to a given provider and is used to + fetch the + + price of the ticker from the provider. type: string type: object - tendermint.types.Commit: + slinky.marketmap.v1.Ticker: description: >- - Commit contains the evidence that a block was committed by a set of - validators. + Ticker represents a price feed for a given asset pair i.e. BTC/USD. The + price + + feed is scaled to a number of decimal places and has a minimum number of + + providers required to consider the ticker valid. properties: - block_id: + currency_pair: + description: CurrencyPair is the currency pair for this ticker. properties: - hash: - format: byte + Base: type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of assets, where + one + + (Base) is priced in terms of the other (Quote) type: object - height: - format: int64 + decimals: + description: >- + Decimals is the number of decimal places for the ticker. The number of + + decimal places is used to convert the price to a human-readable + format. + format: uint64 type: string - round: - format: int32 - type: integer - signatures: + enabled: + description: |- + Enabled is the flag that denotes if the Ticker is enabled for price + fetching by an oracle. + type: boolean + metadata_JSON: + description: |- + MetadataJSON is a string of JSON that encodes any extra configuration + for the given ticker. + type: string + min_provider_count: + description: >- + MinProviderCount is the minimum number of providers required to + consider + + the ticker valid. + format: uint64 + type: string + type: object + slinky.oracle.v1.GetAllCurrencyPairsResponse: + description: |- + GetAllCurrencyPairsResponse returns all CurrencyPairs that the module is + currently tracking. + properties: + currency_pairs: items: - description: CommitSig is a part of the Vote included in a Commit. properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: BlockIdFlag indicates which BlockID the signature is for + Base: type: string - signature: - format: byte + Quote: type: string - timestamp: - format: date-time + title: >- + CurrencyPair is the standard representation of a pair of assets, + where one + + (Base) is priced in terms of the other (Quote) + type: object + type: array + type: object + slinky.oracle.v1.GetCurrencyPairMappingResponse: + description: >- + GetCurrencyPairMappingResponse is the GetCurrencyPairMapping response + type. + properties: + currency_pair_mapping: + additionalProperties: + properties: + Base: type: string - validator_address: - format: byte + Quote: type: string + title: >- + CurrencyPair is the standard representation of a pair of assets, + where one + + (Base) is priced in terms of the other (Quote) type: object - type: array + description: >- + currency_pair_mapping is a mapping of the id representing the currency + pair + + to the currency pair itself. + type: object type: object - tendermint.types.CommitSig: - description: CommitSig is a part of the Vote included in a Commit. + slinky.oracle.v1.GetPriceResponse: + description: >- + GetPriceResponse is the response from the GetPrice grpc method exposed + from + + the x/oracle query service. properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: BlockIdFlag indicates which BlockID the signature is for - type: string - signature: - format: byte + decimals: + description: |- + decimals represents the number of decimals that the quote-price is + represented in. For Pairs where ETHEREUM is the quote this will be 18, + otherwise it will be 8. + format: uint64 type: string - timestamp: - format: date-time + id: + description: ID represents the identifier for the CurrencyPair. + format: uint64 type: string - validator_address: - format: byte + nonce: + format: uint64 + title: nonce represents the nonce for the CurrencyPair if it exists in state type: string - type: object - tendermint.types.ConsensusParams: - description: |- - ConsensusParams contains consensus critical parameters that determine the - validity of blocks. - properties: - abci: - description: >- - ABCIParams configure functionality specific to the Application - Blockchain Interface. + price: + title: |- + QuotePrice represents the quote-price for the CurrencyPair given in + GetPriceRequest (possibly nil if no update has been made) properties: - vote_extensions_enable_height: - description: >- - vote_extensions_enable_height configures the first height during - which + block_height: + format: uint64 + title: BlockHeight is height of block mentioned above + type: string + block_timestamp: + format: date-time + title: >- + BlockTimestamp tracks the block height associated with this price + update. - vote extensions will be enabled. During this specified height, and - for all + We include block timestamp alongside the price to ensure that + smart - subsequent heights, precommit messages that do not contain valid - extension data + contracts and applications are not utilizing stale oracle prices + type: string + price: + type: string + type: object + type: object + slinky.oracle.v1.GetPricesResponse: + description: >- + GetPricesResponse is the response from the GetPrices grpc method exposed + from - will be considered invalid. Prior to this height, vote extensions - will not + the x/oracle query service. + properties: + prices: + items: + description: >- + GetPriceResponse is the response from the GetPrice grpc method + exposed from - be used or accepted by validators on the network. + the x/oracle query service. + properties: + decimals: + description: >- + decimals represents the number of decimals that the quote-price + is + represented in. For Pairs where ETHEREUM is the quote this will + be 18, - Once enabled, vote extensions will be created by the application - in ExtendVote, + otherwise it will be 8. + format: uint64 + type: string + id: + description: ID represents the identifier for the CurrencyPair. + format: uint64 + type: string + nonce: + format: uint64 + title: >- + nonce represents the nonce for the CurrencyPair if it exists in + state + type: string + price: + title: >- + QuotePrice represents the quote-price for the CurrencyPair given + in - passed to the application for validation in VerifyVoteExtension - and given + GetPriceRequest (possibly nil if no update has been made) + properties: + block_height: + format: uint64 + title: BlockHeight is height of block mentioned above + type: string + block_timestamp: + format: date-time + title: >- + BlockTimestamp tracks the block height associated with this + price update. - to the application to use when proposing a block during - PrepareProposal. - format: int64 - type: string - type: object - block: - description: BlockParams contains limits on the block size. - properties: - max_bytes: - format: int64 - title: |- - Max block size, in bytes. - Note: must be greater than 0 - type: string - max_gas: - format: int64 - title: |- - Max gas per block. - Note: must be greater or equal to -1 - type: string - type: object - evidence: - description: EvidenceParams determine how we handle evidence of malfeasance. - properties: - max_age_duration: - description: >- - Max age of evidence, in time. + We include block timestamp alongside the price to ensure + that smart + contracts and applications are not utilizing stale oracle + prices + type: string + price: + type: string + type: object + type: object + type: array + type: object + slinky.oracle.v1.QuotePrice: + properties: + block_height: + format: uint64 + title: BlockHeight is height of block mentioned above + type: string + block_timestamp: + format: date-time + title: >- + BlockTimestamp tracks the block height associated with this price + update. - It should correspond with an app's "unbonding period" or other - similar + We include block timestamp alongside the price to ensure that smart - mechanism for handling [Nothing-At-Stake + contracts and applications are not utilizing stale oracle prices + type: string + price: + type: string + title: >- + QuotePrice is the representation of the aggregated prices for a + CurrencyPair, - attacks](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. + where price represents the price of Base in terms of Quote + type: object + slinky.sla.v1.GetAllSLAsResponse: + description: |- + QueryAllSLAsResponse is the response type for the Query/GetAllSLAs RPC + method. + properties: + slas: + items: + description: >- + PriceFeedSLA defines the the desired SLA for a given set of price + feeds. A + price feed is defined to be a set of price prices for the same + (currency - The basic formula for calculating this is: MaxAgeDuration / - {average block + pair, validator). + properties: + expected_uptime: + description: >- + ExpectedUptime is the expected uptime for the given validator + and price - time}. - format: int64 - type: string - max_bytes: - format: int64 - title: >- - This sets the maximum size of total evidence in bytes that can be - committed in a single block. + feed. + type: string + frequency: + description: Frequency is the frequency at which we will check the SLA. + format: uint64 + type: string + id: + description: ID is the unique identifier for the SLA. + type: string + maximum_viable_window: + description: >- + MaximumViableWindow is the maximum time window that we are + interested - and should fall comfortably under the max block bytes. + for the SLA. This is used to determine the moving window of + blocks that - Default is 1048576 or 1MB - type: string - type: object - validator: - description: |- - ValidatorParams restrict the public key types validators can use. - NOTE: uses ABCI pubkey naming, not Amino names. - properties: - pub_key_types: - items: + we are interested in. + format: uint64 type: string - type: array - type: object - version: - description: VersionParams contains the ABCI application version. - properties: - app: - format: uint64 - type: string - type: object + minimum_block_updates: + description: |- + MinimumBlockUpdates is the minimum number of blocks that the + validator had to have voted on in the maximum viable window + in order to be considered for the SLA. + format: uint64 + type: string + slash_constant: + description: >- + SlashConstant is the constant by which we will multiply the + deviation from + + the expected uptime. + type: string + type: object + type: array type: object - tendermint.types.Data: + slinky.sla.v1.GetPriceFeedsResponse: + description: >- + QueryGetPriceFeedsResponse is the response type for the + Query/GetPriceFeeds + + RPC method. properties: - txs: - description: >- - Txs that will be applied by state @ block.Height+1. + price_feeds: + description: PriceFeeds defines the price feeds for the given SLA. + items: + description: >- + PriceFeed defines the object type that will be utilized to monitor + how - NOTE: not all txs here are valid. We're just agreeing on the order - first. + frequently validators are voting with price updates across the + network. + properties: + currency_pair: + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of assets, + where one - This means that block.AppHash does not include these txs. - items: - format: byte - type: string + (Base) is priced in terms of the other (Quote) + type: object + description: >- + CurrencyPair represents the currency pair that this SLA + corresponds to. + id: + description: >- + ID corresponds to the SLA ID that this price feed corresponds + to. + type: string + inclusion_map: + description: >- + InclusionMap represents the relevant moving window of blocks + that the + + validator has voted on. + format: byte + type: string + index: + description: Index corresponds to the current index into the bitmap. + format: uint64 + type: string + maximum_viable_window: + description: >- + MaximumViableWindow represents the maximum number of blocks that + can be + + represented by the bit map. + format: uint64 + type: string + update_map: + description: >- + UpdateMap represents the relevant moving window of price feed + updates. + format: byte + type: string + validator: + description: Validator represents the validator that this SLA corresponds to. + format: byte + type: string + type: object type: array - title: Data contains the set of transactions included in the block type: object - tendermint.types.DuplicateVoteEvidence: - description: >- - DuplicateVoteEvidence contains evidence of a validator signed two - conflicting votes. + slinky.sla.v1.Params: + description: Params defines the parameters for the sla module. properties: - timestamp: - format: date-time + enabled: + description: Enabled is a flag to enable or disable the sla module. + type: boolean + type: object + slinky.sla.v1.ParamsResponse: + description: QueryParamsResponse is the response type for the Query/Params RPC method. + properties: + params: + description: Params defines the parameters for the sla module. + properties: + enabled: + description: Enabled is a flag to enable or disable the sla module. + type: boolean + type: object + type: object + slinky.sla.v1.PriceFeed: + description: |- + PriceFeed defines the object type that will be utilized to monitor how + frequently validators are voting with price updates across the network. + properties: + currency_pair: + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of assets, where + one + + (Base) is priced in terms of the other (Quote) + type: object + description: >- + CurrencyPair represents the currency pair that this SLA corresponds + to. + id: + description: ID corresponds to the SLA ID that this price feed corresponds to. type: string - total_voting_power: - format: int64 + inclusion_map: + description: |- + InclusionMap represents the relevant moving window of blocks that the + validator has voted on. + format: byte type: string - validator_power: - format: int64 + index: + description: Index corresponds to the current index into the bitmap. + format: uint64 type: string - vote_a: - description: |- - Vote represents a prevote or precommit vote from validators for - consensus. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - extension: - description: >- - Vote extension provided by the application. Only valid for - precommit + maximum_viable_window: + description: >- + MaximumViableWindow represents the maximum number of blocks that can + be - messages. - format: byte - type: string - extension_signature: - description: |- - Vote extension signature by the validator if they participated in - consensus for the associated block. - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: - description: >- - Vote signature by the validator if they participated in consensus - for the + represented by the bit map. + format: uint64 + type: string + update_map: + description: UpdateMap represents the relevant moving window of price feed updates. + format: byte + type: string + validator: + description: Validator represents the validator that this SLA corresponds to. + format: byte + type: string + type: object + slinky.sla.v1.PriceFeedSLA: + description: |- + PriceFeedSLA defines the the desired SLA for a given set of price feeds. A + price feed is defined to be a set of price prices for the same (currency + pair, validator). + properties: + expected_uptime: + description: >- + ExpectedUptime is the expected uptime for the given validator and + price - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: |- - SignedMsgType is a type of signed message in the consensus. + feed. + type: string + frequency: + description: Frequency is the frequency at which we will check the SLA. + format: uint64 + type: string + id: + description: ID is the unique identifier for the SLA. + type: string + maximum_viable_window: + description: >- + MaximumViableWindow is the maximum time window that we are interested - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL - type: string - validator_address: - format: byte - type: string - validator_index: - format: int32 - type: integer - type: object - vote_b: + for the SLA. This is used to determine the moving window of blocks + that + + we are interested in. + format: uint64 + type: string + minimum_block_updates: description: |- - Vote represents a prevote or precommit vote from validators for - consensus. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - extension: - description: >- - Vote extension provided by the application. Only valid for - precommit + MinimumBlockUpdates is the minimum number of blocks that the + validator had to have voted on in the maximum viable window + in order to be considered for the SLA. + format: uint64 + type: string + slash_constant: + description: >- + SlashConstant is the constant by which we will multiply the deviation + from - messages. - format: byte - type: string - extension_signature: - description: |- - Vote extension signature by the validator if they participated in - consensus for the associated block. - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: - description: >- - Vote signature by the validator if they participated in consensus - for the + the expected uptime. + type: string + type: object + slinky.types.v1.CurrencyPair: + properties: + Base: + type: string + Quote: + type: string + title: |- + CurrencyPair is the standard representation of a pair of assets, where one + (Base) is priced in terms of the other (Quote) + type: object + tendermint.abci.Event: + description: |- + Event allows application developers to attach additional information to + ResponseFinalizeBlock and ResponseCheckTx. + Later, transactions may be queried using these events. + properties: + attributes: + items: + description: EventAttribute is a single key-value pair, associated with an event. + properties: + index: + type: boolean + key: + type: string + value: + type: string + type: object + type: array + type: + type: string + type: object + tendermint.abci.EventAttribute: + description: EventAttribute is a single key-value pair, associated with an event. + properties: + index: + type: boolean + key: + type: string + value: + type: string + type: object + tendermint.abci.ExecTxResult: + description: >- + ExecTxResult contains results of executing one individual transaction. - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: |- - SignedMsgType is a type of signed message in the consensus. - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL - type: string - validator_address: - format: byte - type: string - validator_index: - format: int32 - type: integer - type: object - type: object - tendermint.types.Evidence: + * Its structure is equivalent to #ResponseDeliverTx which will be + deprecated/deleted properties: - duplicate_vote_evidence: - description: >- - DuplicateVoteEvidence contains evidence of a validator signed two - conflicting votes. - properties: - timestamp: - format: date-time - type: string - total_voting_power: - format: int64 - type: string - validator_power: - format: int64 - type: string - vote_a: - description: |- - Vote represents a prevote or precommit vote from validators for - consensus. - properties: - block_id: + code: + format: int64 + type: integer + codespace: + type: string + data: + format: byte + type: string + events: + items: + description: >- + Event allows application developers to attach additional information + to + + ResponseFinalizeBlock and ResponseCheckTx. + + Later, transactions may be queried using these events. + properties: + attributes: + items: + description: >- + EventAttribute is a single key-value pair, associated with an + event. properties: - hash: - format: byte + index: + type: boolean + key: + type: string + value: type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID type: object - extension: - description: >- - Vote extension provided by the application. Only valid for - precommit + type: array + type: + type: string + type: object + type: array + gas_used: + format: int64 + type: string + gas_wanted: + format: int64 + type: string + info: + type: string + log: + type: string + type: object + tendermint.abci.Validator: + properties: + address: + format: byte + type: string + power: + format: int64 + title: PubKey pub_key = 2 [(gogoproto.nullable)=false]; + type: string + type: object + tendermint.crypto.Proof: + properties: + aunts: + items: + format: byte + type: string + type: array + index: + format: int64 + type: string + leaf_hash: + format: byte + type: string + total: + format: int64 + type: string + type: object + tendermint.crypto.ProofOp: + properties: + data: + format: byte + type: string + key: + format: byte + type: string + type: + type: string + title: |- + ProofOp defines an operation used for calculating Merkle root + The data could be arbitrary format, providing nessecary data + for example neighbouring node hash + type: object + tendermint.crypto.ProofOps: + properties: + ops: + items: + properties: + data: + format: byte + type: string + key: + format: byte + type: string + type: + type: string + title: |- + ProofOp defines an operation used for calculating Merkle root + The data could be arbitrary format, providing nessecary data + for example neighbouring node hash + type: object + type: array + title: ProofOps is Merkle proof defined by the list of ProofOps + type: object + tendermint.crypto.PublicKey: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: PublicKey defines the keys available for use with Validators + type: object + tendermint.p2p.DefaultNodeInfo: + properties: + channels: + format: byte + type: string + default_node_id: + type: string + listen_addr: + type: string + moniker: + type: string + network: + type: string + other: + properties: + rpc_address: + type: string + tx_index: + type: string + type: object + protocol_version: + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + p2p: + format: uint64 + type: string + type: object + version: + type: string + type: object + tendermint.p2p.DefaultNodeInfoOther: + properties: + rpc_address: + type: string + tx_index: + type: string + type: object + tendermint.p2p.ProtocolVersion: + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + p2p: + format: uint64 + type: string + type: object + tendermint.types.ABCIParams: + description: >- + ABCIParams configure functionality specific to the Application Blockchain + Interface. + properties: + vote_extensions_enable_height: + description: >- + vote_extensions_enable_height configures the first height during which - messages. - format: byte - type: string - extension_signature: - description: >- - Vote extension signature by the validator if they participated - in + vote extensions will be enabled. During this specified height, and for + all - consensus for the associated block. + subsequent heights, precommit messages that do not contain valid + extension data - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: - description: >- - Vote signature by the validator if they participated in - consensus for the + will be considered invalid. Prior to this height, vote extensions will + not - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: |- - SignedMsgType is a type of signed message in the consensus. + be used or accepted by validators on the network. - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL - type: string - validator_address: - format: byte - type: string - validator_index: - format: int32 - type: integer - type: object - vote_b: - description: |- - Vote represents a prevote or precommit vote from validators for - consensus. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - extension: - description: >- - Vote extension provided by the application. Only valid for - precommit - messages. - format: byte - type: string - extension_signature: - description: >- - Vote extension signature by the validator if they participated - in + Once enabled, vote extensions will be created by the application in + ExtendVote, - consensus for the associated block. + passed to the application for validation in VerifyVoteExtension and + given - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: - description: >- - Vote signature by the validator if they participated in - consensus for the + to the application to use when proposing a block during + PrepareProposal. + format: int64 + type: string + type: object + tendermint.types.Block: + properties: + data: + properties: + txs: + description: >- + Txs that will be applied by state @ block.Height+1. - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: |- - SignedMsgType is a type of signed message in the consensus. + NOTE: not all txs here are valid. We're just agreeing on the + order first. - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL - type: string - validator_address: - format: byte - type: string - validator_index: - format: int32 - type: integer - type: object + This means that block.AppHash does not include these txs. + items: + format: byte + type: string + type: array + title: Data contains the set of transactions included in the block type: object - light_client_attack_evidence: - description: >- - LightClientAttackEvidence contains evidence of a set of validators - attempting to mislead a light client. + evidence: properties: - byzantine_validators: + evidence: items: properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: + duplicate_vote_evidence: + description: >- + DuplicateVoteEvidence contains evidence of a validator + signed two conflicting votes. properties: - ed25519: - format: byte + timestamp: + format: date-time type: string - secp256k1: - format: byte + total_voting_power: + format: int64 type: string - title: PublicKey defines the keys available for use with Validators - type: object - voting_power: - format: int64 - type: string - type: object - type: array - common_height: - format: int64 - type: string - conflicting_block: - properties: - signed_header: - properties: - commit: - description: >- - Commit contains the evidence that a block was committed by - a set of validators. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - height: - format: int64 - type: string - round: - format: int32 - type: integer - signatures: - items: - description: >- - CommitSig is a part of the Vote included in a - Commit. + validator_power: + format: int64 + type: string + vote_a: + description: >- + Vote represents a prevote or precommit vote from + validators for + + consensus. + properties: + block_id: properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: >- - BlockIdFlag indicates which BlockID the - signature is for - type: string - signature: - format: byte - type: string - timestamp: - format: date-time - type: string - validator_address: + hash: format: byte type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID type: object - type: array - type: object - header: - description: Header defines the structure of a block header. - properties: - app_hash: - format: byte - type: string - chain_id: - type: string - consensus_hash: - format: byte - type: string - data_hash: - format: byte - type: string - evidence_hash: - format: byte - title: consensus info - type: string - height: - format: int64 - type: string - last_block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - last_commit_hash: - format: byte - title: hashes of block data - type: string - last_results_hash: - format: byte - type: string - next_validators_hash: - format: byte - type: string - proposer_address: - format: byte - type: string - time: - format: date-time - type: string - validators_hash: - format: byte - title: hashes from the app output from the prev block - type: string - version: - title: basic block info - description: >- - Consensus captures the consensus rules for processing - a block in the blockchain, + extension: + description: >- + Vote extension provided by the application. Only + valid for precommit - including all blockchain data structures and the rules - of the application's + messages. + format: byte + type: string + extension_signature: + description: >- + Vote extension signature by the validator if they + participated in - state transition machine. - properties: - app: - format: uint64 - type: string - block: - format: uint64 - type: string - type: object - type: object - type: object - validator_set: - properties: - proposer: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: >- - PublicKey defines the keys available for use with - Validators - type: object - voting_power: - format: int64 - type: string - type: object - total_voting_power: - format: int64 - type: string - validators: - items: - properties: - address: + consensus for the associated block. + + Only valid for precommit messages. format: byte type: string - proposer_priority: + height: format: int64 type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: >- - PublicKey defines the keys available for use with - Validators - type: object - voting_power: - format: int64 + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they participated + in consensus for the + + associated block. + format: byte type: string - type: object - type: array - type: object - type: object - timestamp: - format: date-time - type: string - total_voting_power: - format: int64 - type: string - type: object - type: object - tendermint.types.EvidenceList: - properties: - evidence: - items: - properties: - duplicate_vote_evidence: - description: >- - DuplicateVoteEvidence contains evidence of a validator signed - two conflicting votes. - properties: - timestamp: - format: date-time - type: string - total_voting_power: - format: int64 - type: string - validator_power: - format: int64 - type: string - vote_a: - description: >- - Vote represents a prevote or precommit vote from validators - for + timestamp: + format: date-time + type: string + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. - consensus. - properties: - block_id: - properties: - hash: + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: format: byte type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID + validator_index: + format: int32 + type: integer type: object - extension: - description: >- - Vote extension provided by the application. Only valid - for precommit - - messages. - format: byte - type: string - extension_signature: - description: >- - Vote extension signature by the validator if they - participated in - - consensus for the associated block. - - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: + vote_b: description: >- - Vote signature by the validator if they participated in - consensus for the + Vote represents a prevote or precommit vote from + validators for - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: >- - SignedMsgType is a type of signed message in the consensus. - - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL - type: string - validator_address: - format: byte - type: string - validator_index: - format: int32 - type: integer - type: object - vote_b: - description: >- - Vote represents a prevote or precommit vote from validators - for - - consensus. - properties: - block_id: properties: - hash: - format: byte - type: string - part_set_header: + block_id: properties: hash: format: byte type: string - total: - format: int64 - type: integer - title: PartsetHeader + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID type: object - title: BlockID - type: object - extension: - description: >- - Vote extension provided by the application. Only valid - for precommit - - messages. - format: byte - type: string - extension_signature: - description: >- - Vote extension signature by the validator if they - participated in + extension: + description: >- + Vote extension provided by the application. Only + valid for precommit - consensus for the associated block. + messages. + format: byte + type: string + extension_signature: + description: >- + Vote extension signature by the validator if they + participated in - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: - description: >- - Vote signature by the validator if they participated in - consensus for the + consensus for the associated block. - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: >- - SignedMsgType is a type of signed message in the - consensus. + Only valid for precommit messages. + format: byte + type: string + height: + format: int64 + type: string + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they participated + in consensus for the - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL - type: string - validator_address: - format: byte - type: string - validator_index: - format: int32 - type: integer + associated block. + format: byte + type: string + timestamp: + format: date-time + type: string + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: + format: byte + type: string + validator_index: + format: int32 + type: integer + type: object type: object - type: object - light_client_attack_evidence: - description: >- - LightClientAttackEvidence contains evidence of a set of - validators attempting to mislead a light client. - properties: - byzantine_validators: - items: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: + light_client_attack_evidence: + description: >- + LightClientAttackEvidence contains evidence of a set of + validators attempting to mislead a light client. + properties: + byzantine_validators: + items: properties: - ed25519: + address: format: byte type: string - secp256k1: - format: byte + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for use with + Validators + type: object + voting_power: + format: int64 type: string - title: >- - PublicKey defines the keys available for use with - Validators type: object - voting_power: - format: int64 - type: string - type: object - type: array - common_height: - format: int64 - type: string - conflicting_block: - properties: - signed_header: + type: array + common_height: + format: int64 + type: string + conflicting_block: properties: - commit: - description: >- - Commit contains the evidence that a block was - committed by a set of validators. + signed_header: properties: - block_id: + commit: + description: >- + Commit contains the evidence that a block was + committed by a set of validators. properties: - hash: - format: byte - type: string - part_set_header: + block_id: properties: hash: format: byte type: string - total: - format: int64 - type: integer - title: PartsetHeader + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID type: object - title: BlockID + height: + format: int64 + type: string + round: + format: int32 + type: integer + signatures: + items: + description: >- + CommitSig is a part of the Vote included + in a Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: >- + BlockIdFlag indicates which BlockID the + signature is for + type: string + signature: + format: byte + type: string + timestamp: + format: date-time + type: string + validator_address: + format: byte + type: string + type: object + type: array type: object - height: - format: int64 - type: string - round: - format: int32 - type: integer - signatures: - items: - description: >- - CommitSig is a part of the Vote included in a - Commit. - properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: >- - BlockIdFlag indicates which BlockID the - signature is for - type: string - signature: - format: byte - type: string - timestamp: - format: date-time - type: string - validator_address: - format: byte - type: string - type: object - type: array - type: object - header: - description: Header defines the structure of a block header. - properties: - app_hash: - format: byte - type: string - chain_id: - type: string - consensus_hash: - format: byte - type: string - data_hash: - format: byte - type: string - evidence_hash: - format: byte - title: consensus info - type: string - height: - format: int64 - type: string - last_block_id: + header: + description: Header defines the structure of a block header. properties: - hash: + app_hash: format: byte type: string - part_set_header: - properties: + chain_id: + type: string + consensus_hash: + format: byte + type: string + data_hash: + format: byte + type: string + evidence_hash: + format: byte + title: consensus info + type: string + height: + format: int64 + type: string + last_block_id: + properties: hash: format: byte type: string - total: - format: int64 - type: integer - title: PartsetHeader + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID type: object - title: BlockID - type: object - last_commit_hash: - format: byte - title: hashes of block data - type: string - last_results_hash: - format: byte - type: string - next_validators_hash: - format: byte - type: string - proposer_address: - format: byte - type: string - time: - format: date-time - type: string - validators_hash: - format: byte - title: hashes from the app output from the prev block - type: string - version: - title: basic block info - description: >- - Consensus captures the consensus rules for - processing a block in the blockchain, - - including all blockchain data structures and the - rules of the application's - - state transition machine. - properties: - app: - format: uint64 + last_commit_hash: + format: byte + title: hashes of block data type: string - block: - format: uint64 + last_results_hash: + format: byte + type: string + next_validators_hash: + format: byte + type: string + proposer_address: + format: byte type: string + time: + format: date-time + type: string + validators_hash: + format: byte + title: >- + hashes from the app output from the prev + block + type: string + version: + title: basic block info + description: >- + Consensus captures the consensus rules for + processing a block in the blockchain, + + including all blockchain data structures and + the rules of the application's + + state transition machine. + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + type: object type: object type: object - type: object - validator_set: - properties: - proposer: + validator_set: properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: + proposer: properties: - ed25519: + address: format: byte type: string - secp256k1: - format: byte + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for use + with Validators + type: object + voting_power: + format: int64 type: string - title: >- - PublicKey defines the keys available for use - with Validators type: object - voting_power: + total_voting_power: format: int64 type: string - type: object - total_voting_power: - format: int64 - type: string - validators: - items: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: + validators: + items: properties: - ed25519: + address: format: byte type: string - secp256k1: - format: byte + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for + use with Validators + type: object + voting_power: + format: int64 type: string - title: >- - PublicKey defines the keys available for use - with Validators type: object - voting_power: - format: int64 - type: string - type: object - type: array + type: array + type: object type: object + timestamp: + format: date-time + type: string + total_voting_power: + format: int64 + type: string type: object - timestamp: - format: date-time - type: string - total_voting_power: - format: int64 - type: string type: object - type: object - type: array - type: object - tendermint.types.EvidenceParams: - description: EvidenceParams determine how we handle evidence of malfeasance. - properties: - max_age_duration: - description: >- - Max age of evidence, in time. - - - It should correspond with an app's "unbonding period" or other similar - - mechanism for handling [Nothing-At-Stake - - attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). - type: string - max_age_num_blocks: - description: >- - Max age of evidence, in blocks. - - - The basic formula for calculating this is: MaxAgeDuration / {average - block - - time}. - format: int64 - type: string - max_bytes: - format: int64 - title: >- - This sets the maximum size of total evidence in bytes that can be - committed in a single block. - - and should fall comfortably under the max block bytes. - - Default is 1048576 or 1MB - type: string - type: object - tendermint.types.Header: - description: Header defines the structure of a block header. - properties: - app_hash: - format: byte - type: string - chain_id: - type: string - consensus_hash: - format: byte - type: string - data_hash: + type: array + type: object + header: + description: Header defines the structure of a block header. + properties: + app_hash: + format: byte + type: string + chain_id: + type: string + consensus_hash: + format: byte + type: string + data_hash: + format: byte + type: string + evidence_hash: + format: byte + title: consensus info + type: string + height: + format: int64 + type: string + last_block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + last_commit_hash: + format: byte + title: hashes of block data + type: string + last_results_hash: + format: byte + type: string + next_validators_hash: + format: byte + type: string + proposer_address: + format: byte + type: string + time: + format: date-time + type: string + validators_hash: + format: byte + title: hashes from the app output from the prev block + type: string + version: + title: basic block info + description: >- + Consensus captures the consensus rules for processing a block in + the blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + type: object + type: object + last_commit: + description: >- + Commit contains the evidence that a block was committed by a set of + validators. + properties: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + height: + format: int64 + type: string + round: + format: int32 + type: integer + signatures: + items: + description: CommitSig is a part of the Vote included in a Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: BlockIdFlag indicates which BlockID the signature is for + type: string + signature: + format: byte + type: string + timestamp: + format: date-time + type: string + validator_address: + format: byte + type: string + type: object + type: array + type: object + type: object + tendermint.types.BlockID: + properties: + hash: format: byte type: string - evidence_hash: - format: byte - title: consensus info + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + tendermint.types.BlockIDFlag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: BlockIdFlag indicates which BlockID the signature is for + type: string + tendermint.types.BlockParams: + description: BlockParams contains limits on the block size. + properties: + max_bytes: + format: int64 + title: |- + Max block size, in bytes. + Note: must be greater than 0 type: string - height: + max_gas: format: int64 + title: |- + Max gas per block. + Note: must be greater or equal to -1 type: string - last_block_id: + type: object + tendermint.types.Commit: + description: >- + Commit contains the evidence that a block was committed by a set of + validators. + properties: + block_id: properties: hash: format: byte @@ -20686,124 +21391,369 @@ definitions: type: object title: BlockID type: object - last_commit_hash: - format: byte - title: hashes of block data - type: string - last_results_hash: - format: byte + height: + format: int64 type: string - next_validators_hash: - format: byte + round: + format: int32 + type: integer + signatures: + items: + description: CommitSig is a part of the Vote included in a Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: BlockIdFlag indicates which BlockID the signature is for + type: string + signature: + format: byte + type: string + timestamp: + format: date-time + type: string + validator_address: + format: byte + type: string + type: object + type: array + type: object + tendermint.types.CommitSig: + description: CommitSig is a part of the Vote included in a Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: BlockIdFlag indicates which BlockID the signature is for type: string - proposer_address: + signature: format: byte type: string - time: + timestamp: format: date-time type: string - validators_hash: + validator_address: format: byte - title: hashes from the app output from the prev block type: string - version: - title: basic block info + type: object + tendermint.types.ConsensusParams: + description: |- + ConsensusParams contains consensus critical parameters that determine the + validity of blocks. + properties: + abci: description: >- - Consensus captures the consensus rules for processing a block in the - blockchain, - - including all blockchain data structures and the rules of the - application's - - state transition machine. + ABCIParams configure functionality specific to the Application + Blockchain Interface. properties: - app: - format: uint64 + vote_extensions_enable_height: + description: >- + vote_extensions_enable_height configures the first height during + which + + vote extensions will be enabled. During this specified height, and + for all + + subsequent heights, precommit messages that do not contain valid + extension data + + will be considered invalid. Prior to this height, vote extensions + will not + + be used or accepted by validators on the network. + + + Once enabled, vote extensions will be created by the application + in ExtendVote, + + passed to the application for validation in VerifyVoteExtension + and given + + to the application to use when proposing a block during + PrepareProposal. + format: int64 type: string - block: + type: object + block: + description: BlockParams contains limits on the block size. + properties: + max_bytes: + format: int64 + title: |- + Max block size, in bytes. + Note: must be greater than 0 + type: string + max_gas: + format: int64 + title: |- + Max gas per block. + Note: must be greater or equal to -1 + type: string + type: object + evidence: + description: EvidenceParams determine how we handle evidence of malfeasance. + properties: + max_age_duration: + description: >- + Max age of evidence, in time. + + + It should correspond with an app's "unbonding period" or other + similar + + mechanism for handling [Nothing-At-Stake + + attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). + type: string + max_age_num_blocks: + description: >- + Max age of evidence, in blocks. + + + The basic formula for calculating this is: MaxAgeDuration / + {average block + + time}. + format: int64 + type: string + max_bytes: + format: int64 + title: >- + This sets the maximum size of total evidence in bytes that can be + committed in a single block. + + and should fall comfortably under the max block bytes. + + Default is 1048576 or 1MB + type: string + type: object + validator: + description: |- + ValidatorParams restrict the public key types validators can use. + NOTE: uses ABCI pubkey naming, not Amino names. + properties: + pub_key_types: + items: + type: string + type: array + type: object + version: + description: VersionParams contains the ABCI application version. + properties: + app: format: uint64 type: string type: object type: object - tendermint.types.LightBlock: + tendermint.types.Data: properties: - signed_header: + txs: + description: >- + Txs that will be applied by state @ block.Height+1. + + NOTE: not all txs here are valid. We're just agreeing on the order + first. + + This means that block.AppHash does not include these txs. + items: + format: byte + type: string + type: array + title: Data contains the set of transactions included in the block + type: object + tendermint.types.DuplicateVoteEvidence: + description: >- + DuplicateVoteEvidence contains evidence of a validator signed two + conflicting votes. + properties: + timestamp: + format: date-time + type: string + total_voting_power: + format: int64 + type: string + validator_power: + format: int64 + type: string + vote_a: + description: |- + Vote represents a prevote or precommit vote from validators for + consensus. properties: - commit: - description: >- - Commit contains the evidence that a block was committed by a set - of validators. + block_id: properties: - block_id: + hash: + format: byte + type: string + part_set_header: properties: hash: format: byte type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID + total: + format: int64 + type: integer + title: PartsetHeader type: object - height: - format: int64 - type: string - round: - format: int32 - type: integer - signatures: - items: - description: CommitSig is a part of the Vote included in a Commit. - properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: BlockIdFlag indicates which BlockID the signature is for - type: string - signature: - format: byte - type: string - timestamp: - format: date-time - type: string - validator_address: - format: byte - type: string - type: object - type: array + title: BlockID type: object - header: - description: Header defines the structure of a block header. + extension: + description: >- + Vote extension provided by the application. Only valid for + precommit + + messages. + format: byte + type: string + extension_signature: + description: |- + Vote extension signature by the validator if they participated in + consensus for the associated block. + Only valid for precommit messages. + format: byte + type: string + height: + format: int64 + type: string + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they participated in consensus + for the + + associated block. + format: byte + type: string + timestamp: + format: date-time + type: string + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: + format: byte + type: string + validator_index: + format: int32 + type: integer + type: object + vote_b: + description: |- + Vote represents a prevote or precommit vote from validators for + consensus. + properties: + block_id: properties: - app_hash: - format: byte - type: string - chain_id: - type: string - consensus_hash: + hash: format: byte type: string - data_hash: - format: byte - type: string - evidence_hash: - format: byte - title: consensus info - type: string - height: - format: int64 - type: string - last_block_id: + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + extension: + description: >- + Vote extension provided by the application. Only valid for + precommit + + messages. + format: byte + type: string + extension_signature: + description: |- + Vote extension signature by the validator if they participated in + consensus for the associated block. + Only valid for precommit messages. + format: byte + type: string + height: + format: int64 + type: string + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they participated in consensus + for the + + associated block. + format: byte + type: string + timestamp: + format: date-time + type: string + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: + format: byte + type: string + validator_index: + format: int32 + type: integer + type: object + type: object + tendermint.types.Evidence: + properties: + duplicate_vote_evidence: + description: >- + DuplicateVoteEvidence contains evidence of a validator signed two + conflicting votes. + properties: + timestamp: + format: date-time + type: string + total_voting_power: + format: int64 + type: string + validator_power: + format: int64 + type: string + vote_a: + description: |- + Vote represents a prevote or precommit vote from validators for + consensus. + properties: + block_id: properties: hash: format: byte @@ -20820,74 +21770,145 @@ definitions: type: object title: BlockID type: object - last_commit_hash: + extension: + description: >- + Vote extension provided by the application. Only valid for + precommit + + messages. format: byte - title: hashes of block data type: string - last_results_hash: + extension_signature: + description: >- + Vote extension signature by the validator if they participated + in + + consensus for the associated block. + + Only valid for precommit messages. format: byte type: string - next_validators_hash: - format: byte + height: + format: int64 type: string - proposer_address: + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they participated in + consensus for the + + associated block. format: byte type: string - time: + timestamp: format: date-time type: string - validators_hash: + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: format: byte - title: hashes from the app output from the prev block type: string - version: - title: basic block info - description: >- - Consensus captures the consensus rules for processing a block - in the blockchain, - - including all blockchain data structures and the rules of the - application's - - state transition machine. - properties: - app: - format: uint64 - type: string - block: - format: uint64 - type: string - type: object + validator_index: + format: int32 + type: integer type: object - type: object - validator_set: - properties: - proposer: + vote_b: + description: |- + Vote represents a prevote or precommit vote from validators for + consensus. properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: + block_id: properties: - ed25519: - format: byte - type: string - secp256k1: + hash: format: byte type: string - title: PublicKey defines the keys available for use with Validators + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID type: object - voting_power: + extension: + description: >- + Vote extension provided by the application. Only valid for + precommit + + messages. + format: byte + type: string + extension_signature: + description: >- + Vote extension signature by the validator if they participated + in + + consensus for the associated block. + + Only valid for precommit messages. + format: byte + type: string + height: format: int64 type: string + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they participated in + consensus for the + + associated block. + format: byte + type: string + timestamp: + format: date-time + type: string + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: |- + SignedMsgType is a type of signed message in the consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: + format: byte + type: string + validator_index: + format: int32 + type: integer type: object - total_voting_power: - format: int64 - type: string - validators: + type: object + light_client_attack_evidence: + description: >- + LightClientAttackEvidence contains evidence of a set of validators + attempting to mislead a light client. + properties: + byzantine_validators: items: properties: address: @@ -20911,239 +21932,1165 @@ definitions: type: string type: object type: array - type: object - type: object - tendermint.types.LightClientAttackEvidence: - description: >- - LightClientAttackEvidence contains evidence of a set of validators - attempting to mislead a light client. - properties: - byzantine_validators: - items: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: PublicKey defines the keys available for use with Validators - type: object - voting_power: - format: int64 - type: string - type: object - type: array - common_height: - format: int64 - type: string - conflicting_block: - properties: - signed_header: + common_height: + format: int64 + type: string + conflicting_block: properties: - commit: - description: >- - Commit contains the evidence that a block was committed by a - set of validators. + signed_header: properties: - block_id: + commit: + description: >- + Commit contains the evidence that a block was committed by + a set of validators. properties: - hash: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + height: + format: int64 + type: string + round: + format: int32 + type: integer + signatures: + items: + description: >- + CommitSig is a part of the Vote included in a + Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: >- + BlockIdFlag indicates which BlockID the + signature is for + type: string + signature: + format: byte + type: string + timestamp: + format: date-time + type: string + validator_address: + format: byte + type: string + type: object + type: array + type: object + header: + description: Header defines the structure of a block header. + properties: + app_hash: format: byte type: string - part_set_header: + chain_id: + type: string + consensus_hash: + format: byte + type: string + data_hash: + format: byte + type: string + evidence_hash: + format: byte + title: consensus info + type: string + height: + format: int64 + type: string + last_block_id: properties: hash: format: byte type: string - total: - format: int64 - type: integer - title: PartsetHeader + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + last_commit_hash: + format: byte + title: hashes of block data + type: string + last_results_hash: + format: byte + type: string + next_validators_hash: + format: byte + type: string + proposer_address: + format: byte + type: string + time: + format: date-time + type: string + validators_hash: + format: byte + title: hashes from the app output from the prev block + type: string + version: + title: basic block info + description: >- + Consensus captures the consensus rules for processing + a block in the blockchain, + + including all blockchain data structures and the rules + of the application's + + state transition machine. + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string type: object - title: BlockID type: object - height: + type: object + validator_set: + properties: + proposer: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for use with + Validators + type: object + voting_power: + format: int64 + type: string + type: object + total_voting_power: format: int64 type: string - round: - format: int32 - type: integer - signatures: + validators: items: - description: CommitSig is a part of the Vote included in a Commit. properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: >- - BlockIdFlag indicates which BlockID the signature is - for - type: string - signature: + address: format: byte type: string - timestamp: - format: date-time + proposer_priority: + format: int64 type: string - validator_address: - format: byte + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for use with + Validators + type: object + voting_power: + format: int64 type: string type: object type: array type: object - header: - description: Header defines the structure of a block header. - properties: - app_hash: - format: byte - type: string - chain_id: - type: string - consensus_hash: - format: byte - type: string - data_hash: - format: byte - type: string - evidence_hash: - format: byte - title: consensus info - type: string - height: - format: int64 - type: string - last_block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - last_commit_hash: - format: byte - title: hashes of block data - type: string - last_results_hash: - format: byte - type: string - next_validators_hash: - format: byte - type: string - proposer_address: - format: byte - type: string - time: - format: date-time - type: string - validators_hash: - format: byte - title: hashes from the app output from the prev block - type: string - version: - title: basic block info - description: >- - Consensus captures the consensus rules for processing a - block in the blockchain, - - including all blockchain data structures and the rules of - the application's - - state transition machine. - properties: - app: - format: uint64 - type: string - block: - format: uint64 - type: string - type: object - type: object type: object - validator_set: - properties: - proposer: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: >- - PublicKey defines the keys available for use with - Validators - type: object - voting_power: - format: int64 - type: string - type: object - total_voting_power: - format: int64 - type: string - validators: - items: + timestamp: + format: date-time + type: string + total_voting_power: + format: int64 + type: string + type: object + type: object + tendermint.types.EvidenceList: + properties: + evidence: + items: + properties: + duplicate_vote_evidence: + description: >- + DuplicateVoteEvidence contains evidence of a validator signed + two conflicting votes. + properties: + timestamp: + format: date-time + type: string + total_voting_power: + format: int64 + type: string + validator_power: + format: int64 + type: string + vote_a: + description: >- + Vote represents a prevote or precommit vote from validators + for + + consensus. properties: - address: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + extension: + description: >- + Vote extension provided by the application. Only valid + for precommit + + messages. format: byte type: string - proposer_priority: + extension_signature: + description: >- + Vote extension signature by the validator if they + participated in + + consensus for the associated block. + + Only valid for precommit messages. + format: byte + type: string + height: format: int64 type: string - pub_key: + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they participated in + consensus for the + + associated block. + format: byte + type: string + timestamp: + format: date-time + type: string + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: + format: byte + type: string + validator_index: + format: int32 + type: integer + type: object + vote_b: + description: >- + Vote represents a prevote or precommit vote from validators + for + + consensus. + properties: + block_id: properties: - ed25519: - format: byte - type: string - secp256k1: + hash: format: byte type: string - title: >- - PublicKey defines the keys available for use with - Validators + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID type: object - voting_power: - format: int64 + extension: + description: >- + Vote extension provided by the application. Only valid + for precommit + + messages. + format: byte type: string - type: object - type: array - type: object - type: object - timestamp: - format: date-time - type: string - total_voting_power: - format: int64 + extension_signature: + description: >- + Vote extension signature by the validator if they + participated in + + consensus for the associated block. + + Only valid for precommit messages. + format: byte + type: string + height: + format: int64 + type: string + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they participated in + consensus for the + + associated block. + format: byte + type: string + timestamp: + format: date-time + type: string + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed message in the + consensus. + + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: + format: byte + type: string + validator_index: + format: int32 + type: integer + type: object + type: object + light_client_attack_evidence: + description: >- + LightClientAttackEvidence contains evidence of a set of + validators attempting to mislead a light client. + properties: + byzantine_validators: + items: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for use with + Validators + type: object + voting_power: + format: int64 + type: string + type: object + type: array + common_height: + format: int64 + type: string + conflicting_block: + properties: + signed_header: + properties: + commit: + description: >- + Commit contains the evidence that a block was + committed by a set of validators. + properties: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + height: + format: int64 + type: string + round: + format: int32 + type: integer + signatures: + items: + description: >- + CommitSig is a part of the Vote included in a + Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: >- + BlockIdFlag indicates which BlockID the + signature is for + type: string + signature: + format: byte + type: string + timestamp: + format: date-time + type: string + validator_address: + format: byte + type: string + type: object + type: array + type: object + header: + description: Header defines the structure of a block header. + properties: + app_hash: + format: byte + type: string + chain_id: + type: string + consensus_hash: + format: byte + type: string + data_hash: + format: byte + type: string + evidence_hash: + format: byte + title: consensus info + type: string + height: + format: int64 + type: string + last_block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + last_commit_hash: + format: byte + title: hashes of block data + type: string + last_results_hash: + format: byte + type: string + next_validators_hash: + format: byte + type: string + proposer_address: + format: byte + type: string + time: + format: date-time + type: string + validators_hash: + format: byte + title: hashes from the app output from the prev block + type: string + version: + title: basic block info + description: >- + Consensus captures the consensus rules for + processing a block in the blockchain, + + including all blockchain data structures and the + rules of the application's + + state transition machine. + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + type: object + type: object + type: object + validator_set: + properties: + proposer: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for use + with Validators + type: object + voting_power: + format: int64 + type: string + type: object + total_voting_power: + format: int64 + type: string + validators: + items: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for use + with Validators + type: object + voting_power: + format: int64 + type: string + type: object + type: array + type: object + type: object + timestamp: + format: date-time + type: string + total_voting_power: + format: int64 + type: string + type: object + type: object + type: array + type: object + tendermint.types.EvidenceParams: + description: EvidenceParams determine how we handle evidence of malfeasance. + properties: + max_age_duration: + description: >- + Max age of evidence, in time. + + + It should correspond with an app's "unbonding period" or other similar + + mechanism for handling [Nothing-At-Stake + + attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). + type: string + max_age_num_blocks: + description: >- + Max age of evidence, in blocks. + + + The basic formula for calculating this is: MaxAgeDuration / {average + block + + time}. + format: int64 + type: string + max_bytes: + format: int64 + title: >- + This sets the maximum size of total evidence in bytes that can be + committed in a single block. + + and should fall comfortably under the max block bytes. + + Default is 1048576 or 1MB + type: string + type: object + tendermint.types.Header: + description: Header defines the structure of a block header. + properties: + app_hash: + format: byte + type: string + chain_id: + type: string + consensus_hash: + format: byte + type: string + data_hash: + format: byte + type: string + evidence_hash: + format: byte + title: consensus info + type: string + height: + format: int64 + type: string + last_block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + last_commit_hash: + format: byte + title: hashes of block data + type: string + last_results_hash: + format: byte + type: string + next_validators_hash: + format: byte + type: string + proposer_address: + format: byte + type: string + time: + format: date-time + type: string + validators_hash: + format: byte + title: hashes from the app output from the prev block + type: string + version: + title: basic block info + description: >- + Consensus captures the consensus rules for processing a block in the + blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + type: object + type: object + tendermint.types.LightBlock: + properties: + signed_header: + properties: + commit: + description: >- + Commit contains the evidence that a block was committed by a set + of validators. + properties: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + height: + format: int64 + type: string + round: + format: int32 + type: integer + signatures: + items: + description: CommitSig is a part of the Vote included in a Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: BlockIdFlag indicates which BlockID the signature is for + type: string + signature: + format: byte + type: string + timestamp: + format: date-time + type: string + validator_address: + format: byte + type: string + type: object + type: array + type: object + header: + description: Header defines the structure of a block header. + properties: + app_hash: + format: byte + type: string + chain_id: + type: string + consensus_hash: + format: byte + type: string + data_hash: + format: byte + type: string + evidence_hash: + format: byte + title: consensus info + type: string + height: + format: int64 + type: string + last_block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + last_commit_hash: + format: byte + title: hashes of block data + type: string + last_results_hash: + format: byte + type: string + next_validators_hash: + format: byte + type: string + proposer_address: + format: byte + type: string + time: + format: date-time + type: string + validators_hash: + format: byte + title: hashes from the app output from the prev block + type: string + version: + title: basic block info + description: >- + Consensus captures the consensus rules for processing a block + in the blockchain, + + including all blockchain data structures and the rules of the + application's + + state transition machine. + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + type: object + type: object + type: object + validator_set: + properties: + proposer: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: PublicKey defines the keys available for use with Validators + type: object + voting_power: + format: int64 + type: string + type: object + total_voting_power: + format: int64 + type: string + validators: + items: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: PublicKey defines the keys available for use with Validators + type: object + voting_power: + format: int64 + type: string + type: object + type: array + type: object + type: object + tendermint.types.LightClientAttackEvidence: + description: >- + LightClientAttackEvidence contains evidence of a set of validators + attempting to mislead a light client. + properties: + byzantine_validators: + items: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: PublicKey defines the keys available for use with Validators + type: object + voting_power: + format: int64 + type: string + type: object + type: array + common_height: + format: int64 + type: string + conflicting_block: + properties: + signed_header: + properties: + commit: + description: >- + Commit contains the evidence that a block was committed by a + set of validators. + properties: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + height: + format: int64 + type: string + round: + format: int32 + type: integer + signatures: + items: + description: CommitSig is a part of the Vote included in a Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: >- + BlockIdFlag indicates which BlockID the signature is + for + type: string + signature: + format: byte + type: string + timestamp: + format: date-time + type: string + validator_address: + format: byte + type: string + type: object + type: array + type: object + header: + description: Header defines the structure of a block header. + properties: + app_hash: + format: byte + type: string + chain_id: + type: string + consensus_hash: + format: byte + type: string + data_hash: + format: byte + type: string + evidence_hash: + format: byte + title: consensus info + type: string + height: + format: int64 + type: string + last_block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + last_commit_hash: + format: byte + title: hashes of block data + type: string + last_results_hash: + format: byte + type: string + next_validators_hash: + format: byte + type: string + proposer_address: + format: byte + type: string + time: + format: date-time + type: string + validators_hash: + format: byte + title: hashes from the app output from the prev block + type: string + version: + title: basic block info + description: >- + Consensus captures the consensus rules for processing a + block in the blockchain, + + including all blockchain data structures and the rules of + the application's + + state transition machine. + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + type: object + type: object + type: object + validator_set: + properties: + proposer: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for use with + Validators + type: object + voting_power: + format: int64 + type: string + type: object + total_voting_power: + format: int64 + type: string + validators: + items: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for use with + Validators + type: object + voting_power: + format: int64 + type: string + type: object + type: array + type: object + type: object + timestamp: + format: date-time + type: string + total_voting_power: + format: int64 type: string type: object tendermint.types.PartSetHeader: @@ -27567,22 +29514,303 @@ paths: message: type: string type: object - summary: GetNodeInfo queries the current node info. + summary: GetNodeInfo queries the current node info. + tags: + - Service + /cosmos/base/tendermint/v1beta1/syncing: + get: + operationId: GetSyncing + responses: + '200': + description: A successful response. + schema: + description: >- + GetSyncingResponse is the response type for the Query/GetSyncing + RPC method. + properties: + syncing: + type: boolean + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: GetSyncing queries node syncing. + tags: + - Service + /cosmos/base/tendermint/v1beta1/validatorsets/latest: + get: + operationId: GetLatestValidatorSet + parameters: + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + responses: + '200': + description: A successful response. + schema: + description: >- + GetLatestValidatorSetResponse is the response type for the + Query/GetValidatorSetByHeight RPC method. + properties: + block_height: + format: int64 + type: string + pagination: + description: pagination defines an pagination for the response. + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + validators: + items: + description: Validator is the type for the validator-set. + properties: + address: + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + voting_power: + format: int64 + type: string + type: object + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: GetLatestValidatorSet queries latest validator-set. tags: - Service - /cosmos/base/tendermint/v1beta1/syncing: + /cosmos/base/tendermint/v1beta1/validatorsets/{height}: get: - operationId: GetSyncing + operationId: GetValidatorSetByHeight + parameters: + - format: int64 + in: path + name: height + required: true + type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean responses: '200': description: A successful response. schema: description: >- - GetSyncingResponse is the response type for the Query/GetSyncing - RPC method. + GetValidatorSetByHeightResponse is the response type for the + Query/GetValidatorSetByHeight RPC method. properties: - syncing: - type: boolean + block_height: + format: int64 + type: string + pagination: + description: pagination defines an pagination for the response. + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + validators: + items: + description: Validator is the type for the validator-set. + properties: + address: + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + voting_power: + format: int64 + type: string + type: object + type: array type: object default: description: An unexpected error response. @@ -27606,12 +29834,12 @@ paths: message: type: string type: object - summary: GetSyncing queries node syncing. + summary: GetValidatorSetByHeight queries validator-set at a given height. tags: - Service - /cosmos/base/tendermint/v1beta1/validatorsets/latest: + /cosmos/circuit/v1/accounts: get: - operationId: GetLatestValidatorSet + operationId: Accounts parameters: - description: |- key is a value returned in PageResponse.next_key to begin @@ -27674,53 +29902,179 @@ paths: description: A successful response. schema: description: >- - GetLatestValidatorSetResponse is the response type for the - Query/GetValidatorSetByHeight RPC method. + AccountsResponse is the response type for the Query/Accounts RPC + method. + properties: + accounts: + items: + properties: + address: + type: string + permissions: + description: >- + Permissions are the permissions that an account has to + trip + + or reset the circuit breaker. + properties: + level: + description: >- + level is the level of permissions granted to this + account. + default: LEVEL_NONE_UNSPECIFIED + enum: + - LEVEL_NONE_UNSPECIFIED + - LEVEL_SOME_MSGS + - LEVEL_ALL_MSGS + - LEVEL_SUPER_ADMIN + type: string + limit_type_urls: + description: >- + limit_type_urls is used with LEVEL_SOME_MSGS to + limit the lists of Msg type + + URLs that the account can trip. It is an error to + use limit_type_urls with + + a level other than LEVEL_SOME_MSGS. + items: + type: string + type: array + type: object + title: >- + GenesisAccountPermissions is the account permissions for the + circuit breaker in genesis + type: object + type: array + pagination: + description: pagination defines the pagination in the response. + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Account returns account permissions. + tags: + - Query + /cosmos/circuit/v1/accounts/{address}: + get: + operationId: Account + parameters: + - in: path + name: address + required: true + type: string + responses: + '200': + description: A successful response. + schema: + description: >- + AccountResponse is the response type for the Query/Account RPC + method. properties: - block_height: - format: int64 - type: string - pagination: - description: pagination defines an pagination for the response. + permission: + description: |- + Permissions are the permissions that an account has to trip + or reset the circuit breaker. properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte + level: + description: level is the level of permissions granted to this account. + default: LEVEL_NONE_UNSPECIFIED + enum: + - LEVEL_NONE_UNSPECIFIED + - LEVEL_SOME_MSGS + - LEVEL_ALL_MSGS + - LEVEL_SUPER_ADMIN type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + limit_type_urls: + description: >- + limit_type_urls is used with LEVEL_SOME_MSGS to limit the + lists of Msg type - was set, its value is undefined otherwise - type: string + URLs that the account can trip. It is an error to use + limit_type_urls with + + a level other than LEVEL_SOME_MSGS. + items: + type: string + type: array type: object - validators: + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: items: - description: Validator is the type for the validator-set. properties: - address: - type: string - proposer_priority: - format: int64 + type_url: type: string - pub_key: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - voting_power: - format: int64 + value: + format: byte type: string type: object type: array + error: + type: string + message: + type: string + type: object + summary: Account returns account permissions. + tags: + - Query + /cosmos/circuit/v1/disable_list: + get: + operationId: DisabledList + responses: + '200': + description: A successful response. + schema: + description: >- + DisabledListResponse is the response type for the + Query/DisabledList RPC method. + properties: + disabled_list: + items: + type: string + type: array type: object default: description: An unexpected error response. @@ -27744,126 +30098,138 @@ paths: message: type: string type: object - summary: GetLatestValidatorSet queries latest validator-set. + summary: DisabledList returns a list of disabled message urls tags: - - Service - /cosmos/base/tendermint/v1beta1/validatorsets/{height}: + - Query + /cosmos/consensus/v1/params: get: - operationId: GetValidatorSetByHeight - parameters: - - format: int64 - in: path - name: height - required: true - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse defines the response type for querying + x/consensus parameters. + properties: + params: + description: >- + params are the tendermint consensus params stored in the + consensus module. - It is less efficient than using key. Only one of offset or key - should + Please note that `params.version` is not populated in this + response, it is - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. + tracked separately in the x/upgrade module. + properties: + abci: + description: >- + ABCIParams configure functionality specific to the + Application Blockchain Interface. + properties: + vote_extensions_enable_height: + description: >- + vote_extensions_enable_height configures the first + height during which - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include + vote extensions will be enabled. During this specified + height, and for all - a count of the total number of items available for pagination in - UIs. + subsequent heights, precommit messages that do not + contain valid extension data - count_total is only respected when offset is used. It is ignored - when key + will be considered invalid. Prior to this height, vote + extensions will not - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. + be used or accepted by validators on the network. + + + Once enabled, vote extensions will be created by the + application in ExtendVote, + + passed to the application for validation in + VerifyVoteExtension and given + + to the application to use when proposing a block + during PrepareProposal. + format: int64 + type: string + type: object + block: + description: BlockParams contains limits on the block size. + properties: + max_bytes: + format: int64 + title: |- + Max block size, in bytes. + Note: must be greater than 0 + type: string + max_gas: + format: int64 + title: |- + Max gas per block. + Note: must be greater or equal to -1 + type: string + type: object + evidence: + description: >- + EvidenceParams determine how we handle evidence of + malfeasance. + properties: + max_age_duration: + description: >- + Max age of evidence, in time. + + + It should correspond with an app's "unbonding period" + or other similar + + mechanism for handling [Nothing-At-Stake + + attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). + type: string + max_age_num_blocks: + description: >- + Max age of evidence, in blocks. + + + The basic formula for calculating this is: + MaxAgeDuration / {average block + + time}. + format: int64 + type: string + max_bytes: + format: int64 + title: >- + This sets the maximum size of total evidence in bytes + that can be committed in a single block. + and should fall comfortably under the max block bytes. - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean - responses: - '200': - description: A successful response. - schema: - description: >- - GetValidatorSetByHeightResponse is the response type for the - Query/GetValidatorSetByHeight RPC method. - properties: - block_height: - format: int64 - type: string - pagination: - description: pagination defines an pagination for the response. - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + Default is 1048576 or 1MB + type: string + type: object + validator: + description: >- + ValidatorParams restrict the public key types validators + can use. - was set, its value is undefined otherwise - type: string - type: object - validators: - items: - description: Validator is the type for the validator-set. - properties: - address: - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - type_url: - type: string - value: - format: byte + NOTE: uses ABCI pubkey naming, not Amino names. + properties: + pub_key_types: + items: type: string - type: object - voting_power: - format: int64 - type: string - type: object - type: array + type: array + type: object + version: + description: VersionParams contains the ABCI application version. + properties: + app: + format: uint64 + type: string + type: object + type: object type: object default: description: An unexpected error response. @@ -27887,12 +30253,12 @@ paths: message: type: string type: object - summary: GetValidatorSetByHeight queries validator-set at a given height. + summary: Params queries the parameters of x/consensus module. tags: - - Service - /cosmos/circuit/v1/accounts: + - Query + /cosmos/evidence/v1beta1/evidence: get: - operationId: Accounts + operationId: AllEvidence parameters: - description: |- key is a value returned in PageResponse.next_key to begin @@ -27955,48 +30321,20 @@ paths: description: A successful response. schema: description: >- - AccountsResponse is the response type for the Query/Accounts RPC + QueryAllEvidenceResponse is the response type for the + Query/AllEvidence RPC + method. properties: - accounts: + evidence: + description: evidence returns all evidences. items: properties: - address: + type_url: + type: string + value: + format: byte type: string - permissions: - description: >- - Permissions are the permissions that an account has to - trip - - or reset the circuit breaker. - properties: - level: - description: >- - level is the level of permissions granted to this - account. - default: LEVEL_NONE_UNSPECIFIED - enum: - - LEVEL_NONE_UNSPECIFIED - - LEVEL_SOME_MSGS - - LEVEL_ALL_MSGS - - LEVEL_SUPER_ADMIN - type: string - limit_type_urls: - description: >- - limit_type_urls is used with LEVEL_SOME_MSGS to - limit the lists of Msg type - - URLs that the account can trip. It is an error to - use limit_type_urls with - - a level other than LEVEL_SOME_MSGS. - items: - type: string - type: array - type: object - title: >- - GenesisAccountPermissions is the account permissions for the - circuit breaker in genesis type: object type: array pagination: @@ -28041,52 +30379,46 @@ paths: message: type: string type: object - summary: Account returns account permissions. + summary: AllEvidence queries all evidence. tags: - Query - /cosmos/circuit/v1/accounts/{address}: + /cosmos/evidence/v1beta1/evidence/{hash}: get: - operationId: Account + operationId: Evidence parameters: - - in: path - name: address + - description: |- + hash defines the evidence hash of the requested evidence. + + Since: cosmos-sdk 0.47 + in: path + name: hash required: true type: string + - description: |- + evidence_hash defines the hash of the requested evidence. + Deprecated: Use hash, a HEX encoded string, instead. + format: byte + in: query + name: evidence_hash + required: false + type: string responses: '200': description: A successful response. schema: description: >- - AccountResponse is the response type for the Query/Account RPC - method. + QueryEvidenceResponse is the response type for the Query/Evidence + RPC method. properties: - permission: - description: |- - Permissions are the permissions that an account has to trip - or reset the circuit breaker. + evidence: properties: - level: - description: level is the level of permissions granted to this account. - default: LEVEL_NONE_UNSPECIFIED - enum: - - LEVEL_NONE_UNSPECIFIED - - LEVEL_SOME_MSGS - - LEVEL_ALL_MSGS - - LEVEL_SUPER_ADMIN + type_url: + type: string + value: + format: byte type: string - limit_type_urls: - description: >- - limit_type_urls is used with LEVEL_SOME_MSGS to limit the - lists of Msg type - - URLs that the account can trip. It is an error to use - limit_type_urls with - - a level other than LEVEL_SOME_MSGS. - items: - type: string - type: array type: object + description: evidence returns the requested evidence. type: object default: description: An unexpected error response. @@ -28110,178 +30442,62 @@ paths: message: type: string type: object - summary: Account returns account permissions. - tags: - - Query - /cosmos/circuit/v1/disable_list: - get: - operationId: DisabledList - responses: - '200': - description: A successful response. - schema: - description: >- - DisabledListResponse is the response type for the - Query/DisabledList RPC method. - properties: - disabled_list: - items: - type: string - type: array - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: DisabledList returns a list of disabled message urls + summary: Evidence queries evidence based on evidence hash. tags: - Query - /cosmos/consensus/v1/params: + /cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}: get: - operationId: Params + operationId: Allowance + parameters: + - description: >- + granter is the address of the user granting an allowance of their + funds. + in: path + name: granter + required: true + type: string + - description: >- + grantee is the address of the user being granted an allowance of + another user's funds. + in: path + name: grantee + required: true + type: string responses: '200': description: A successful response. schema: description: >- - QueryParamsResponse defines the response type for querying - x/consensus parameters. + QueryAllowanceResponse is the response type for the + Query/Allowance RPC method. properties: - params: - description: >- - params are the tendermint consensus params stored in the - consensus module. - - Please note that `params.version` is not populated in this - response, it is - - tracked separately in the x/upgrade module. + allowance: + description: allowance is a allowance granted for grantee by granter. properties: - abci: - description: >- - ABCIParams configure functionality specific to the - Application Blockchain Interface. - properties: - vote_extensions_enable_height: - description: >- - vote_extensions_enable_height configures the first - height during which - - vote extensions will be enabled. During this specified - height, and for all - - subsequent heights, precommit messages that do not - contain valid extension data - - will be considered invalid. Prior to this height, vote - extensions will not - - be used or accepted by validators on the network. - - - Once enabled, vote extensions will be created by the - application in ExtendVote, - - passed to the application for validation in - VerifyVoteExtension and given - - to the application to use when proposing a block - during PrepareProposal. - format: int64 - type: string - type: object - block: - description: BlockParams contains limits on the block size. + allowance: properties: - max_bytes: - format: int64 - title: |- - Max block size, in bytes. - Note: must be greater than 0 + type_url: type: string - max_gas: - format: int64 - title: |- - Max gas per block. - Note: must be greater or equal to -1 + value: + format: byte type: string type: object - evidence: description: >- - EvidenceParams determine how we handle evidence of - malfeasance. - properties: - max_age_duration: - description: >- - Max age of evidence, in time. - - - It should correspond with an app's "unbonding period" - or other similar - - mechanism for handling [Nothing-At-Stake - - attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). - type: string - max_age_num_blocks: - description: >- - Max age of evidence, in blocks. - - - The basic formula for calculating this is: - MaxAgeDuration / {average block - - time}. - format: int64 - type: string - max_bytes: - format: int64 - title: >- - This sets the maximum size of total evidence in bytes - that can be committed in a single block. - - and should fall comfortably under the max block bytes. - - Default is 1048576 or 1MB - type: string - type: object - validator: + allowance can be any of basic, periodic, allowed fee + allowance. + grantee: description: >- - ValidatorParams restrict the public key types validators - can use. - - NOTE: uses ABCI pubkey naming, not Amino names. - properties: - pub_key_types: - items: - type: string - type: array - type: object - version: - description: VersionParams contains the ABCI application version. - properties: - app: - format: uint64 - type: string - type: object + 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 + title: >- + Grant is stored in the KVStore to record a grant with full + context type: object type: object default: @@ -28306,13 +30522,17 @@ paths: message: type: string type: object - summary: Params queries the parameters of x/consensus module. + summary: Allowance returns granted allwance to the grantee by the granter. tags: - Query - /cosmos/evidence/v1beta1/evidence: + /cosmos/feegrant/v1beta1/allowances/{grantee}: get: - operationId: AllEvidence + operationId: Allowances parameters: + - in: path + name: grantee + required: true + type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -28374,24 +30594,41 @@ paths: description: A successful response. schema: description: >- - QueryAllEvidenceResponse is the response type for the - Query/AllEvidence RPC - - method. + QueryAllowancesResponse is the response type for the + Query/Allowances RPC method. properties: - evidence: - description: evidence returns all evidences. + allowances: + description: allowances are allowance's granted for grantee by granter. items: properties: - type_url: + allowance: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + allowance can be any of basic, periodic, allowed fee + allowance. + grantee: + description: >- + grantee is the address of the user being granted an + allowance of another user's funds. type: string - value: - format: byte + granter: + description: >- + granter is the address of the user granting an allowance + of their funds. type: string + title: >- + Grant is stored in the KVStore to record a grant with full + context type: object type: array pagination: - description: pagination defines the pagination in the response. + description: pagination defines an pagination for the response. properties: next_key: description: |- @@ -28432,46 +30669,134 @@ paths: message: type: string type: object - summary: AllEvidence queries all evidence. + summary: Allowances returns all the grants for the given grantee address. tags: - Query - /cosmos/evidence/v1beta1/evidence/{hash}: + /cosmos/feegrant/v1beta1/issued/{granter}: get: - operationId: Evidence + description: 'Since: cosmos-sdk 0.46' + operationId: AllowancesByGranter parameters: - - description: |- - hash defines the evidence hash of the requested evidence. - - Since: cosmos-sdk 0.47 - in: path - name: hash + - in: path + name: granter required: true type: string - description: |- - evidence_hash defines the hash of the requested evidence. - Deprecated: Use hash, a HEX encoded string, instead. + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. format: byte in: query - name: evidence_hash + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit required: false type: string + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean responses: '200': description: A successful response. schema: description: >- - QueryEvidenceResponse is the response type for the Query/Evidence - RPC method. + QueryAllowancesByGranterResponse is the response type for the + Query/AllowancesByGranter RPC method. + + + Since: cosmos-sdk 0.46 properties: - evidence: + allowances: + description: allowances that have been issued by the granter. + items: + properties: + allowance: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + allowance can be any of basic, periodic, allowed fee + allowance. + 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 + title: >- + Grant is stored in the KVStore to record a grant with full + context + type: object + type: array + pagination: + description: pagination defines an pagination for the response. properties: - type_url: - type: string - value: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. format: byte type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string type: object - description: evidence returns the requested evidence. type: object default: description: An unexpected error response. @@ -28495,63 +30820,37 @@ paths: message: type: string type: object - summary: Evidence queries evidence based on evidence hash. + summary: AllowancesByGranter returns all the grants given by an address tags: - Query - /cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}: + /cosmos/nft/v1beta1/balance/{owner}/{class_id}: get: - operationId: Allowance + operationId: Balance parameters: - - description: >- - granter is the address of the user granting an allowance of their - funds. + - description: owner is the owner address of the nft in: path - name: granter + name: owner required: true type: string - - description: >- - grantee is the address of the user being granted an allowance of - another user's funds. + - description: class_id associated with the nft in: path - name: grantee + name: class_id required: true type: string responses: '200': description: A successful response. schema: - description: >- - QueryAllowanceResponse is the response type for the - Query/Allowance RPC method. properties: - allowance: - description: allowance is a allowance granted for grantee by granter. - properties: - allowance: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - description: >- - allowance can be any of basic, periodic, allowed fee - allowance. - 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 + amount: + format: uint64 title: >- - Grant is stored in the KVStore to record a grant with full - context - type: object + amount is the number of all NFTs of a given class owned by the + owner + type: string + title: >- + QueryBalanceResponse is the response type for the Query/Balance + RPC method type: object default: description: An unexpected error response. @@ -28575,17 +30874,15 @@ paths: message: type: string type: object - summary: Allowance returns granted allwance to the grantee by the granter. + summary: >- + Balance queries the number of NFTs of a given class owned by the owner, + same as balanceOf in ERC721 tags: - Query - /cosmos/feegrant/v1beta1/allowances/{grantee}: + /cosmos/nft/v1beta1/classes: get: - operationId: Allowances + operationId: Classes parameters: - - in: path - name: grantee - required: true - type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -28646,15 +30943,13 @@ paths: '200': description: A successful response. schema: - description: >- - QueryAllowancesResponse is the response type for the - Query/Allowances RPC method. properties: - allowances: - description: allowances are allowance's granted for grantee by granter. + classes: + description: class defines the class of the nft type. items: + description: Class defines the class of the nft type. properties: - allowance: + data: properties: type_url: type: string @@ -28662,26 +30957,45 @@ paths: format: byte type: string type: object - description: >- - allowance can be any of basic, periodic, allowed fee - allowance. - grantee: - description: >- - grantee is the address of the user being granted an - allowance of another user's funds. + title: >- + data is the app specific metadata of the NFT class. + Optional + description: + title: >- + description is a brief description of nft + classification. Optional type: string - granter: - description: >- - granter is the address of the user granting an allowance - of their funds. + id: + title: >- + id defines the unique identifier of the NFT + classification, similar to the contract address of + ERC721 + type: string + name: + title: >- + name defines the human-readable name of the NFT + classification. Optional + type: string + symbol: + title: >- + symbol is an abbreviated name for nft classification. + Optional + type: string + uri: + title: >- + uri for the class metadata stored off chain. It can + define schema for Class and NFT `Data` attributes. + Optional + type: string + uri_hash: + title: >- + uri_hash is a hash of the document pointed by uri. + Optional type: string - title: >- - Grant is stored in the KVStore to record a grant with full - context type: object type: array pagination: - description: pagination defines an pagination for the response. + description: pagination defines the pagination in the response. properties: next_key: description: |- @@ -28690,15 +31004,106 @@ paths: there are no more results. format: byte type: string - total: - format: uint64 + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + title: >- + QueryClassesResponse is the response type for the Query/Classes + RPC method + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Classes queries all NFT classes + tags: + - Query + /cosmos/nft/v1beta1/classes/{class_id}: + get: + operationId: Class + parameters: + - description: class_id associated with the nft + in: path + name: class_id + required: true + type: string + responses: + '200': + description: A successful response. + schema: + properties: + class: + description: class defines the class of the nft type. + properties: + data: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: >- + data is the app specific metadata of the NFT class. + Optional + description: + title: >- + description is a brief description of nft classification. + Optional + type: string + id: + title: >- + id defines the unique identifier of the NFT + classification, similar to the contract address of ERC721 + type: string + name: + title: >- + name defines the human-readable name of the NFT + classification. Optional + type: string + symbol: title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise + symbol is an abbreviated name for nft classification. + Optional + type: string + uri: + title: >- + uri for the class metadata stored off chain. It can define + schema for Class and NFT `Data` attributes. Optional + type: string + uri_hash: + title: >- + uri_hash is a hash of the document pointed by uri. + Optional type: string type: object + title: >- + QueryClassResponse is the response type for the Query/Class RPC + method type: object default: description: An unexpected error response. @@ -28722,17 +31127,22 @@ paths: message: type: string type: object - summary: Allowances returns all the grants for the given grantee address. + summary: Class queries an NFT class based on its id tags: - Query - /cosmos/feegrant/v1beta1/issued/{granter}: + /cosmos/nft/v1beta1/nfts: get: - description: 'Since: cosmos-sdk 0.46' - operationId: AllowancesByGranter + operationId: NFTs parameters: - - in: path - name: granter - required: true + - description: class_id associated with the nft. + in: query + name: class_id + required: false + type: string + - description: owner is the owner address of the nft. + in: query + name: owner + required: false type: string - description: |- key is a value returned in PageResponse.next_key to begin @@ -28794,18 +31204,17 @@ paths: '200': description: A successful response. schema: - description: >- - QueryAllowancesByGranterResponse is the response type for the - Query/AllowancesByGranter RPC method. - - - Since: cosmos-sdk 0.46 properties: - allowances: - description: allowances that have been issued by the granter. + nfts: items: + description: NFT defines the NFT. properties: - allowance: + class_id: + title: >- + class_id associated with the NFT, similar to the + contract address of ERC721 + type: string + data: properties: type_url: type: string @@ -28813,26 +31222,21 @@ paths: format: byte type: string type: object - description: >- - allowance can be any of basic, periodic, allowed fee - allowance. - grantee: - description: >- - grantee is the address of the user being granted an - allowance of another user's funds. + title: data is an app specific data of the NFT. Optional + id: + title: id is a unique identifier of the NFT type: string - granter: - description: >- - granter is the address of the user granting an allowance - of their funds. + uri: + title: uri for the NFT metadata stored off chain + type: string + uri_hash: + title: uri_hash is a hash of the document pointed by uri type: string - title: >- - Grant is stored in the KVStore to record a grant with full - context type: object + title: NFT defines the NFT type: array pagination: - description: pagination defines an pagination for the response. + description: pagination defines the pagination in the response. properties: next_key: description: |- @@ -28850,6 +31254,187 @@ paths: was set, its value is undefined otherwise type: string type: object + title: >- + QueryNFTsResponse is the response type for the Query/NFTs RPC + methods + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: >- + NFTs queries all NFTs of a given class or owner,choose at least one of + the two, similar to tokenByIndex in + + ERC721Enumerable + tags: + - Query + /cosmos/nft/v1beta1/nfts/{class_id}/{id}: + get: + operationId: NFT + parameters: + - description: class_id associated with the nft + in: path + name: class_id + required: true + type: string + - description: id is a unique identifier of the NFT + in: path + name: id + required: true + type: string + responses: + '200': + description: A successful response. + schema: + properties: + nft: + title: owner is the owner address of the nft + description: NFT defines the NFT. + properties: + class_id: + title: >- + class_id associated with the NFT, similar to the contract + address of ERC721 + type: string + data: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: data is an app specific data of the NFT. Optional + id: + title: id is a unique identifier of the NFT + type: string + uri: + title: uri for the NFT metadata stored off chain + type: string + uri_hash: + title: uri_hash is a hash of the document pointed by uri + type: string + type: object + title: QueryNFTResponse is the response type for the Query/NFT RPC method + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: NFT queries an NFT based on its class and id. + tags: + - Query + /cosmos/nft/v1beta1/owner/{class_id}/{id}: + get: + operationId: Owner + parameters: + - description: class_id associated with the nft + in: path + name: class_id + required: true + type: string + - description: id is a unique identifier of the NFT + in: path + name: id + required: true + type: string + responses: + '200': + description: A successful response. + schema: + properties: + owner: + title: owner is the owner address of the nft + type: string + title: >- + QueryOwnerResponse is the response type for the Query/Owner RPC + method + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: >- + Owner queries the owner of the NFT based on its class and id, same as + ownerOf in ERC721 + tags: + - Query + /cosmos/nft/v1beta1/supply/{class_id}: + get: + operationId: Supply + parameters: + - description: class_id associated with the nft + in: path + name: class_id + required: true + type: string + responses: + '200': + description: A successful response. + schema: + properties: + amount: + format: uint64 + title: amount is the number of all NFTs from the given class + type: string + title: >- + QuerySupplyResponse is the response type for the Query/Supply RPC + method type: object default: description: An unexpected error response. @@ -28873,37 +31458,43 @@ paths: message: type: string type: object - summary: AllowancesByGranter returns all the grants given by an address + summary: >- + Supply queries the number of NFTs from the given class, same as + totalSupply of ERC721. tags: - Query - /cosmos/nft/v1beta1/balance/{owner}/{class_id}: + /cosmos/params/v1beta1/params: get: - operationId: Balance + operationId: Params parameters: - - description: owner is the owner address of the nft - in: path - name: owner - required: true + - description: subspace defines the module to query the parameter for. + in: query + name: subspace + required: false type: string - - description: class_id associated with the nft - in: path - name: class_id - required: true + - description: key defines the key of the parameter in the subspace. + in: query + name: key + required: false type: string responses: '200': description: A successful response. schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. properties: - amount: - format: uint64 - title: >- - amount is the number of all NFTs of a given class owned by the - owner - type: string - title: >- - QueryBalanceResponse is the response type for the Query/Balance - RPC method + param: + description: param defines the queried parameter. + properties: + key: + type: string + subspace: + type: string + value: + type: string + type: object type: object default: description: An unexpected error response. @@ -28927,148 +31518,47 @@ paths: message: type: string type: object - summary: >- - Balance queries the number of NFTs of a given class owned by the owner, - same as balanceOf in ERC721 + summary: |- + Params queries a specific parameter of a module, given its subspace and + key. tags: - Query - /cosmos/nft/v1beta1/classes: + /cosmos/params/v1beta1/subspaces: get: - operationId: Classes - parameters: - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean + description: 'Since: cosmos-sdk 0.46' + operationId: Subspaces responses: '200': description: A successful response. schema: + description: >- + QuerySubspacesResponse defines the response types for querying for + all + + registered subspaces and all keys for a subspace. + + + Since: cosmos-sdk 0.46 properties: - classes: - description: class defines the class of the nft type. + subspaces: items: - description: Class defines the class of the nft type. + description: >- + Subspace defines a parameter subspace name and all the keys + that exist for + + the subspace. + + + Since: cosmos-sdk 0.46 properties: - data: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: >- - data is the app specific metadata of the NFT class. - Optional - description: - title: >- - description is a brief description of nft - classification. Optional - type: string - id: - title: >- - id defines the unique identifier of the NFT - classification, similar to the contract address of - ERC721 - type: string - name: - title: >- - name defines the human-readable name of the NFT - classification. Optional - type: string - symbol: - title: >- - symbol is an abbreviated name for nft classification. - Optional - type: string - uri: - title: >- - uri for the class metadata stored off chain. It can - define schema for Class and NFT `Data` attributes. - Optional - type: string - uri_hash: - title: >- - uri_hash is a hash of the document pointed by uri. - Optional + keys: + items: + type: string + type: array + subspace: type: string type: object type: array - pagination: - description: pagination defines the pagination in the response. - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - type: string - type: object - title: >- - QueryClassesResponse is the response type for the Query/Classes - RPC method type: object default: description: An unexpected error response. @@ -29092,70 +31582,41 @@ paths: message: type: string type: object - summary: Classes queries all NFT classes + summary: >- + Subspaces queries for all registered subspaces and all keys for a + subspace. tags: - Query - /cosmos/nft/v1beta1/classes/{class_id}: + /cosmos/slashing/v1beta1/params: get: - operationId: Class - parameters: - - description: class_id associated with the nft - in: path - name: class_id - required: true - type: string + operationId: Params responses: '200': description: A successful response. schema: properties: - class: - description: class defines the class of the nft type. + params: + description: >- + Params represents the parameters used for by the slashing + module. properties: - data: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: >- - data is the app specific metadata of the NFT class. - Optional - description: - title: >- - description is a brief description of nft classification. - Optional - type: string - id: - title: >- - id defines the unique identifier of the NFT - classification, similar to the contract address of ERC721 - type: string - name: - title: >- - name defines the human-readable name of the NFT - classification. Optional + downtime_jail_duration: type: string - symbol: - title: >- - symbol is an abbreviated name for nft classification. - Optional + min_signed_per_window: + format: byte type: string - uri: - title: >- - uri for the class metadata stored off chain. It can define - schema for Class and NFT `Data` attributes. Optional + signed_blocks_window: + format: int64 type: string - uri_hash: - title: >- - uri_hash is a hash of the document pointed by uri. - Optional + slash_fraction_double_sign: + format: byte + type: string + slash_fraction_downtime: + format: byte type: string type: object title: >- - QueryClassResponse is the response type for the Query/Class RPC + QueryParamsResponse is the response type for the Query/Params RPC method type: object default: @@ -29180,23 +31641,13 @@ paths: message: type: string type: object - summary: Class queries an NFT class based on its id + summary: Params queries the parameters of slashing module tags: - Query - /cosmos/nft/v1beta1/nfts: + /cosmos/slashing/v1beta1/signing_infos: get: - operationId: NFTs + operationId: SigningInfos parameters: - - description: class_id associated with the nft. - in: query - name: class_id - required: false - type: string - - description: owner is the owner address of the nft. - in: query - name: owner - required: false - type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -29258,38 +31709,72 @@ paths: description: A successful response. schema: properties: - nfts: + info: items: - description: NFT defines the NFT. + description: >- + ValidatorSigningInfo defines a validator's signing info for + monitoring their + + liveness activity. properties: - class_id: - title: >- - class_id associated with the NFT, similar to the - contract address of ERC721 + address: type: string - data: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: data is an app specific data of the NFT. Optional - id: - title: id is a unique identifier of the NFT + index_offset: + description: >- + Index which is incremented every time a validator is + bonded in a block and + + _may_ have signed a pre-commit or not. This in + conjunction with the + + signed_blocks_window param determines the index in the + missed block bitmap. + format: int64 type: string - uri: - title: uri for the NFT metadata stored off chain + jailed_until: + description: >- + Timestamp until which the validator is jailed due to + liveness downtime. + format: date-time type: string - uri_hash: - title: uri_hash is a hash of the document pointed by uri + missed_blocks_counter: + description: >- + A counter of missed (unsigned) blocks. It is used to + avoid unnecessary + + reads in the missed block bitmap. + format: int64 + type: string + start_height: + format: int64 + title: >- + Height at which validator was first a candidate OR was + un-jailed type: string + tombstoned: + description: >- + Whether or not a validator has been tombstoned (killed + out of validator + + set). It is set once the validator commits an + equivocation or for any other + + configured misbehavior. + type: boolean type: object - title: NFT defines the NFT + title: info is the signing info of all validators type: array pagination: - description: pagination defines the pagination in the response. + description: >- + PageResponse is to be embedded in gRPC response messages where + the + + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } properties: next_key: description: |- @@ -29300,144 +31785,17 @@ paths: type: string total: format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - type: string - type: object - title: >- - QueryNFTsResponse is the response type for the Query/NFTs RPC - methods - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: >- - NFTs queries all NFTs of a given class or owner,choose at least one of - the two, similar to tokenByIndex in - - ERC721Enumerable - tags: - - Query - /cosmos/nft/v1beta1/nfts/{class_id}/{id}: - get: - operationId: NFT - parameters: - - description: class_id associated with the nft - in: path - name: class_id - required: true - type: string - - description: id is a unique identifier of the NFT - in: path - name: id - required: true - type: string - responses: - '200': - description: A successful response. - schema: - properties: - nft: - title: owner is the owner address of the nft - description: NFT defines the NFT. - properties: - class_id: - title: >- - class_id associated with the NFT, similar to the contract - address of ERC721 - type: string - data: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: data is an app specific data of the NFT. Optional - id: - title: id is a unique identifier of the NFT - type: string - uri: - title: uri for the NFT metadata stored off chain - type: string - uri_hash: - title: uri_hash is a hash of the document pointed by uri - type: string - type: object - title: QueryNFTResponse is the response type for the Query/NFT RPC method - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: NFT queries an NFT based on its class and id. - tags: - - Query - /cosmos/nft/v1beta1/owner/{class_id}/{id}: - get: - operationId: Owner - parameters: - - description: class_id associated with the nft - in: path - name: class_id - required: true - type: string - - description: id is a unique identifier of the NFT - in: path - name: id - required: true - type: string - responses: - '200': - description: A successful response. - schema: - properties: - owner: - title: owner is the owner address of the nft - type: string + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object title: >- - QueryOwnerResponse is the response type for the Query/Owner RPC + QuerySigningInfosResponse is the response type for the + Query/SigningInfos RPC + method type: object default: @@ -29462,18 +31820,16 @@ paths: message: type: string type: object - summary: >- - Owner queries the owner of the NFT based on its class and id, same as - ownerOf in ERC721 + summary: SigningInfos queries signing info of all validators tags: - Query - /cosmos/nft/v1beta1/supply/{class_id}: + /cosmos/slashing/v1beta1/signing_infos/{cons_address}: get: - operationId: Supply + operationId: SigningInfo parameters: - - description: class_id associated with the nft + - description: cons_address is the address to query signing info of in: path - name: class_id + name: cons_address required: true type: string responses: @@ -29481,12 +31837,65 @@ paths: description: A successful response. schema: properties: - amount: - format: uint64 - title: amount is the number of all NFTs from the given class - type: string + val_signing_info: + title: >- + val_signing_info is the signing info of requested val cons + address + description: >- + ValidatorSigningInfo defines a validator's signing info for + monitoring their + + liveness activity. + properties: + address: + type: string + index_offset: + description: >- + Index which is incremented every time a validator is + bonded in a block and + + _may_ have signed a pre-commit or not. This in conjunction + with the + + signed_blocks_window param determines the index in the + missed block bitmap. + format: int64 + type: string + jailed_until: + description: >- + Timestamp until which the validator is jailed due to + liveness downtime. + format: date-time + type: string + missed_blocks_counter: + description: >- + A counter of missed (unsigned) blocks. It is used to avoid + unnecessary + + reads in the missed block bitmap. + format: int64 + type: string + start_height: + format: int64 + title: >- + Height at which validator was first a candidate OR was + un-jailed + type: string + tombstoned: + description: >- + Whether or not a validator has been tombstoned (killed out + of validator + + set). It is set once the validator commits an equivocation + or for any other + + configured misbehavior. + type: boolean + type: object title: >- - QuerySupplyResponse is the response type for the Query/Supply RPC + QuerySigningInfoResponse is the response type for the + Query/SigningInfo RPC + method type: object default: @@ -29511,345 +31920,446 @@ paths: message: type: string type: object - summary: >- - Supply queries the number of NFTs from the given class, same as - totalSupply of ERC721. + summary: SigningInfo queries the signing info of given cons address tags: - Query - /cosmos/params/v1beta1/params: - get: - operationId: Params + /cosmos/tx/v1beta1/decode: + post: + description: 'Since: cosmos-sdk 0.47' + operationId: TxDecode parameters: - - description: subspace defines the module to query the parameter for. - in: query - name: subspace - required: false - type: string - - description: key defines the key of the parameter in the subspace. - in: query - name: key - required: false - type: string - responses: - '200': - description: A successful response. - schema: - description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. - properties: - param: - description: param defines the queried parameter. - properties: - key: - type: string - subspace: - type: string - value: - type: string - type: object - type: object - default: - description: An unexpected error response. + - in: body + name: body + required: true schema: + description: |- + TxDecodeRequest is the request type for the Service.TxDecode + RPC method. + + Since: cosmos-sdk 0.47 properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: + tx_bytes: + description: tx_bytes is the raw transaction. + format: byte type: string type: object - summary: |- - Params queries a specific parameter of a module, given its subspace and - key. - tags: - - Query - /cosmos/params/v1beta1/subspaces: - get: - description: 'Since: cosmos-sdk 0.46' - operationId: Subspaces responses: '200': description: A successful response. schema: - description: >- - QuerySubspacesResponse defines the response types for querying for - all + description: |- + TxDecodeResponse is the response type for the + Service.TxDecode method. + + Since: cosmos-sdk 0.47 + properties: + tx: + description: Tx is the standard type used for broadcasting transactions. + properties: + auth_info: + title: >- + auth_info is the authorization related content of the + transaction, + + specifically signers, signer modes and fee + description: >- + AuthInfo describes the fee and signer modes that are used + to sign a + + transaction. + properties: + fee: + description: >- + Fee is the fee and gas limit for the transaction. The + first signer is the + + primary signer and the one which pays the fee. The fee + can be calculated + + based on the cost of evaluating the body and doing + signature verification + + of the signers. This can be estimated via simulation. + properties: + amount: + items: + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which + implements the custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: amount is the amount of coins to be paid as a fee + type: array + gas_limit: + format: uint64 + title: >- + gas_limit is the maximum gas that can be used in + transaction processing + + before an out of gas error occurs + type: string + granter: + title: >- + if set, the fee payer (either the first signer or + the value of the payer field) requests that a fee + grant be used + + to pay fees instead of the fee payer's own + balance. If an appropriate fee grant does not + exist or the chain does + + not support fee grants, this will fail + type: string + payer: + description: >- + if unset, the first signer is responsible for + paying the fees. If set, the specified account + must pay the fees. + + the payer must be a tx signer (and thus have + signed this field in AuthInfo). + + setting this field does *not* change the ordering + of required signers for the transaction. + type: string + type: object + signer_infos: + description: >- + signer_infos defines the signing modes for the + required signers. The number - registered subspaces and all keys for a subspace. + and order of elements must match the required signers + from TxBody's + messages. The first element is the primary signer and + the one which pays - Since: cosmos-sdk 0.46 - properties: - subspaces: - items: - description: >- - Subspace defines a parameter subspace name and all the keys - that exist for + the fee. + items: + description: >- + SignerInfo describes the public key and signing mode + of a single top-level - the subspace. + signer. + properties: + mode_info: + title: >- + mode_info describes the signing mode of the + signer and is a nested + structure to support nested multisig pubkey's + description: >- + ModeInfo describes the signing mode of a single + or nested multisig signer. + properties: + multi: + title: multi represents a nested multisig signer + properties: + bitarray: + title: >- + bitarray specifies which keys within the + multisig are signing + description: >- + CompactBitArray is an implementation of + a space efficient bit array. - Since: cosmos-sdk 0.46 - properties: - keys: - items: - type: string - type: array - subspace: - type: string - type: object - type: array - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: >- - Subspaces queries for all registered subspaces and all keys for a - subspace. - tags: - - Query - /cosmos/slashing/v1beta1/params: - get: - operationId: Params - responses: - '200': - description: A successful response. - schema: - properties: - params: - description: >- - Params represents the parameters used for by the slashing - module. - properties: - downtime_jail_duration: - type: string - min_signed_per_window: - format: byte - type: string - signed_blocks_window: - format: int64 - type: string - slash_fraction_double_sign: - format: byte - type: string - slash_fraction_downtime: - format: byte - type: string - type: object - title: >- - QueryParamsResponse is the response type for the Query/Params RPC - method - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: Params queries the parameters of slashing module - tags: - - Query - /cosmos/slashing/v1beta1/signing_infos: - get: - operationId: SigningInfos - parameters: - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. + This is used to ensure that the encoded + data takes up a minimal amount of + + space after proto encoding. + + This is not thread safe, and is not + intended for concurrent usage. + properties: + elems: + format: byte + type: string + extra_bits_stored: + format: int64 + type: integer + type: object + mode_infos: + items: {} + title: >- + mode_infos is the corresponding modes of + the signers of the multisig + + which could include nested multisig + public keys + type: array + type: object + single: + title: single represents a single signer + properties: + mode: + title: >- + mode is the signing mode of the single + signer + default: SIGN_MODE_UNSPECIFIED + description: >- + SignMode represents a signing mode with + its own security guarantees. + + + This enum should be considered a + registry of all known sign modes + + in the Cosmos ecosystem. Apps are not + expected to support all known + + sign modes. Apps that would like to + support custom sign modes are + + encouraged to open a small PR against + this file to add a new case + + to this SignMode enum describing their + sign mode so that different + + apps have a consistent version of this + enum. + + - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be + rejected. + - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is + verified with raw bytes from Tx. + - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some + human-readable textual representation on + top of the binary representation + + from SIGN_MODE_DIRECT. + + + Since: cosmos-sdk 0.50 + - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses + SignDocDirectAux. As opposed to + SIGN_MODE_DIRECT, this sign mode does + not + + require signers signing over other + signers' `signer_info`. + + + Since: cosmos-sdk 0.46 + - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses + Amino JSON and will be removed in the + future. + - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos + SDK. Ref: + https://eips.ethereum.org/EIPS/eip-191 + + + Currently, SIGN_MODE_EIP_191 is + registered as a SignMode enum variant, + + but is not implemented on the SDK by + default. To enable EIP-191, you need + + to pass a custom `TxConfig` that has an + implementation of + + `SignModeHandler` for EIP-191. The SDK + may decide to fully support + + EIP-191 in the future. + + + Since: cosmos-sdk 0.45.2 + enum: + - SIGN_MODE_UNSPECIFIED + - SIGN_MODE_DIRECT + - SIGN_MODE_TEXTUAL + - SIGN_MODE_DIRECT_AUX + - SIGN_MODE_LEGACY_AMINO_JSON + - SIGN_MODE_EIP_191 + type: string + type: object + type: object + public_key: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + public_key is the public key of the signer. It + is optional for accounts - It is less efficient than using key. Only one of offset or key - should + that already exist in state. If unset, the + verifier can use the required \ - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. + signer address for this position and lookup the + public key. + sequence: + description: >- + sequence is the sequence of the account, which + describes the - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include + number of committed transactions signed by a + given address. It is used to - a count of the total number of items available for pagination in - UIs. + prevent replay attacks. + format: uint64 + type: string + type: object + type: array + tip: + description: >- + Tip is the optional tip used for transactions fees + paid in another denom. - count_total is only respected when offset is used. It is ignored - when key - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. + This field is ignored if the chain didn't enable tips, + i.e. didn't add the + `TipDecorator` in its posthandler. - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean - responses: - '200': - description: A successful response. - schema: - properties: - info: - items: - description: >- - ValidatorSigningInfo defines a validator's signing info for - monitoring their - liveness activity. - properties: - address: - type: string - index_offset: - description: >- - Index which is incremented every time a validator is - bonded in a block and + Since: cosmos-sdk 0.46 + properties: + amount: + items: + description: >- + Coin defines a token with a denomination and an + amount. - _may_ have signed a pre-commit or not. This in - conjunction with the - signed_blocks_window param determines the index in the - missed block bitmap. - format: int64 - type: string - jailed_until: - description: >- - Timestamp until which the validator is jailed due to - liveness downtime. - format: date-time - type: string - missed_blocks_counter: - description: >- - A counter of missed (unsigned) blocks. It is used to - avoid unnecessary + NOTE: The amount field is an Int which + implements the custom method - reads in the missed block bitmap. - format: int64 - type: string - start_height: - format: int64 - title: >- - Height at which validator was first a candidate OR was - un-jailed - type: string - tombstoned: - description: >- - Whether or not a validator has been tombstoned (killed - out of validator + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: amount is the amount of the tip + type: array + tipper: + title: >- + tipper is the address of the account paying for + the tip + type: string + type: object + type: object + body: + title: body is the processable content of the transaction + description: >- + TxBody is the body of a transaction that all signers sign + over. + properties: + extension_options: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: >- + extension_options are arbitrary options that can be + added by chains - set). It is set once the validator commits an - equivocation or for any other + when the default options are not sufficient. If any of + these are present - configured misbehavior. - type: boolean - type: object - title: info is the signing info of all validators - type: array - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the + and can't be handled, the transaction will be rejected + type: array + memo: + description: >- + memo is any arbitrary note/comment to be added to the + transaction. - corresponding request message has used PageRequest. + WARNING: in clients, any publicly exposed text should + not be called memo, - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + but should be called `note` instead (see + https://github.com/cosmos/cosmos-sdk/issues/9122). + type: string + messages: + description: >- + messages is a list of messages to be executed. The + required signers of + + those messages define the number and order of elements + in AuthInfo's + + signer_infos and Tx's signatures. Each required signer + address is added to + + the list only the first time it occurs. + + By convention, the first required signer (usually from + the first message) + + is referred to as the primary signer and pays the fee + for the whole + + transaction. + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + non_critical_extension_options: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: >- + extension_options are arbitrary options that can be + added by chains + + when the default options are not sufficient. If any of + these are present + + and can't be handled, they will be ignored + type: array + timeout_height: + format: uint64 + title: >- + timeout is the block height after which this + transaction will not - was set, its value is undefined otherwise - type: string - type: object - title: >- - QuerySigningInfosResponse is the response type for the - Query/SigningInfos RPC + be processed by the chain + type: string + type: object + signatures: + description: >- + signatures is a list of signatures that matches the length + and order of - method + AuthInfo's signer_infos to allow connecting signature meta + information like + + public key and signing mode by position. + items: + format: byte + type: string + type: array + type: object type: object default: description: An unexpected error response. @@ -29873,83 +32383,46 @@ paths: message: type: string type: object - summary: SigningInfos queries signing info of all validators + summary: TxDecode decodes the transaction. tags: - - Query - /cosmos/slashing/v1beta1/signing_infos/{cons_address}: - get: - operationId: SigningInfo + - Service + /cosmos/tx/v1beta1/decode/amino: + post: + description: 'Since: cosmos-sdk 0.47' + operationId: TxDecodeAmino parameters: - - description: cons_address is the address to query signing info of - in: path - name: cons_address + - in: body + name: body required: true - type: string - responses: - '200': - description: A successful response. schema: - properties: - val_signing_info: - title: >- - val_signing_info is the signing info of requested val cons - address - description: >- - ValidatorSigningInfo defines a validator's signing info for - monitoring their - - liveness activity. - properties: - address: - type: string - index_offset: - description: >- - Index which is incremented every time a validator is - bonded in a block and + description: >- + TxDecodeAminoRequest is the request type for the + Service.TxDecodeAmino - _may_ have signed a pre-commit or not. This in conjunction - with the + RPC method. - signed_blocks_window param determines the index in the - missed block bitmap. - format: int64 - type: string - jailed_until: - description: >- - Timestamp until which the validator is jailed due to - liveness downtime. - format: date-time - type: string - missed_blocks_counter: - description: >- - A counter of missed (unsigned) blocks. It is used to avoid - unnecessary - reads in the missed block bitmap. - format: int64 - type: string - start_height: - format: int64 - title: >- - Height at which validator was first a candidate OR was - un-jailed - type: string - tombstoned: - description: >- - Whether or not a validator has been tombstoned (killed out - of validator + Since: cosmos-sdk 0.47 + properties: + amino_binary: + format: byte + type: string + type: object + responses: + '200': + description: A successful response. + schema: + description: >- + TxDecodeAminoResponse is the response type for the + Service.TxDecodeAmino - set). It is set once the validator commits an equivocation - or for any other + RPC method. - configured misbehavior. - type: boolean - type: object - title: >- - QuerySigningInfoResponse is the response type for the - Query/SigningInfo RPC - method + Since: cosmos-sdk 0.47 + properties: + amino_json: + type: string type: object default: description: An unexpected error response. @@ -29973,37 +32446,22 @@ paths: message: type: string type: object - summary: SigningInfo queries the signing info of given cons address + summary: TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON. tags: - - Query - /cosmos/tx/v1beta1/decode: + - Service + /cosmos/tx/v1beta1/encode: post: description: 'Since: cosmos-sdk 0.47' - operationId: TxDecode + operationId: TxEncode parameters: - in: body name: body required: true schema: description: |- - TxDecodeRequest is the request type for the Service.TxDecode + TxEncodeRequest is the request type for the Service.TxEncode RPC method. - Since: cosmos-sdk 0.47 - properties: - tx_bytes: - description: tx_bytes is the raw transaction. - format: byte - type: string - type: object - responses: - '200': - description: A successful response. - schema: - description: |- - TxDecodeResponse is the response type for the - Service.TxDecode method. - Since: cosmos-sdk 0.47 properties: tx: @@ -30414,6 +32872,21 @@ paths: type: array type: object type: object + responses: + '200': + description: A successful response. + schema: + description: |- + TxEncodeResponse is the response type for the + Service.TxEncode method. + + Since: cosmos-sdk 0.47 + properties: + tx_bytes: + description: tx_bytes is the encoded transaction bytes. + format: byte + type: string + type: object default: description: An unexpected error response. schema: @@ -30436,29 +32909,28 @@ paths: message: type: string type: object - summary: TxDecode decodes the transaction. + summary: TxEncode encodes the transaction. tags: - Service - /cosmos/tx/v1beta1/decode/amino: + /cosmos/tx/v1beta1/encode/amino: post: description: 'Since: cosmos-sdk 0.47' - operationId: TxDecodeAmino + operationId: TxEncodeAmino parameters: - in: body name: body required: true schema: description: >- - TxDecodeAminoRequest is the request type for the - Service.TxDecodeAmino + TxEncodeAminoRequest is the request type for the + Service.TxEncodeAmino RPC method. Since: cosmos-sdk 0.47 properties: - amino_binary: - format: byte + amino_json: type: string type: object responses: @@ -30466,15 +32938,16 @@ paths: description: A successful response. schema: description: >- - TxDecodeAminoResponse is the response type for the - Service.TxDecodeAmino + TxEncodeAminoResponse is the response type for the + Service.TxEncodeAmino RPC method. Since: cosmos-sdk 0.47 properties: - amino_json: + amino_binary: + format: byte type: string type: object default: @@ -30499,23 +32972,20 @@ paths: message: type: string type: object - summary: TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON. + summary: TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes. tags: - Service - /cosmos/tx/v1beta1/encode: + /cosmos/tx/v1beta1/simulate: post: - description: 'Since: cosmos-sdk 0.47' - operationId: TxEncode + operationId: Simulate parameters: - in: body name: body required: true schema: description: |- - TxEncodeRequest is the request type for the Service.TxEncode + SimulateRequest is the request type for the Service.Simulate RPC method. - - Since: cosmos-sdk 0.47 properties: tx: description: Tx is the standard type used for broadcasting transactions. @@ -30924,84 +33394,108 @@ paths: type: string type: array type: object + tx_bytes: + description: |- + tx_bytes is the raw transaction. + + Since: cosmos-sdk 0.43 + format: byte + type: string type: object responses: '200': description: A successful response. schema: description: |- - TxEncodeResponse is the response type for the - Service.TxEncode method. - - Since: cosmos-sdk 0.47 - properties: - tx_bytes: - description: tx_bytes is the encoded transaction bytes. - format: byte - type: string - type: object - default: - description: An unexpected error response. - schema: + SimulateResponse is the response type for the + Service.SimulateRPC method. properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: TxEncode encodes the transaction. - tags: - - Service - /cosmos/tx/v1beta1/encode/amino: - post: - description: 'Since: cosmos-sdk 0.47' - operationId: TxEncodeAmino - parameters: - - in: body - name: body - required: true - schema: - description: >- - TxEncodeAminoRequest is the request type for the - Service.TxEncodeAmino + gas_info: + description: gas_info is the information about gas used in the simulation. + properties: + gas_used: + description: GasUsed is the amount of gas actually consumed. + format: uint64 + type: string + gas_wanted: + description: >- + GasWanted is the maximum units of work we allow this tx to + perform. + format: uint64 + type: string + type: object + result: + description: result is the result of the simulation. + properties: + data: + description: >- + Data is any data returned from message or handler + execution. It MUST be - RPC method. + length prefixed in order to separate data from multiple + message executions. + Deprecated. This field is still populated, but prefer + msg_response instead - Since: cosmos-sdk 0.47 - properties: - amino_json: - type: string - type: object - responses: - '200': - description: A successful response. - schema: - description: >- - TxEncodeAminoResponse is the response type for the - Service.TxEncodeAmino + because it also contains the Msg response typeURL. + format: byte + type: string + events: + description: >- + Events contains a slice of Event objects that were emitted + during message - RPC method. + or handler execution. + items: + description: >- + Event allows application developers to attach additional + information to + ResponseFinalizeBlock and ResponseCheckTx. - Since: cosmos-sdk 0.47 - properties: - amino_binary: - format: byte - type: string + Later, transactions may be queried using these events. + properties: + attributes: + items: + description: >- + EventAttribute is a single key-value pair, + associated with an event. + properties: + index: + type: boolean + key: + type: string + value: + type: string + type: object + type: array + type: + type: string + type: object + type: array + 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. + + + Since: cosmos-sdk 0.46 + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + type: object type: object default: description: An unexpected error response. @@ -31025,2659 +33519,2797 @@ paths: message: type: string type: object - summary: TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes. + summary: Simulate simulates executing a transaction for estimating gas usage. tags: - Service - /cosmos/tx/v1beta1/simulate: - post: - operationId: Simulate + /cosmos/tx/v1beta1/txs: + get: + operationId: GetTxsEvent parameters: - - in: body - name: body - required: true - schema: - description: |- - SimulateRequest is the request type for the Service.Simulate - RPC method. - properties: - tx: - description: Tx is the standard type used for broadcasting transactions. - properties: - auth_info: - title: >- - auth_info is the authorization related content of the - transaction, - - specifically signers, signer modes and fee - description: >- - AuthInfo describes the fee and signer modes that are used - to sign a - - transaction. - properties: - fee: - description: >- - Fee is the fee and gas limit for the transaction. The - first signer is the - - primary signer and the one which pays the fee. The fee - can be calculated - - based on the cost of evaluating the body and doing - signature verification - - of the signers. This can be estimated via simulation. - properties: - amount: - items: - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: amount is the amount of coins to be paid as a fee - type: array - gas_limit: - format: uint64 - title: >- - gas_limit is the maximum gas that can be used in - transaction processing - - before an out of gas error occurs - type: string - granter: - title: >- - if set, the fee payer (either the first signer or - the value of the payer field) requests that a fee - grant be used - - to pay fees instead of the fee payer's own - balance. If an appropriate fee grant does not - exist or the chain does - - not support fee grants, this will fail - type: string - payer: - description: >- - if unset, the first signer is responsible for - paying the fees. If set, the specified account - must pay the fees. - - the payer must be a tx signer (and thus have - signed this field in AuthInfo). - - setting this field does *not* change the ordering - of required signers for the transaction. - type: string - type: object - signer_infos: - description: >- - signer_infos defines the signing modes for the - required signers. The number - - and order of elements must match the required signers - from TxBody's - - messages. The first element is the primary signer and - the one which pays - - the fee. - items: - description: >- - SignerInfo describes the public key and signing mode - of a single top-level + - collectionFormat: multi + description: >- + events is the list of transaction event type. - signer. - properties: - mode_info: - title: >- - mode_info describes the signing mode of the - signer and is a nested + Deprecated post v0.47.x: use query instead, which should contain a + valid - structure to support nested multisig pubkey's - description: >- - ModeInfo describes the signing mode of a single - or nested multisig signer. - properties: - multi: - title: multi represents a nested multisig signer - properties: - bitarray: - title: >- - bitarray specifies which keys within the - multisig are signing - description: >- - CompactBitArray is an implementation of - a space efficient bit array. + events query. + in: query + items: + type: string + name: events + required: false + type: array + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. - This is used to ensure that the encoded - data takes up a minimal amount of + It is less efficient than using key. Only one of offset or key + should - space after proto encoding. + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. - This is not thread safe, and is not - intended for concurrent usage. - properties: - elems: - format: byte - type: string - extra_bits_stored: - format: int64 - type: integer - type: object - mode_infos: - items: {} - title: >- - mode_infos is the corresponding modes of - the signers of the multisig + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include - which could include nested multisig - public keys - type: array - type: object - single: - title: single represents a single signer - properties: - mode: - title: >- - mode is the signing mode of the single - signer - default: SIGN_MODE_UNSPECIFIED - description: >- - SignMode represents a signing mode with - its own security guarantees. + a count of the total number of items available for pagination in + UIs. + count_total is only respected when offset is used. It is ignored + when key - This enum should be considered a - registry of all known sign modes + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. - in the Cosmos ecosystem. Apps are not - expected to support all known - sign modes. Apps that would like to - support custom sign modes are + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + - default: ORDER_BY_UNSPECIFIED + description: |2- + - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults + to ASC in this case. + - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order + - ORDER_BY_DESC: ORDER_BY_DESC defines descending order + enum: + - ORDER_BY_UNSPECIFIED + - ORDER_BY_ASC + - ORDER_BY_DESC + in: query + name: order_by + required: false + type: string + - description: |- + page is the page number to query, starts at 1. If not provided, will + default to first page. + format: uint64 + in: query + name: page + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. - encouraged to open a small PR against - this file to add a new case + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: limit + required: false + type: string + - description: >- + query defines the transaction event query that is proxied to + Tendermint's - to this SignMode enum describing their - sign mode so that different + TxSearch RPC method. The query must be valid. - apps have a consistent version of this - enum. - - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be - rejected. - - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is - verified with raw bytes from Tx. - - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some - human-readable textual representation on - top of the binary representation + Since cosmos-sdk 0.50 + in: query + name: query + required: false + type: string + responses: + '200': + description: A successful response. + schema: + description: >- + GetTxsEventResponse is the response type for the + Service.TxsByEvents - from SIGN_MODE_DIRECT. + RPC method. + properties: + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the + corresponding request message has used PageRequest. - Since: cosmos-sdk 0.50 - - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses - SignDocDirectAux. As opposed to - SIGN_MODE_DIRECT, this sign mode does - not + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - require signers signing over other - signers' `signer_info`. + was set, its value is undefined otherwise + type: string + type: object + total: + format: uint64 + title: total is total number of results available + type: string + tx_responses: + description: tx_responses is the list of queried TxResponses. + items: + description: >- + TxResponse defines a structure containing relevant tx data + and metadata. The + tags are stringified and the log is JSON decoded. + properties: + code: + description: Response code. + format: int64 + type: integer + codespace: + title: Namespace for the Code + type: string + data: + description: Result bytes, if any. + type: string + events: + description: >- + Events defines all the events emitted by processing a + transaction. Note, - Since: cosmos-sdk 0.46 - - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses - Amino JSON and will be removed in the - future. - - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos - SDK. Ref: - https://eips.ethereum.org/EIPS/eip-191 + these events include those emitted by processing all the + messages and those + emitted from the ante. Whereas Logs contains the events, + with - Currently, SIGN_MODE_EIP_191 is - registered as a SignMode enum variant, + additional metadata, emitted only by processing the + messages. - but is not implemented on the SDK by - default. To enable EIP-191, you need - to pass a custom `TxConfig` that has an - implementation of + Since: cosmos-sdk 0.42.11, 0.44.5, 0.45 + items: + description: >- + Event allows application developers to attach + additional information to - `SignModeHandler` for EIP-191. The SDK - may decide to fully support + ResponseFinalizeBlock and ResponseCheckTx. - EIP-191 in the future. + Later, transactions may be queried using these events. + properties: + attributes: + items: + description: >- + EventAttribute is a single key-value pair, + associated with an event. + properties: + index: + type: boolean + key: + type: string + value: + type: string + type: object + type: array + type: + type: string + type: object + type: array + gas_used: + description: Amount of gas consumed by transaction. + format: int64 + type: string + gas_wanted: + description: Amount of gas requested for transaction. + format: int64 + type: string + height: + format: int64 + title: The block height + type: string + info: + description: Additional information. May be non-deterministic. + type: string + logs: + description: >- + The output of the application's logger (typed). May be + non-deterministic. + items: + description: >- + ABCIMessageLog defines a structure containing an + indexed tx ABCI message log. + properties: + events: + description: >- + Events contains a slice of Event objects that were + emitted during some + execution. + items: + description: >- + StringEvent defines en Event object wrapper + where all the attributes - Since: cosmos-sdk 0.45.2 - enum: - - SIGN_MODE_UNSPECIFIED - - SIGN_MODE_DIRECT - - SIGN_MODE_TEXTUAL - - SIGN_MODE_DIRECT_AUX - - SIGN_MODE_LEGACY_AMINO_JSON - - SIGN_MODE_EIP_191 - type: string - type: object - type: object - public_key: + contain key/value pairs that are strings instead + of raw bytes. properties: - type_url: - type: string - value: - format: byte + attributes: + items: + description: >- + Attribute defines an attribute wrapper + where the key and value are + + strings instead of raw bytes. + properties: + key: + type: string + value: + type: string + type: object + type: array + type: type: string type: object - description: >- - public_key is the public key of the signer. It - is optional for accounts + type: array + log: + type: string + msg_index: + format: int64 + type: integer + type: object + type: array + raw_log: + description: >- + The output of the application's logger (raw string). May + be - that already exist in state. If unset, the - verifier can use the required \ + non-deterministic. + type: string + timestamp: + description: >- + Time of the previous block. For heights > 1, it's the + weighted median of - signer address for this position and lookup the - public key. - sequence: - description: >- - sequence is the sequence of the account, which - describes the + the timestamps of the valid votes in the + block.LastCommit. For height == 1, - number of committed transactions signed by a - given address. It is used to + it's genesis time. + type: string + tx: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: The request transaction bytes. + txhash: + description: The transaction hash. + type: string + type: object + type: array + txs: + description: txs is the list of queried transactions. + items: + description: Tx is the standard type used for broadcasting transactions. + properties: + auth_info: + title: >- + auth_info is the authorization related content of the + transaction, - prevent replay attacks. - format: uint64 - type: string - type: object - type: array - tip: - description: >- - Tip is the optional tip used for transactions fees - paid in another denom. + specifically signers, signer modes and fee + description: >- + AuthInfo describes the fee and signer modes that are + used to sign a + transaction. + properties: + fee: + description: >- + Fee is the fee and gas limit for the transaction. + The first signer is the - This field is ignored if the chain didn't enable tips, - i.e. didn't add the + primary signer and the one which pays the fee. The + fee can be calculated - `TipDecorator` in its posthandler. + based on the cost of evaluating the body and doing + signature verification + of the signers. This can be estimated via + simulation. + properties: + amount: + items: + description: >- + Coin defines a token with a denomination and + an amount. - Since: cosmos-sdk 0.46 - properties: - amount: - items: - description: >- - Coin defines a token with a denomination and an - amount. + NOTE: The amount field is an Int which + implements the custom method - NOTE: The amount field is an Int which - implements the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + amount is the amount of coins to be paid as a + fee + type: array + gas_limit: + format: uint64 + title: >- + gas_limit is the maximum gas that can be used in + transaction processing - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: amount is the amount of the tip - type: array - tipper: - title: >- - tipper is the address of the account paying for - the tip - type: string - type: object - type: object - body: - title: body is the processable content of the transaction - description: >- - TxBody is the body of a transaction that all signers sign - over. - properties: - extension_options: - items: - properties: - type_url: - type: string - value: - format: byte + before an out of gas error occurs type: string - type: object - title: >- - extension_options are arbitrary options that can be - added by chains + granter: + title: >- + if set, the fee payer (either the first signer + or the value of the payer field) requests that a + fee grant be used - when the default options are not sufficient. If any of - these are present + to pay fees instead of the fee payer's own + balance. If an appropriate fee grant does not + exist or the chain does - and can't be handled, the transaction will be rejected - type: array - memo: - description: >- - memo is any arbitrary note/comment to be added to the - transaction. + not support fee grants, this will fail + type: string + payer: + description: >- + if unset, the first signer is responsible for + paying the fees. If set, the specified account + must pay the fees. - WARNING: in clients, any publicly exposed text should - not be called memo, + the payer must be a tx signer (and thus have + signed this field in AuthInfo). - but should be called `note` instead (see - https://github.com/cosmos/cosmos-sdk/issues/9122). - type: string - messages: - description: >- - messages is a list of messages to be executed. The - required signers of + setting this field does *not* change the + ordering of required signers for the + transaction. + type: string + type: object + signer_infos: + description: >- + signer_infos defines the signing modes for the + required signers. The number - those messages define the number and order of elements - in AuthInfo's + and order of elements must match the required + signers from TxBody's - signer_infos and Tx's signatures. Each required signer - address is added to + messages. The first element is the primary signer + and the one which pays - the list only the first time it occurs. + the fee. + items: + description: >- + SignerInfo describes the public key and signing + mode of a single top-level - By convention, the first required signer (usually from - the first message) + signer. + properties: + mode_info: + title: >- + mode_info describes the signing mode of the + signer and is a nested - is referred to as the primary signer and pays the fee - for the whole + structure to support nested multisig pubkey's + description: >- + ModeInfo describes the signing mode of a + single or nested multisig signer. + properties: + multi: + title: multi represents a nested multisig signer + properties: + bitarray: + title: >- + bitarray specifies which keys within the + multisig are signing + description: >- + CompactBitArray is an implementation of + a space efficient bit array. - transaction. - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - non_critical_extension_options: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: >- - extension_options are arbitrary options that can be - added by chains + This is used to ensure that the encoded + data takes up a minimal amount of - when the default options are not sufficient. If any of - these are present + space after proto encoding. - and can't be handled, they will be ignored - type: array - timeout_height: - format: uint64 - title: >- - timeout is the block height after which this - transaction will not + This is not thread safe, and is not + intended for concurrent usage. + properties: + elems: + format: byte + type: string + extra_bits_stored: + format: int64 + type: integer + type: object + mode_infos: + items: {} + title: >- + mode_infos is the corresponding modes of + the signers of the multisig - be processed by the chain - type: string - type: object - signatures: - description: >- - signatures is a list of signatures that matches the length - and order of + which could include nested multisig + public keys + type: array + type: object + single: + title: single represents a single signer + properties: + mode: + title: >- + mode is the signing mode of the single + signer + default: SIGN_MODE_UNSPECIFIED + description: >- + SignMode represents a signing mode with + its own security guarantees. - AuthInfo's signer_infos to allow connecting signature meta - information like - public key and signing mode by position. - items: - format: byte - type: string - type: array - type: object - tx_bytes: - description: |- - tx_bytes is the raw transaction. + This enum should be considered a + registry of all known sign modes - Since: cosmos-sdk 0.43 - format: byte - type: string - type: object - responses: - '200': - description: A successful response. - schema: - description: |- - SimulateResponse is the response type for the - Service.SimulateRPC method. - properties: - gas_info: - description: gas_info is the information about gas used in the simulation. - properties: - gas_used: - description: GasUsed is the amount of gas actually consumed. - format: uint64 - type: string - gas_wanted: - description: >- - GasWanted is the maximum units of work we allow this tx to - perform. - format: uint64 - type: string - type: object - result: - description: result is the result of the simulation. - properties: - data: - description: >- - Data is any data returned from message or handler - execution. It MUST be + in the Cosmos ecosystem. Apps are not + expected to support all known - length prefixed in order to separate data from multiple - message executions. + sign modes. Apps that would like to + support custom sign modes are - Deprecated. This field is still populated, but prefer - msg_response instead + encouraged to open a small PR against + this file to add a new case - because it also contains the Msg response typeURL. - format: byte - type: string - events: - description: >- - Events contains a slice of Event objects that were emitted - during message + to this SignMode enum describing their + sign mode so that different - or handler execution. - items: - description: >- - Event allows application developers to attach additional - information to + apps have a consistent version of this + enum. - ResponseFinalizeBlock and ResponseCheckTx. + - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be + rejected. + - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is + verified with raw bytes from Tx. + - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some + human-readable textual representation on + top of the binary representation - Later, transactions may be queried using these events. - properties: - attributes: - items: - description: >- - EventAttribute is a single key-value pair, - associated with an event. - properties: - index: - type: boolean - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - type: array - 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. + from SIGN_MODE_DIRECT. - Since: cosmos-sdk 0.46 - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - type: object - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: Simulate simulates executing a transaction for estimating gas usage. - tags: - - Service - /cosmos/tx/v1beta1/txs: - get: - operationId: GetTxsEvent - parameters: - - collectionFormat: multi - description: >- - events is the list of transaction event type. + Since: cosmos-sdk 0.50 + - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses + SignDocDirectAux. As opposed to + SIGN_MODE_DIRECT, this sign mode does + not - Deprecated post v0.47.x: use query instead, which should contain a - valid + require signers signing over other + signers' `signer_info`. - events query. - in: query - items: - type: string - name: events - required: false - type: array - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - It is less efficient than using key. Only one of offset or key - should + Since: cosmos-sdk 0.46 + - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses + Amino JSON and will be removed in the + future. + - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos + SDK. Ref: + https://eips.ethereum.org/EIPS/eip-191 - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include + Currently, SIGN_MODE_EIP_191 is + registered as a SignMode enum variant, - a count of the total number of items available for pagination in - UIs. + but is not implemented on the SDK by + default. To enable EIP-191, you need - count_total is only respected when offset is used. It is ignored - when key + to pass a custom `TxConfig` that has an + implementation of - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. + `SignModeHandler` for EIP-191. The SDK + may decide to fully support + EIP-191 in the future. - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean - - default: ORDER_BY_UNSPECIFIED - description: |2- - - ORDER_BY_UNSPECIFIED: ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults - to ASC in this case. - - ORDER_BY_ASC: ORDER_BY_ASC defines ascending order - - ORDER_BY_DESC: ORDER_BY_DESC defines descending order - enum: - - ORDER_BY_UNSPECIFIED - - ORDER_BY_ASC - - ORDER_BY_DESC - in: query - name: order_by - required: false - type: string - - description: |- - page is the page number to query, starts at 1. If not provided, will - default to first page. - format: uint64 - in: query - name: page - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: limit - required: false - type: string - - description: >- - query defines the transaction event query that is proxied to - Tendermint's + Since: cosmos-sdk 0.45.2 + enum: + - SIGN_MODE_UNSPECIFIED + - SIGN_MODE_DIRECT + - SIGN_MODE_TEXTUAL + - SIGN_MODE_DIRECT_AUX + - SIGN_MODE_LEGACY_AMINO_JSON + - SIGN_MODE_EIP_191 + type: string + type: object + type: object + public_key: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + public_key is the public key of the signer. It + is optional for accounts - TxSearch RPC method. The query must be valid. + that already exist in state. If unset, the + verifier can use the required \ + signer address for this position and lookup + the public key. + sequence: + description: >- + sequence is the sequence of the account, which + describes the - Since cosmos-sdk 0.50 - in: query - name: query - required: false - type: string - responses: - '200': - description: A successful response. - schema: - description: >- - GetTxsEventResponse is the response type for the - Service.TxsByEvents + number of committed transactions signed by a + given address. It is used to - RPC method. - properties: - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the + prevent replay attacks. + format: uint64 + type: string + type: object + type: array + tip: + description: >- + Tip is the optional tip used for transactions fees + paid in another denom. - corresponding request message has used PageRequest. - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + This field is ignored if the chain didn't enable + tips, i.e. didn't add the - was set, its value is undefined otherwise - type: string - type: object - total: - format: uint64 - title: total is total number of results available - type: string - tx_responses: - description: tx_responses is the list of queried TxResponses. - items: - description: >- - TxResponse defines a structure containing relevant tx data - and metadata. The + `TipDecorator` in its posthandler. - tags are stringified and the log is JSON decoded. - properties: - code: - description: Response code. - format: int64 - type: integer - codespace: - title: Namespace for the Code - type: string - data: - description: Result bytes, if any. - type: string - events: + + Since: cosmos-sdk 0.46 + properties: + amount: + items: + description: >- + Coin defines a token with a denomination and + an amount. + + + NOTE: The amount field is an Int which + implements the custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: amount is the amount of the tip + type: array + tipper: + title: >- + tipper is the address of the account paying for + the tip + type: string + type: object + type: object + body: + title: body is the processable content of the transaction description: >- - Events defines all the events emitted by processing a - transaction. Note, + TxBody is the body of a transaction that all signers + sign over. + properties: + extension_options: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: >- + extension_options are arbitrary options that can be + added by chains - these events include those emitted by processing all the - messages and those + when the default options are not sufficient. If any + of these are present - emitted from the ante. Whereas Logs contains the events, - with + and can't be handled, the transaction will be + rejected + type: array + memo: + description: >- + memo is any arbitrary note/comment to be added to + the transaction. - additional metadata, emitted only by processing the - messages. + WARNING: in clients, any publicly exposed text + should not be called memo, + but should be called `note` instead (see + https://github.com/cosmos/cosmos-sdk/issues/9122). + type: string + messages: + description: >- + messages is a list of messages to be executed. The + required signers of - Since: cosmos-sdk 0.42.11, 0.44.5, 0.45 - items: - description: >- - Event allows application developers to attach - additional information to + those messages define the number and order of + elements in AuthInfo's - ResponseFinalizeBlock and ResponseCheckTx. + signer_infos and Tx's signatures. Each required + signer address is added to - Later, transactions may be queried using these events. - properties: - attributes: - items: - description: >- - EventAttribute is a single key-value pair, - associated with an event. - properties: - index: - type: boolean - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - type: array - gas_used: - description: Amount of gas consumed by transaction. - format: int64 - type: string - gas_wanted: - description: Amount of gas requested for transaction. - format: int64 - type: string - height: - format: int64 - title: The block height - type: string - info: - description: Additional information. May be non-deterministic. - type: string - logs: - description: >- - The output of the application's logger (typed). May be - non-deterministic. - items: - description: >- - ABCIMessageLog defines a structure containing an - indexed tx ABCI message log. - properties: - events: - description: >- - Events contains a slice of Event objects that were - emitted during some + the list only the first time it occurs. - execution. - items: - description: >- - StringEvent defines en Event object wrapper - where all the attributes + By convention, the first required signer (usually + from the first message) - contain key/value pairs that are strings instead - of raw bytes. - properties: - attributes: - items: - description: >- - Attribute defines an attribute wrapper - where the key and value are + is referred to as the primary signer and pays the + fee for the whole - strings instead of raw bytes. - properties: - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - type: array - log: - type: string - msg_index: - format: int64 - type: integer - type: object - type: array - raw_log: - description: >- - The output of the application's logger (raw string). May - be + transaction. + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + non_critical_extension_options: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: >- + extension_options are arbitrary options that can be + added by chains - non-deterministic. - type: string - timestamp: - description: >- - Time of the previous block. For heights > 1, it's the - weighted median of + when the default options are not sufficient. If any + of these are present - the timestamps of the valid votes in the - block.LastCommit. For height == 1, + and can't be handled, they will be ignored + type: array + timeout_height: + format: uint64 + title: >- + timeout is the block height after which this + transaction will not - it's genesis time. - type: string - tx: - properties: - type_url: - type: string - value: - format: byte + be processed by the chain type: string type: object - description: The request transaction bytes. - txhash: - description: The transaction hash. - type: string + signatures: + description: >- + signatures is a list of signatures that matches the + length and order of + + AuthInfo's signer_infos to allow connecting signature + meta information like + + public key and signing mode by position. + items: + format: byte + type: string + type: array type: object type: array - txs: - description: txs is the list of queried transactions. + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: items: - description: Tx is the standard type used for broadcasting transactions. properties: - auth_info: - title: >- - auth_info is the authorization related content of the - transaction, - - specifically signers, signer modes and fee - description: >- - AuthInfo describes the fee and signer modes that are - used to sign a - - transaction. - properties: - fee: - description: >- - Fee is the fee and gas limit for the transaction. - The first signer is the - - primary signer and the one which pays the fee. The - fee can be calculated - - based on the cost of evaluating the body and doing - signature verification - - of the signers. This can be estimated via - simulation. - properties: - amount: - items: - description: >- - Coin defines a token with a denomination and - an amount. - + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: GetTxsEvent fetches txs by event. + tags: + - Service + post: + operationId: BroadcastTx + parameters: + - in: body + name: body + required: true + schema: + description: >- + BroadcastTxRequest is the request type for the + Service.BroadcastTxRequest - NOTE: The amount field is an Int which - implements the custom method + RPC method. + properties: + mode: + default: BROADCAST_MODE_UNSPECIFIED + description: >- + BroadcastMode specifies the broadcast mode for the + TxService.Broadcast RPC - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: >- - amount is the amount of coins to be paid as a - fee - type: array - gas_limit: - format: uint64 - title: >- - gas_limit is the maximum gas that can be used in - transaction processing + method. - before an out of gas error occurs - type: string - granter: - title: >- - if set, the fee payer (either the first signer - or the value of the payer field) requests that a - fee grant be used + - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering + - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead, + BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x + onwards. + - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits + for a CheckTx execution response only. + - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client + returns immediately. + enum: + - BROADCAST_MODE_UNSPECIFIED + - BROADCAST_MODE_BLOCK + - BROADCAST_MODE_SYNC + - BROADCAST_MODE_ASYNC + type: string + tx_bytes: + description: tx_bytes is the raw transaction. + format: byte + type: string + type: object + responses: + '200': + description: A successful response. + schema: + description: |- + BroadcastTxResponse is the response type for the + Service.BroadcastTx method. + properties: + tx_response: + description: tx_response is the queried TxResponses. + properties: + code: + description: Response code. + format: int64 + type: integer + codespace: + title: Namespace for the Code + type: string + data: + description: Result bytes, if any. + type: string + events: + description: >- + Events defines all the events emitted by processing a + transaction. Note, - to pay fees instead of the fee payer's own - balance. If an appropriate fee grant does not - exist or the chain does + these events include those emitted by processing all the + messages and those - not support fee grants, this will fail - type: string - payer: - description: >- - if unset, the first signer is responsible for - paying the fees. If set, the specified account - must pay the fees. + emitted from the ante. Whereas Logs contains the events, + with - the payer must be a tx signer (and thus have - signed this field in AuthInfo). + additional metadata, emitted only by processing the + messages. - setting this field does *not* change the - ordering of required signers for the - transaction. - type: string - type: object - signer_infos: - description: >- - signer_infos defines the signing modes for the - required signers. The number - and order of elements must match the required - signers from TxBody's + Since: cosmos-sdk 0.42.11, 0.44.5, 0.45 + items: + description: >- + Event allows application developers to attach additional + information to - messages. The first element is the primary signer - and the one which pays + ResponseFinalizeBlock and ResponseCheckTx. - the fee. + Later, transactions may be queried using these events. + properties: + attributes: items: description: >- - SignerInfo describes the public key and signing - mode of a single top-level - - signer. + EventAttribute is a single key-value pair, + associated with an event. properties: - mode_info: - title: >- - mode_info describes the signing mode of the - signer and is a nested - - structure to support nested multisig pubkey's - description: >- - ModeInfo describes the signing mode of a - single or nested multisig signer. - properties: - multi: - title: multi represents a nested multisig signer - properties: - bitarray: - title: >- - bitarray specifies which keys within the - multisig are signing - description: >- - CompactBitArray is an implementation of - a space efficient bit array. - - This is used to ensure that the encoded - data takes up a minimal amount of - - space after proto encoding. - - This is not thread safe, and is not - intended for concurrent usage. - properties: - elems: - format: byte - type: string - extra_bits_stored: - format: int64 - type: integer - type: object - mode_infos: - items: {} - title: >- - mode_infos is the corresponding modes of - the signers of the multisig - - which could include nested multisig - public keys - type: array - type: object - single: - title: single represents a single signer - properties: - mode: - title: >- - mode is the signing mode of the single - signer - default: SIGN_MODE_UNSPECIFIED - description: >- - SignMode represents a signing mode with - its own security guarantees. - - - This enum should be considered a - registry of all known sign modes + index: + type: boolean + key: + type: string + value: + type: string + type: object + type: array + type: + type: string + type: object + type: array + gas_used: + description: Amount of gas consumed by transaction. + format: int64 + type: string + gas_wanted: + description: Amount of gas requested for transaction. + format: int64 + type: string + height: + format: int64 + title: The block height + type: string + info: + description: Additional information. May be non-deterministic. + type: string + logs: + description: >- + The output of the application's logger (typed). May be + non-deterministic. + items: + description: >- + ABCIMessageLog defines a structure containing an indexed + tx ABCI message log. + properties: + events: + description: >- + Events contains a slice of Event objects that were + emitted during some - in the Cosmos ecosystem. Apps are not - expected to support all known + execution. + items: + description: >- + StringEvent defines en Event object wrapper where + all the attributes - sign modes. Apps that would like to - support custom sign modes are + contain key/value pairs that are strings instead + of raw bytes. + properties: + attributes: + items: + description: >- + Attribute defines an attribute wrapper where + the key and value are - encouraged to open a small PR against - this file to add a new case + strings instead of raw bytes. + properties: + key: + type: string + value: + type: string + type: object + type: array + type: + type: string + type: object + type: array + log: + type: string + msg_index: + format: int64 + type: integer + type: object + type: array + raw_log: + description: >- + The output of the application's logger (raw string). May + be - to this SignMode enum describing their - sign mode so that different + non-deterministic. + type: string + timestamp: + description: >- + Time of the previous block. For heights > 1, it's the + weighted median of - apps have a consistent version of this - enum. + the timestamps of the valid votes in the block.LastCommit. + For height == 1, - - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be - rejected. - - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is - verified with raw bytes from Tx. - - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some - human-readable textual representation on - top of the binary representation + it's genesis time. + type: string + tx: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: The request transaction bytes. + txhash: + description: The transaction hash. + type: string + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: BroadcastTx broadcast transaction. + tags: + - Service + /cosmos/tx/v1beta1/txs/block/{height}: + get: + description: 'Since: cosmos-sdk 0.45.2' + operationId: GetBlockWithTxs + parameters: + - description: height is the height of the block to query. + format: int64 + in: path + name: height + required: true + type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. - from SIGN_MODE_DIRECT. + It is less efficient than using key. Only one of offset or key + should + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. - Since: cosmos-sdk 0.50 - - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses - SignDocDirectAux. As opposed to - SIGN_MODE_DIRECT, this sign mode does - not + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include - require signers signing over other - signers' `signer_info`. + a count of the total number of items available for pagination in + UIs. + count_total is only respected when offset is used. It is ignored + when key - Since: cosmos-sdk 0.46 - - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses - Amino JSON and will be removed in the - future. - - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos - SDK. Ref: - https://eips.ethereum.org/EIPS/eip-191 + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. - Currently, SIGN_MODE_EIP_191 is - registered as a SignMode enum variant, + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + responses: + '200': + description: A successful response. + schema: + description: >- + GetBlockWithTxsResponse is the response type for the + Service.GetBlockWithTxs - but is not implemented on the SDK by - default. To enable EIP-191, you need + method. - to pass a custom `TxConfig` that has an - implementation of - `SignModeHandler` for EIP-191. The SDK - may decide to fully support + Since: cosmos-sdk 0.45.2 + properties: + block: + properties: + data: + properties: + txs: + description: >- + Txs that will be applied by state @ block.Height+1. - EIP-191 in the future. + NOTE: not all txs here are valid. We're just agreeing + on the order first. + This means that block.AppHash does not include these + txs. + items: + format: byte + type: string + type: array + title: >- + Data contains the set of transactions included in the + block + type: object + evidence: + properties: + evidence: + items: + properties: + duplicate_vote_evidence: + description: >- + DuplicateVoteEvidence contains evidence of a + validator signed two conflicting votes. + properties: + timestamp: + format: date-time + type: string + total_voting_power: + format: int64 + type: string + validator_power: + format: int64 + type: string + vote_a: + description: >- + Vote represents a prevote or precommit vote + from validators for - Since: cosmos-sdk 0.45.2 - enum: - - SIGN_MODE_UNSPECIFIED - - SIGN_MODE_DIRECT - - SIGN_MODE_TEXTUAL - - SIGN_MODE_DIRECT_AUX - - SIGN_MODE_LEGACY_AMINO_JSON - - SIGN_MODE_EIP_191 - type: string - type: object - type: object - public_key: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - description: >- - public_key is the public key of the signer. It - is optional for accounts + consensus. + properties: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + extension: + description: >- + Vote extension provided by the + application. Only valid for precommit - that already exist in state. If unset, the - verifier can use the required \ + messages. + format: byte + type: string + extension_signature: + description: >- + Vote extension signature by the + validator if they participated in - signer address for this position and lookup - the public key. - sequence: - description: >- - sequence is the sequence of the account, which - describes the + consensus for the associated block. - number of committed transactions signed by a - given address. It is used to + Only valid for precommit messages. + format: byte + type: string + height: + format: int64 + type: string + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they + participated in consensus for the - prevent replay attacks. - format: uint64 - type: string - type: object - type: array - tip: - description: >- - Tip is the optional tip used for transactions fees - paid in another denom. + associated block. + format: byte + type: string + timestamp: + format: date-time + type: string + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed + message in the consensus. + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: + format: byte + type: string + validator_index: + format: int32 + type: integer + type: object + vote_b: + description: >- + Vote represents a prevote or precommit vote + from validators for - This field is ignored if the chain didn't enable - tips, i.e. didn't add the + consensus. + properties: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + extension: + description: >- + Vote extension provided by the + application. Only valid for precommit - `TipDecorator` in its posthandler. + messages. + format: byte + type: string + extension_signature: + description: >- + Vote extension signature by the + validator if they participated in + consensus for the associated block. - Since: cosmos-sdk 0.46 - properties: - amount: - items: - description: >- - Coin defines a token with a denomination and - an amount. + Only valid for precommit messages. + format: byte + type: string + height: + format: int64 + type: string + round: + format: int32 + type: integer + signature: + description: >- + Vote signature by the validator if they + participated in consensus for the + + associated block. + format: byte + type: string + timestamp: + format: date-time + type: string + type: + default: SIGNED_MSG_TYPE_UNKNOWN + description: >- + SignedMsgType is a type of signed + message in the consensus. + - SIGNED_MSG_TYPE_PREVOTE: Votes + - SIGNED_MSG_TYPE_PROPOSAL: Proposals + enum: + - SIGNED_MSG_TYPE_UNKNOWN + - SIGNED_MSG_TYPE_PREVOTE + - SIGNED_MSG_TYPE_PRECOMMIT + - SIGNED_MSG_TYPE_PROPOSAL + type: string + validator_address: + format: byte + type: string + validator_index: + format: int32 + type: integer + type: object + type: object + light_client_attack_evidence: + description: >- + LightClientAttackEvidence contains evidence of a + set of validators attempting to mislead a light + client. + properties: + byzantine_validators: + items: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for + use with Validators + type: object + voting_power: + format: int64 + type: string + type: object + type: array + common_height: + format: int64 + type: string + conflicting_block: + properties: + signed_header: + properties: + commit: + description: >- + Commit contains the evidence that a + block was committed by a set of + validators. + properties: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + height: + format: int64 + type: string + round: + format: int32 + type: integer + signatures: + items: + description: >- + CommitSig is a part of the Vote included + in a Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: >- + BlockIdFlag indicates which BlockID the + signature is for + type: string + signature: + format: byte + type: string + timestamp: + format: date-time + type: string + validator_address: + format: byte + type: string + type: object + type: array + type: object + header: + description: >- + Header defines the structure of a block + header. + properties: + app_hash: + format: byte + type: string + chain_id: + type: string + consensus_hash: + format: byte + type: string + data_hash: + format: byte + type: string + evidence_hash: + format: byte + title: consensus info + type: string + height: + format: int64 + type: string + last_block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + last_commit_hash: + format: byte + title: hashes of block data + type: string + last_results_hash: + format: byte + type: string + next_validators_hash: + format: byte + type: string + proposer_address: + format: byte + type: string + time: + format: date-time + type: string + validators_hash: + format: byte + title: >- + hashes from the app output from the prev + block + type: string + version: + title: basic block info + description: >- + Consensus captures the consensus rules + for processing a block in the + blockchain, - NOTE: The amount field is an Int which - implements the custom method + including all blockchain data structures + and the rules of the application's - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: amount is the amount of the tip - type: array - tipper: - title: >- - tipper is the address of the account paying for - the tip - type: string + state transition machine. + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + type: object + type: object + type: object + validator_set: + properties: + proposer: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for + use with Validators + type: object + voting_power: + format: int64 + type: string + type: object + total_voting_power: + format: int64 + type: string + validators: + items: + properties: + address: + format: byte + type: string + proposer_priority: + format: int64 + type: string + pub_key: + properties: + ed25519: + format: byte + type: string + secp256k1: + format: byte + type: string + title: >- + PublicKey defines the keys available for + use with Validators + type: object + voting_power: + format: int64 + type: string + type: object + type: array + type: object + type: object + timestamp: + format: date-time + type: string + total_voting_power: + format: int64 + type: string + type: object type: object - type: object - body: - title: body is the processable content of the transaction - description: >- - TxBody is the body of a transaction that all signers - sign over. - properties: - extension_options: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: >- - extension_options are arbitrary options that can be - added by chains - - when the default options are not sufficient. If any - of these are present - - and can't be handled, the transaction will be - rejected - type: array - memo: - description: >- - memo is any arbitrary note/comment to be added to - the transaction. - - WARNING: in clients, any publicly exposed text - should not be called memo, - - but should be called `note` instead (see - https://github.com/cosmos/cosmos-sdk/issues/9122). - type: string - messages: - description: >- - messages is a list of messages to be executed. The - required signers of - - those messages define the number and order of - elements in AuthInfo's - - signer_infos and Tx's signatures. Each required - signer address is added to - - the list only the first time it occurs. - - By convention, the first required signer (usually - from the first message) - - is referred to as the primary signer and pays the - fee for the whole - - transaction. - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - non_critical_extension_options: - items: + type: array + type: object + header: + description: Header defines the structure of a block header. + properties: + app_hash: + format: byte + type: string + chain_id: + type: string + consensus_hash: + format: byte + type: string + data_hash: + format: byte + type: string + evidence_hash: + format: byte + title: consensus info + type: string + height: + format: int64 + type: string + last_block_id: + properties: + hash: + format: byte + type: string + part_set_header: properties: - type_url: - type: string - value: + hash: format: byte type: string + total: + format: int64 + type: integer + title: PartsetHeader type: object - title: >- - extension_options are arbitrary options that can be - added by chains - - when the default options are not sufficient. If any - of these are present - - and can't be handled, they will be ignored - type: array - timeout_height: - format: uint64 - title: >- - timeout is the block height after which this - transaction will not - - be processed by the chain - type: string - type: object - signatures: - description: >- - signatures is a list of signatures that matches the - length and order of + title: BlockID + type: object + last_commit_hash: + format: byte + title: hashes of block data + type: string + last_results_hash: + format: byte + type: string + next_validators_hash: + format: byte + type: string + proposer_address: + format: byte + type: string + time: + format: date-time + type: string + validators_hash: + format: byte + title: hashes from the app output from the prev block + type: string + version: + title: basic block info + description: >- + Consensus captures the consensus rules for processing + a block in the blockchain, - AuthInfo's signer_infos to allow connecting signature - meta information like + including all blockchain data structures and the rules + of the application's - public key and signing mode by position. - items: + state transition machine. + properties: + app: + format: uint64 + type: string + block: + format: uint64 + type: string + type: object + type: object + last_commit: + description: >- + Commit contains the evidence that a block was committed by + a set of validators. + properties: + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: + format: byte + type: string + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + height: + format: int64 + type: string + round: + format: int32 + type: integer + signatures: + items: + description: >- + CommitSig is a part of the Vote included in a + Commit. + properties: + block_id_flag: + default: BLOCK_ID_FLAG_UNKNOWN + enum: + - BLOCK_ID_FLAG_UNKNOWN + - BLOCK_ID_FLAG_ABSENT + - BLOCK_ID_FLAG_COMMIT + - BLOCK_ID_FLAG_NIL + title: >- + BlockIdFlag indicates which BlockID the + signature is for + type: string + signature: + format: byte + type: string + timestamp: + format: date-time + type: string + validator_address: + format: byte + type: string + type: object + type: array + type: object + type: object + block_id: + properties: + hash: + format: byte + type: string + part_set_header: + properties: + hash: format: byte type: string - type: array - type: object - type: array - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: GetTxsEvent fetches txs by event. - tags: - - Service - post: - operationId: BroadcastTx - parameters: - - in: body - name: body - required: true - schema: - description: >- - BroadcastTxRequest is the request type for the - Service.BroadcastTxRequest - - RPC method. - properties: - mode: - default: BROADCAST_MODE_UNSPECIFIED + total: + format: int64 + type: integer + title: PartsetHeader + type: object + title: BlockID + type: object + pagination: description: >- - BroadcastMode specifies the broadcast mode for the - TxService.Broadcast RPC + PageResponse is to be embedded in gRPC response messages where + the - method. + corresponding request message has used PageRequest. - - BROADCAST_MODE_UNSPECIFIED: zero-value for mode ordering - - BROADCAST_MODE_BLOCK: DEPRECATED: use BROADCAST_MODE_SYNC instead, - BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x - onwards. - - BROADCAST_MODE_SYNC: BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits - for a CheckTx execution response only. - - BROADCAST_MODE_ASYNC: BROADCAST_MODE_ASYNC defines a tx broadcasting mode where the client - returns immediately. - enum: - - BROADCAST_MODE_UNSPECIFIED - - BROADCAST_MODE_BLOCK - - BROADCAST_MODE_SYNC - - BROADCAST_MODE_ASYNC - type: string - tx_bytes: - description: tx_bytes is the raw transaction. - format: byte - type: string - type: object - responses: - '200': - description: A successful response. - schema: - description: |- - BroadcastTxResponse is the response type for the - Service.BroadcastTx method. - properties: - tx_response: - description: tx_response is the queried TxResponses. + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } properties: - code: - description: Response code. - format: int64 - type: integer - codespace: - title: Namespace for the Code - type: string - data: - description: Result bytes, if any. + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte type: string - events: - description: >- - Events defines all the events emitted by processing a - transaction. Note, + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + txs: + description: txs are the transactions in the block. + items: + description: Tx is the standard type used for broadcasting transactions. + properties: + auth_info: + title: >- + auth_info is the authorization related content of the + transaction, - these events include those emitted by processing all the - messages and those + specifically signers, signer modes and fee + description: >- + AuthInfo describes the fee and signer modes that are + used to sign a - emitted from the ante. Whereas Logs contains the events, - with + transaction. + properties: + fee: + description: >- + Fee is the fee and gas limit for the transaction. + The first signer is the - additional metadata, emitted only by processing the - messages. + primary signer and the one which pays the fee. The + fee can be calculated + based on the cost of evaluating the body and doing + signature verification - Since: cosmos-sdk 0.42.11, 0.44.5, 0.45 - items: - description: >- - Event allows application developers to attach additional - information to + of the signers. This can be estimated via + simulation. + properties: + amount: + items: + description: >- + Coin defines a token with a denomination and + an amount. - ResponseFinalizeBlock and ResponseCheckTx. - Later, transactions may be queried using these events. - properties: - attributes: - items: - description: >- - EventAttribute is a single key-value pair, - associated with an event. - properties: - index: - type: boolean - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - type: array - gas_used: - description: Amount of gas consumed by transaction. - format: int64 - type: string - gas_wanted: - description: Amount of gas requested for transaction. - format: int64 - type: string - height: - format: int64 - title: The block height - type: string - info: - description: Additional information. May be non-deterministic. - type: string - logs: - description: >- - The output of the application's logger (typed). May be - non-deterministic. - items: - description: >- - ABCIMessageLog defines a structure containing an indexed - tx ABCI message log. - properties: - events: - description: >- - Events contains a slice of Event objects that were - emitted during some + NOTE: The amount field is an Int which + implements the custom method - execution. - items: - description: >- - StringEvent defines en Event object wrapper where - all the attributes + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + amount is the amount of coins to be paid as a + fee + type: array + gas_limit: + format: uint64 + title: >- + gas_limit is the maximum gas that can be used in + transaction processing - contain key/value pairs that are strings instead - of raw bytes. - properties: - attributes: - items: - description: >- - Attribute defines an attribute wrapper where - the key and value are + before an out of gas error occurs + type: string + granter: + title: >- + if set, the fee payer (either the first signer + or the value of the payer field) requests that a + fee grant be used - strings instead of raw bytes. - properties: - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - type: array - log: - type: string - msg_index: - format: int64 - type: integer - type: object - type: array - raw_log: - description: >- - The output of the application's logger (raw string). May - be + to pay fees instead of the fee payer's own + balance. If an appropriate fee grant does not + exist or the chain does - non-deterministic. - type: string - timestamp: - description: >- - Time of the previous block. For heights > 1, it's the - weighted median of + not support fee grants, this will fail + type: string + payer: + description: >- + if unset, the first signer is responsible for + paying the fees. If set, the specified account + must pay the fees. - the timestamps of the valid votes in the block.LastCommit. - For height == 1, + the payer must be a tx signer (and thus have + signed this field in AuthInfo). - it's genesis time. - type: string - tx: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - description: The request transaction bytes. - txhash: - description: The transaction hash. - type: string - type: object - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: BroadcastTx broadcast transaction. - tags: - - Service - /cosmos/tx/v1beta1/txs/block/{height}: - get: - description: 'Since: cosmos-sdk 0.45.2' - operationId: GetBlockWithTxs - parameters: - - description: height is the height of the block to query. - format: int64 - in: path - name: height - required: true - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. + setting this field does *not* change the + ordering of required signers for the + transaction. + type: string + type: object + signer_infos: + description: >- + signer_infos defines the signing modes for the + required signers. The number + + and order of elements must match the required + signers from TxBody's + + messages. The first element is the primary signer + and the one which pays + + the fee. + items: + description: >- + SignerInfo describes the public key and signing + mode of a single top-level - It is less efficient than using key. Only one of offset or key - should + signer. + properties: + mode_info: + title: >- + mode_info describes the signing mode of the + signer and is a nested - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. + structure to support nested multisig pubkey's + description: >- + ModeInfo describes the signing mode of a + single or nested multisig signer. + properties: + multi: + title: multi represents a nested multisig signer + properties: + bitarray: + title: >- + bitarray specifies which keys within the + multisig are signing + description: >- + CompactBitArray is an implementation of + a space efficient bit array. - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include + This is used to ensure that the encoded + data takes up a minimal amount of - a count of the total number of items available for pagination in - UIs. + space after proto encoding. - count_total is only respected when offset is used. It is ignored - when key + This is not thread safe, and is not + intended for concurrent usage. + properties: + elems: + format: byte + type: string + extra_bits_stored: + format: int64 + type: integer + type: object + mode_infos: + items: {} + title: >- + mode_infos is the corresponding modes of + the signers of the multisig - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. + which could include nested multisig + public keys + type: array + type: object + single: + title: single represents a single signer + properties: + mode: + title: >- + mode is the signing mode of the single + signer + default: SIGN_MODE_UNSPECIFIED + description: >- + SignMode represents a signing mode with + its own security guarantees. - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean - responses: - '200': - description: A successful response. - schema: - description: >- - GetBlockWithTxsResponse is the response type for the - Service.GetBlockWithTxs + This enum should be considered a + registry of all known sign modes - method. + in the Cosmos ecosystem. Apps are not + expected to support all known + sign modes. Apps that would like to + support custom sign modes are - Since: cosmos-sdk 0.45.2 - properties: - block: - properties: - data: - properties: - txs: - description: >- - Txs that will be applied by state @ block.Height+1. + encouraged to open a small PR against + this file to add a new case - NOTE: not all txs here are valid. We're just agreeing - on the order first. + to this SignMode enum describing their + sign mode so that different - This means that block.AppHash does not include these - txs. - items: - format: byte - type: string - type: array - title: >- - Data contains the set of transactions included in the - block - type: object - evidence: - properties: - evidence: - items: - properties: - duplicate_vote_evidence: - description: >- - DuplicateVoteEvidence contains evidence of a - validator signed two conflicting votes. - properties: - timestamp: - format: date-time - type: string - total_voting_power: - format: int64 - type: string - validator_power: - format: int64 - type: string - vote_a: - description: >- - Vote represents a prevote or precommit vote - from validators for + apps have a consistent version of this + enum. - consensus. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - extension: - description: >- - Vote extension provided by the - application. Only valid for precommit + - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be + rejected. + - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is + verified with raw bytes from Tx. + - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some + human-readable textual representation on + top of the binary representation - messages. - format: byte - type: string - extension_signature: - description: >- - Vote extension signature by the - validator if they participated in + from SIGN_MODE_DIRECT. - consensus for the associated block. - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: - description: >- - Vote signature by the validator if they - participated in consensus for the + Since: cosmos-sdk 0.50 + - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses + SignDocDirectAux. As opposed to + SIGN_MODE_DIRECT, this sign mode does + not - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: >- - SignedMsgType is a type of signed - message in the consensus. + require signers signing over other + signers' `signer_info`. - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL - type: string - validator_address: - format: byte - type: string - validator_index: - format: int32 - type: integer - type: object - vote_b: - description: >- - Vote represents a prevote or precommit vote - from validators for - consensus. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - extension: - description: >- - Vote extension provided by the - application. Only valid for precommit + Since: cosmos-sdk 0.46 + - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses + Amino JSON and will be removed in the + future. + - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos + SDK. Ref: + https://eips.ethereum.org/EIPS/eip-191 + + + Currently, SIGN_MODE_EIP_191 is + registered as a SignMode enum variant, + + but is not implemented on the SDK by + default. To enable EIP-191, you need - messages. - format: byte - type: string - extension_signature: - description: >- - Vote extension signature by the - validator if they participated in + to pass a custom `TxConfig` that has an + implementation of - consensus for the associated block. + `SignModeHandler` for EIP-191. The SDK + may decide to fully support - Only valid for precommit messages. - format: byte - type: string - height: - format: int64 - type: string - round: - format: int32 - type: integer - signature: - description: >- - Vote signature by the validator if they - participated in consensus for the + EIP-191 in the future. - associated block. - format: byte - type: string - timestamp: - format: date-time - type: string - type: - default: SIGNED_MSG_TYPE_UNKNOWN - description: >- - SignedMsgType is a type of signed - message in the consensus. - - SIGNED_MSG_TYPE_PREVOTE: Votes - - SIGNED_MSG_TYPE_PROPOSAL: Proposals - enum: - - SIGNED_MSG_TYPE_UNKNOWN - - SIGNED_MSG_TYPE_PREVOTE - - SIGNED_MSG_TYPE_PRECOMMIT - - SIGNED_MSG_TYPE_PROPOSAL - type: string - validator_address: - format: byte - type: string - validator_index: - format: int32 - type: integer - type: object - type: object - light_client_attack_evidence: - description: >- - LightClientAttackEvidence contains evidence of a - set of validators attempting to mislead a light - client. - properties: - byzantine_validators: - items: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: >- - PublicKey defines the keys available for - use with Validators - type: object - voting_power: - format: int64 + Since: cosmos-sdk 0.45.2 + enum: + - SIGN_MODE_UNSPECIFIED + - SIGN_MODE_DIRECT + - SIGN_MODE_TEXTUAL + - SIGN_MODE_DIRECT_AUX + - SIGN_MODE_LEGACY_AMINO_JSON + - SIGN_MODE_EIP_191 type: string type: object - type: array - common_height: - format: int64 - type: string - conflicting_block: - properties: - signed_header: - properties: - commit: - description: >- - Commit contains the evidence that a - block was committed by a set of - validators. - properties: - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - height: - format: int64 - type: string - round: - format: int32 - type: integer - signatures: - items: - description: >- - CommitSig is a part of the Vote included - in a Commit. - properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL - title: >- - BlockIdFlag indicates which BlockID the - signature is for - type: string - signature: - format: byte - type: string - timestamp: - format: date-time - type: string - validator_address: - format: byte - type: string - type: object - type: array - type: object - header: - description: >- - Header defines the structure of a block - header. - properties: - app_hash: - format: byte - type: string - chain_id: - type: string - consensus_hash: - format: byte - type: string - data_hash: - format: byte - type: string - evidence_hash: - format: byte - title: consensus info - type: string - height: - format: int64 - type: string - last_block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - last_commit_hash: - format: byte - title: hashes of block data - type: string - last_results_hash: - format: byte - type: string - next_validators_hash: - format: byte - type: string - proposer_address: - format: byte - type: string - time: - format: date-time - type: string - validators_hash: - format: byte - title: >- - hashes from the app output from the prev - block - type: string - version: - title: basic block info - description: >- - Consensus captures the consensus rules - for processing a block in the - blockchain, + type: object + public_key: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + public_key is the public key of the signer. It + is optional for accounts - including all blockchain data structures - and the rules of the application's + that already exist in state. If unset, the + verifier can use the required \ - state transition machine. - properties: - app: - format: uint64 - type: string - block: - format: uint64 - type: string - type: object - type: object - type: object - validator_set: - properties: - proposer: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: >- - PublicKey defines the keys available for - use with Validators - type: object - voting_power: - format: int64 - type: string - type: object - total_voting_power: - format: int64 - type: string - validators: - items: - properties: - address: - format: byte - type: string - proposer_priority: - format: int64 - type: string - pub_key: - properties: - ed25519: - format: byte - type: string - secp256k1: - format: byte - type: string - title: >- - PublicKey defines the keys available for - use with Validators - type: object - voting_power: - format: int64 - type: string - type: object - type: array - type: object - type: object - timestamp: - format: date-time - type: string - total_voting_power: - format: int64 - type: string - type: object + signer address for this position and lookup + the public key. + sequence: + description: >- + sequence is the sequence of the account, which + describes the + + number of committed transactions signed by a + given address. It is used to + + prevent replay attacks. + format: uint64 + type: string + type: object + type: array + tip: + description: >- + Tip is the optional tip used for transactions fees + paid in another denom. + + + This field is ignored if the chain didn't enable + tips, i.e. didn't add the + + `TipDecorator` in its posthandler. + + + Since: cosmos-sdk 0.46 + properties: + amount: + items: + description: >- + Coin defines a token with a denomination and + an amount. + + + NOTE: The amount field is an Int which + implements the custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: amount is the amount of the tip + type: array + tipper: + title: >- + tipper is the address of the account paying for + the tip + type: string type: object - type: array - type: object - header: - description: Header defines the structure of a block header. - properties: - app_hash: - format: byte - type: string - chain_id: - type: string - consensus_hash: - format: byte - type: string - data_hash: - format: byte - type: string - evidence_hash: - format: byte - title: consensus info - type: string - height: - format: int64 - type: string - last_block_id: - properties: - hash: - format: byte - type: string - part_set_header: + type: object + body: + title: body is the processable content of the transaction + description: >- + TxBody is the body of a transaction that all signers + sign over. + properties: + extension_options: + items: properties: - hash: + type_url: + type: string + value: format: byte type: string - total: - format: int64 - type: integer - title: PartsetHeader type: object - title: BlockID - type: object - last_commit_hash: - format: byte - title: hashes of block data - type: string - last_results_hash: - format: byte - type: string - next_validators_hash: - format: byte - type: string - proposer_address: - format: byte - type: string - time: - format: date-time - type: string - validators_hash: + title: >- + extension_options are arbitrary options that can be + added by chains + + when the default options are not sufficient. If any + of these are present + + and can't be handled, the transaction will be + rejected + type: array + memo: + description: >- + memo is any arbitrary note/comment to be added to + the transaction. + + WARNING: in clients, any publicly exposed text + should not be called memo, + + but should be called `note` instead (see + https://github.com/cosmos/cosmos-sdk/issues/9122). + type: string + messages: + description: >- + messages is a list of messages to be executed. The + required signers of + + those messages define the number and order of + elements in AuthInfo's + + signer_infos and Tx's signatures. Each required + signer address is added to + + the list only the first time it occurs. + + By convention, the first required signer (usually + from the first message) + + is referred to as the primary signer and pays the + fee for the whole + + transaction. + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + non_critical_extension_options: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: >- + extension_options are arbitrary options that can be + added by chains + + when the default options are not sufficient. If any + of these are present + + and can't be handled, they will be ignored + type: array + timeout_height: + format: uint64 + title: >- + timeout is the block height after which this + transaction will not + + be processed by the chain + type: string + type: object + signatures: + description: >- + signatures is a list of signatures that matches the + length and order of + + AuthInfo's signer_infos to allow connecting signature + meta information like + + public key and signing mode by position. + items: format: byte - title: hashes from the app output from the prev block type: string - version: - title: basic block info + type: array + type: object + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: GetBlockWithTxs fetches a block with decoded txs. + tags: + - Service + /cosmos/tx/v1beta1/txs/{hash}: + get: + operationId: GetTx + parameters: + - description: hash is the tx hash to query, encoded as a hex string. + in: path + name: hash + required: true + type: string + responses: + '200': + description: A successful response. + schema: + description: GetTxResponse is the response type for the Service.GetTx method. + properties: + tx: + description: Tx is the standard type used for broadcasting transactions. + properties: + auth_info: + title: >- + auth_info is the authorization related content of the + transaction, + + specifically signers, signer modes and fee + description: >- + AuthInfo describes the fee and signer modes that are used + to sign a + + transaction. + properties: + fee: description: >- - Consensus captures the consensus rules for processing - a block in the blockchain, + Fee is the fee and gas limit for the transaction. The + first signer is the - including all blockchain data structures and the rules - of the application's + primary signer and the one which pays the fee. The fee + can be calculated - state transition machine. + based on the cost of evaluating the body and doing + signature verification + + of the signers. This can be estimated via simulation. properties: - app: + amount: + items: + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which + implements the custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: amount is the amount of coins to be paid as a fee + type: array + gas_limit: format: uint64 + title: >- + gas_limit is the maximum gas that can be used in + transaction processing + + before an out of gas error occurs type: string - block: - format: uint64 + granter: + title: >- + if set, the fee payer (either the first signer or + the value of the payer field) requests that a fee + grant be used + + to pay fees instead of the fee payer's own + balance. If an appropriate fee grant does not + exist or the chain does + + not support fee grants, this will fail type: string - type: object - type: object - last_commit: - description: >- - Commit contains the evidence that a block was committed by - a set of validators. - properties: - block_id: - properties: - hash: - format: byte + payer: + description: >- + if unset, the first signer is responsible for + paying the fees. If set, the specified account + must pay the fees. + + the payer must be a tx signer (and thus have + signed this field in AuthInfo). + + setting this field does *not* change the ordering + of required signers for the transaction. type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID type: object - height: - format: int64 - type: string - round: - format: int32 - type: integer - signatures: + signer_infos: + description: >- + signer_infos defines the signing modes for the + required signers. The number + + and order of elements must match the required signers + from TxBody's + + messages. The first element is the primary signer and + the one which pays + + the fee. items: description: >- - CommitSig is a part of the Vote included in a - Commit. + SignerInfo describes the public key and signing mode + of a single top-level + + signer. properties: - block_id_flag: - default: BLOCK_ID_FLAG_UNKNOWN - enum: - - BLOCK_ID_FLAG_UNKNOWN - - BLOCK_ID_FLAG_ABSENT - - BLOCK_ID_FLAG_COMMIT - - BLOCK_ID_FLAG_NIL + mode_info: title: >- - BlockIdFlag indicates which BlockID the - signature is for - type: string - signature: - format: byte - type: string - timestamp: - format: date-time - type: string - validator_address: - format: byte - type: string - type: object - type: array - type: object - type: object - block_id: - properties: - hash: - format: byte - type: string - part_set_header: - properties: - hash: - format: byte - type: string - total: - format: int64 - type: integer - title: PartsetHeader - type: object - title: BlockID - type: object - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the + mode_info describes the signing mode of the + signer and is a nested + + structure to support nested multisig pubkey's + description: >- + ModeInfo describes the signing mode of a single + or nested multisig signer. + properties: + multi: + title: multi represents a nested multisig signer + properties: + bitarray: + title: >- + bitarray specifies which keys within the + multisig are signing + description: >- + CompactBitArray is an implementation of + a space efficient bit array. - corresponding request message has used PageRequest. + This is used to ensure that the encoded + data takes up a minimal amount of - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + space after proto encoding. - was set, its value is undefined otherwise - type: string - type: object - txs: - description: txs are the transactions in the block. - items: - description: Tx is the standard type used for broadcasting transactions. - properties: - auth_info: - title: >- - auth_info is the authorization related content of the - transaction, + This is not thread safe, and is not + intended for concurrent usage. + properties: + elems: + format: byte + type: string + extra_bits_stored: + format: int64 + type: integer + type: object + mode_infos: + items: {} + title: >- + mode_infos is the corresponding modes of + the signers of the multisig - specifically signers, signer modes and fee - description: >- - AuthInfo describes the fee and signer modes that are - used to sign a + which could include nested multisig + public keys + type: array + type: object + single: + title: single represents a single signer + properties: + mode: + title: >- + mode is the signing mode of the single + signer + default: SIGN_MODE_UNSPECIFIED + description: >- + SignMode represents a signing mode with + its own security guarantees. - transaction. - properties: - fee: - description: >- - Fee is the fee and gas limit for the transaction. - The first signer is the - primary signer and the one which pays the fee. The - fee can be calculated + This enum should be considered a + registry of all known sign modes - based on the cost of evaluating the body and doing - signature verification + in the Cosmos ecosystem. Apps are not + expected to support all known - of the signers. This can be estimated via - simulation. - properties: - amount: - items: - description: >- - Coin defines a token with a denomination and - an amount. + sign modes. Apps that would like to + support custom sign modes are + encouraged to open a small PR against + this file to add a new case - NOTE: The amount field is an Int which - implements the custom method + to this SignMode enum describing their + sign mode so that different - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: >- - amount is the amount of coins to be paid as a - fee - type: array - gas_limit: - format: uint64 - title: >- - gas_limit is the maximum gas that can be used in - transaction processing + apps have a consistent version of this + enum. - before an out of gas error occurs - type: string - granter: - title: >- - if set, the fee payer (either the first signer - or the value of the payer field) requests that a - fee grant be used + - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be + rejected. + - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is + verified with raw bytes from Tx. + - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some + human-readable textual representation on + top of the binary representation - to pay fees instead of the fee payer's own - balance. If an appropriate fee grant does not - exist or the chain does + from SIGN_MODE_DIRECT. - not support fee grants, this will fail - type: string - payer: - description: >- - if unset, the first signer is responsible for - paying the fees. If set, the specified account - must pay the fees. - the payer must be a tx signer (and thus have - signed this field in AuthInfo). + Since: cosmos-sdk 0.50 + - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses + SignDocDirectAux. As opposed to + SIGN_MODE_DIRECT, this sign mode does + not - setting this field does *not* change the - ordering of required signers for the - transaction. - type: string - type: object - signer_infos: - description: >- - signer_infos defines the signing modes for the - required signers. The number + require signers signing over other + signers' `signer_info`. - and order of elements must match the required - signers from TxBody's - messages. The first element is the primary signer - and the one which pays + Since: cosmos-sdk 0.46 + - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses + Amino JSON and will be removed in the + future. + - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos + SDK. Ref: + https://eips.ethereum.org/EIPS/eip-191 - the fee. - items: - description: >- - SignerInfo describes the public key and signing - mode of a single top-level - signer. - properties: - mode_info: - title: >- - mode_info describes the signing mode of the - signer and is a nested + Currently, SIGN_MODE_EIP_191 is + registered as a SignMode enum variant, - structure to support nested multisig pubkey's - description: >- - ModeInfo describes the signing mode of a - single or nested multisig signer. - properties: - multi: - title: multi represents a nested multisig signer - properties: - bitarray: - title: >- - bitarray specifies which keys within the - multisig are signing - description: >- - CompactBitArray is an implementation of - a space efficient bit array. + but is not implemented on the SDK by + default. To enable EIP-191, you need - This is used to ensure that the encoded - data takes up a minimal amount of + to pass a custom `TxConfig` that has an + implementation of - space after proto encoding. + `SignModeHandler` for EIP-191. The SDK + may decide to fully support - This is not thread safe, and is not - intended for concurrent usage. - properties: - elems: - format: byte - type: string - extra_bits_stored: - format: int64 - type: integer - type: object - mode_infos: - items: {} - title: >- - mode_infos is the corresponding modes of - the signers of the multisig + EIP-191 in the future. - which could include nested multisig - public keys - type: array - type: object - single: - title: single represents a single signer - properties: - mode: - title: >- - mode is the signing mode of the single - signer - default: SIGN_MODE_UNSPECIFIED - description: >- - SignMode represents a signing mode with - its own security guarantees. + Since: cosmos-sdk 0.45.2 + enum: + - SIGN_MODE_UNSPECIFIED + - SIGN_MODE_DIRECT + - SIGN_MODE_TEXTUAL + - SIGN_MODE_DIRECT_AUX + - SIGN_MODE_LEGACY_AMINO_JSON + - SIGN_MODE_EIP_191 + type: string + type: object + type: object + public_key: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + public_key is the public key of the signer. It + is optional for accounts + + that already exist in state. If unset, the + verifier can use the required \ - This enum should be considered a - registry of all known sign modes + signer address for this position and lookup the + public key. + sequence: + description: >- + sequence is the sequence of the account, which + describes the - in the Cosmos ecosystem. Apps are not - expected to support all known + number of committed transactions signed by a + given address. It is used to - sign modes. Apps that would like to - support custom sign modes are + prevent replay attacks. + format: uint64 + type: string + type: object + type: array + tip: + description: >- + Tip is the optional tip used for transactions fees + paid in another denom. - encouraged to open a small PR against - this file to add a new case - to this SignMode enum describing their - sign mode so that different + This field is ignored if the chain didn't enable tips, + i.e. didn't add the - apps have a consistent version of this - enum. + `TipDecorator` in its posthandler. - - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be - rejected. - - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is - verified with raw bytes from Tx. - - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some - human-readable textual representation on - top of the binary representation - from SIGN_MODE_DIRECT. + Since: cosmos-sdk 0.46 + properties: + amount: + items: + description: >- + Coin defines a token with a denomination and an + amount. - Since: cosmos-sdk 0.50 - - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses - SignDocDirectAux. As opposed to - SIGN_MODE_DIRECT, this sign mode does - not + NOTE: The amount field is an Int which + implements the custom method - require signers signing over other - signers' `signer_info`. + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: amount is the amount of the tip + type: array + tipper: + title: >- + tipper is the address of the account paying for + the tip + type: string + type: object + type: object + body: + title: body is the processable content of the transaction + description: >- + TxBody is the body of a transaction that all signers sign + over. + properties: + extension_options: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: >- + extension_options are arbitrary options that can be + added by chains + when the default options are not sufficient. If any of + these are present - Since: cosmos-sdk 0.46 - - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses - Amino JSON and will be removed in the - future. - - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos - SDK. Ref: - https://eips.ethereum.org/EIPS/eip-191 + and can't be handled, the transaction will be rejected + type: array + memo: + description: >- + memo is any arbitrary note/comment to be added to the + transaction. + WARNING: in clients, any publicly exposed text should + not be called memo, - Currently, SIGN_MODE_EIP_191 is - registered as a SignMode enum variant, + but should be called `note` instead (see + https://github.com/cosmos/cosmos-sdk/issues/9122). + type: string + messages: + description: >- + messages is a list of messages to be executed. The + required signers of - but is not implemented on the SDK by - default. To enable EIP-191, you need + those messages define the number and order of elements + in AuthInfo's - to pass a custom `TxConfig` that has an - implementation of + signer_infos and Tx's signatures. Each required signer + address is added to - `SignModeHandler` for EIP-191. The SDK - may decide to fully support + the list only the first time it occurs. - EIP-191 in the future. + By convention, the first required signer (usually from + the first message) + is referred to as the primary signer and pays the fee + for the whole - Since: cosmos-sdk 0.45.2 - enum: - - SIGN_MODE_UNSPECIFIED - - SIGN_MODE_DIRECT - - SIGN_MODE_TEXTUAL - - SIGN_MODE_DIRECT_AUX - - SIGN_MODE_LEGACY_AMINO_JSON - - SIGN_MODE_EIP_191 - type: string - type: object - type: object - public_key: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - description: >- - public_key is the public key of the signer. It - is optional for accounts + transaction. + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + non_critical_extension_options: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: >- + extension_options are arbitrary options that can be + added by chains - that already exist in state. If unset, the - verifier can use the required \ + when the default options are not sufficient. If any of + these are present - signer address for this position and lookup - the public key. - sequence: - description: >- - sequence is the sequence of the account, which - describes the + and can't be handled, they will be ignored + type: array + timeout_height: + format: uint64 + title: >- + timeout is the block height after which this + transaction will not - number of committed transactions signed by a - given address. It is used to + be processed by the chain + type: string + type: object + signatures: + description: >- + signatures is a list of signatures that matches the length + and order of - prevent replay attacks. - format: uint64 - type: string - type: object - type: array - tip: - description: >- - Tip is the optional tip used for transactions fees - paid in another denom. + AuthInfo's signer_infos to allow connecting signature meta + information like + public key and signing mode by position. + items: + format: byte + type: string + type: array + type: object + tx_response: + description: tx_response is the queried TxResponses. + properties: + code: + description: Response code. + format: int64 + type: integer + codespace: + title: Namespace for the Code + type: string + data: + description: Result bytes, if any. + type: string + events: + description: >- + Events defines all the events emitted by processing a + transaction. Note, - This field is ignored if the chain didn't enable - tips, i.e. didn't add the + these events include those emitted by processing all the + messages and those - `TipDecorator` in its posthandler. + emitted from the ante. Whereas Logs contains the events, + with + additional metadata, emitted only by processing the + messages. - Since: cosmos-sdk 0.46 - properties: - amount: - items: - description: >- - Coin defines a token with a denomination and - an amount. + Since: cosmos-sdk 0.42.11, 0.44.5, 0.45 + items: + description: >- + Event allows application developers to attach additional + information to - NOTE: The amount field is an Int which - implements the custom method + ResponseFinalizeBlock and ResponseCheckTx. - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: amount is the amount of the tip - type: array - tipper: - title: >- - tipper is the address of the account paying for - the tip - type: string - type: object - type: object - body: - title: body is the processable content of the transaction - description: >- - TxBody is the body of a transaction that all signers - sign over. + Later, transactions may be queried using these events. properties: - extension_options: + attributes: items: + description: >- + EventAttribute is a single key-value pair, + associated with an event. properties: - type_url: + index: + type: boolean + key: type: string value: - format: byte type: string type: object - title: >- - extension_options are arbitrary options that can be - added by chains - - when the default options are not sufficient. If any - of these are present - - and can't be handled, the transaction will be - rejected type: array - memo: - description: >- - memo is any arbitrary note/comment to be added to - the transaction. - - WARNING: in clients, any publicly exposed text - should not be called memo, - - but should be called `note` instead (see - https://github.com/cosmos/cosmos-sdk/issues/9122). + type: type: string - messages: + type: object + type: array + gas_used: + description: Amount of gas consumed by transaction. + format: int64 + type: string + gas_wanted: + description: Amount of gas requested for transaction. + format: int64 + type: string + height: + format: int64 + title: The block height + type: string + info: + description: Additional information. May be non-deterministic. + type: string + logs: + description: >- + The output of the application's logger (typed). May be + non-deterministic. + items: + description: >- + ABCIMessageLog defines a structure containing an indexed + tx ABCI message log. + properties: + events: description: >- - messages is a list of messages to be executed. The - required signers of - - those messages define the number and order of - elements in AuthInfo's - - signer_infos and Tx's signatures. Each required - signer address is added to - - the list only the first time it occurs. - - By convention, the first required signer (usually - from the first message) - - is referred to as the primary signer and pays the - fee for the whole + Events contains a slice of Event objects that were + emitted during some - transaction. - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - non_critical_extension_options: + execution. items: + description: >- + StringEvent defines en Event object wrapper where + all the attributes + + contain key/value pairs that are strings instead + of raw bytes. properties: - type_url: - type: string - value: - format: byte + attributes: + items: + description: >- + Attribute defines an attribute wrapper where + the key and value are + + strings instead of raw bytes. + properties: + key: + type: string + value: + type: string + type: object + type: array + type: type: string type: object - title: >- - extension_options are arbitrary options that can be - added by chains - - when the default options are not sufficient. If any - of these are present - - and can't be handled, they will be ignored type: array - timeout_height: - format: uint64 - title: >- - timeout is the block height after which this - transaction will not - - be processed by the chain + log: type: string + msg_index: + format: int64 + type: integer type: object - signatures: - description: >- - signatures is a list of signatures that matches the - length and order of + type: array + raw_log: + description: >- + The output of the application's logger (raw string). May + be - AuthInfo's signer_infos to allow connecting signature - meta information like + non-deterministic. + type: string + timestamp: + description: >- + Time of the previous block. For heights > 1, it's the + weighted median of + + the timestamps of the valid votes in the block.LastCommit. + For height == 1, + + it's genesis time. + type: string + tx: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: The request transaction bytes. + txhash: + description: The transaction hash. + type: string + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: GetTx fetches a tx by hash. + tags: + - Service + /cosmos/upgrade/v1beta1/applied_plan/{name}: + get: + operationId: AppliedPlan + parameters: + - description: name is the name of the applied plan to query for. + in: path + name: name + required: true + type: string + responses: + '200': + description: A successful response. + schema: + description: >- + QueryAppliedPlanResponse is the response type for the + Query/AppliedPlan RPC - public key and signing mode by position. - items: - format: byte - type: string - type: array + method. + properties: + height: + description: height is the block height at which the plan was applied. + format: int64 + type: string + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string type: object type: array + error: + type: string + message: + type: string + type: object + summary: AppliedPlan queries a previously applied upgrade plan by its name. + tags: + - Query + /cosmos/upgrade/v1beta1/authority: + get: + description: 'Since: cosmos-sdk 0.46' + operationId: Authority + responses: + '200': + description: A successful response. + schema: + description: 'Since: cosmos-sdk 0.46' + properties: + address: + type: string + title: QueryAuthorityResponse is the response type for Query/Authority type: object default: description: An unexpected error response. @@ -33701,580 +36333,865 @@ paths: message: type: string type: object - summary: GetBlockWithTxs fetches a block with decoded txs. + summary: Returns the account with authority to conduct upgrades tags: - - Service - /cosmos/tx/v1beta1/txs/{hash}: + - Query + /cosmos/upgrade/v1beta1/current_plan: get: - operationId: GetTx - parameters: - - description: hash is the tx hash to query, encoded as a hex string. - in: path - name: hash - required: true - type: string + operationId: CurrentPlan responses: '200': description: A successful response. schema: - description: GetTxResponse is the response type for the Service.GetTx method. + description: >- + QueryCurrentPlanResponse is the response type for the + Query/CurrentPlan RPC + + method. properties: - tx: - description: Tx is the standard type used for broadcasting transactions. + plan: + description: plan is the current upgrade plan. properties: - auth_info: + height: + description: The height at which the upgrade must be performed. + format: int64 + type: string + info: title: >- - auth_info is the authorization related content of the - transaction, + Any application specific upgrade info to be included + on-chain - specifically signers, signer modes and fee + such as a git commit that validators could automatically + upgrade to + type: string + name: description: >- - AuthInfo describes the fee and signer modes that are used - to sign a - - transaction. - properties: - fee: - description: >- - Fee is the fee and gas limit for the transaction. The - first signer is the - - primary signer and the one which pays the fee. The fee - can be calculated - - based on the cost of evaluating the body and doing - signature verification - - of the signers. This can be estimated via simulation. - properties: - amount: - items: - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which - implements the custom method - - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: amount is the amount of coins to be paid as a fee - type: array - gas_limit: - format: uint64 - title: >- - gas_limit is the maximum gas that can be used in - transaction processing - - before an out of gas error occurs - type: string - granter: - title: >- - if set, the fee payer (either the first signer or - the value of the payer field) requests that a fee - grant be used - - to pay fees instead of the fee payer's own - balance. If an appropriate fee grant does not - exist or the chain does - - not support fee grants, this will fail - type: string - payer: - description: >- - if unset, the first signer is responsible for - paying the fees. If set, the specified account - must pay the fees. - - the payer must be a tx signer (and thus have - signed this field in AuthInfo). - - setting this field does *not* change the ordering - of required signers for the transaction. - type: string - type: object - signer_infos: - description: >- - signer_infos defines the signing modes for the - required signers. The number - - and order of elements must match the required signers - from TxBody's - - messages. The first element is the primary signer and - the one which pays - - the fee. - items: - description: >- - SignerInfo describes the public key and signing mode - of a single top-level - - signer. - properties: - mode_info: - title: >- - mode_info describes the signing mode of the - signer and is a nested - - structure to support nested multisig pubkey's - description: >- - ModeInfo describes the signing mode of a single - or nested multisig signer. - properties: - multi: - title: multi represents a nested multisig signer - properties: - bitarray: - title: >- - bitarray specifies which keys within the - multisig are signing - description: >- - CompactBitArray is an implementation of - a space efficient bit array. - - This is used to ensure that the encoded - data takes up a minimal amount of - - space after proto encoding. - - This is not thread safe, and is not - intended for concurrent usage. - properties: - elems: - format: byte - type: string - extra_bits_stored: - format: int64 - type: integer - type: object - mode_infos: - items: {} - title: >- - mode_infos is the corresponding modes of - the signers of the multisig - - which could include nested multisig - public keys - type: array - type: object - single: - title: single represents a single signer - properties: - mode: - title: >- - mode is the signing mode of the single - signer - default: SIGN_MODE_UNSPECIFIED - description: >- - SignMode represents a signing mode with - its own security guarantees. - - - This enum should be considered a - registry of all known sign modes - - in the Cosmos ecosystem. Apps are not - expected to support all known - - sign modes. Apps that would like to - support custom sign modes are + Sets the name for the upgrade. This name will be used by + the upgraded - encouraged to open a small PR against - this file to add a new case + version of the software to apply any special "on-upgrade" + commands during - to this SignMode enum describing their - sign mode so that different + the first BeginBlock method after the upgrade is applied. + It is also used - apps have a consistent version of this - enum. + to detect whether a software version can handle a given + upgrade. If no - - SIGN_MODE_UNSPECIFIED: SIGN_MODE_UNSPECIFIED specifies an unknown signing mode and will be - rejected. - - SIGN_MODE_DIRECT: SIGN_MODE_DIRECT specifies a signing mode which uses SignDoc and is - verified with raw bytes from Tx. - - SIGN_MODE_TEXTUAL: SIGN_MODE_TEXTUAL is a future signing mode that will verify some - human-readable textual representation on - top of the binary representation + upgrade handler with this name has been set in the + software, it will be - from SIGN_MODE_DIRECT. + assumed that the software is out-of-date when the upgrade + Time or Height is + reached and the software will exit. + type: string + time: + description: >- + Deprecated: Time based upgrades have been deprecated. Time + based upgrade logic - Since: cosmos-sdk 0.50 - - SIGN_MODE_DIRECT_AUX: SIGN_MODE_DIRECT_AUX specifies a signing mode which uses - SignDocDirectAux. As opposed to - SIGN_MODE_DIRECT, this sign mode does - not + has been removed from the SDK. - require signers signing over other - signers' `signer_info`. + If this field is not empty, an error will be thrown. + format: date-time + type: string + upgraded_client_state: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + Deprecated: UpgradedClientState field has been deprecated. + IBC upgrade logic has been + moved to the IBC module in the sub module 02-client. - Since: cosmos-sdk 0.46 - - SIGN_MODE_LEGACY_AMINO_JSON: SIGN_MODE_LEGACY_AMINO_JSON is a backwards compatibility mode which uses - Amino JSON and will be removed in the - future. - - SIGN_MODE_EIP_191: SIGN_MODE_EIP_191 specifies the sign mode for EIP 191 signing on the Cosmos - SDK. Ref: - https://eips.ethereum.org/EIPS/eip-191 + If this field is not empty, an error will be thrown. + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: CurrentPlan queries the current upgrade plan. + tags: + - Query + /cosmos/upgrade/v1beta1/module_versions: + get: + description: 'Since: cosmos-sdk 0.43' + operationId: ModuleVersions + parameters: + - description: |- + 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. + in: query + name: module_name + required: false + type: string + responses: + '200': + description: A successful response. + schema: + description: >- + QueryModuleVersionsResponse is the response type for the + Query/ModuleVersions + RPC method. - Currently, SIGN_MODE_EIP_191 is - registered as a SignMode enum variant, - but is not implemented on the SDK by - default. To enable EIP-191, you need + Since: cosmos-sdk 0.43 + properties: + module_versions: + description: >- + module_versions is a list of module names with their consensus + versions. + items: + description: |- + ModuleVersion specifies a module and its consensus version. - to pass a custom `TxConfig` that has an - implementation of + Since: cosmos-sdk 0.43 + properties: + name: + title: name of the app module + type: string + version: + format: uint64 + title: consensus version of the app module + type: string + type: object + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: ModuleVersions queries the list of module versions from state. + tags: + - Query + /cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}: + get: + operationId: UpgradedConsensusState + parameters: + - description: |- + last height of the current chain must be sent in request + as this is the height under which next consensus state is stored + format: int64 + in: path + name: last_height + required: true + type: string + responses: + '200': + description: A successful response. + schema: + description: >- + QueryUpgradedConsensusStateResponse is the response type for the + Query/UpgradedConsensusState - `SignModeHandler` for EIP-191. The SDK - may decide to fully support + RPC method. + properties: + upgraded_consensus_state: + format: byte + title: 'Since: cosmos-sdk 0.43' + type: string + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: >- + UpgradedConsensusState queries the consensus state that will serve - EIP-191 in the future. + as a trusted kernel for the next version of this chain. It will only be + stored at the last height of this chain. - Since: cosmos-sdk 0.45.2 - enum: - - SIGN_MODE_UNSPECIFIED - - SIGN_MODE_DIRECT - - SIGN_MODE_TEXTUAL - - SIGN_MODE_DIRECT_AUX - - SIGN_MODE_LEGACY_AMINO_JSON - - SIGN_MODE_EIP_191 - type: string - type: object - type: object - public_key: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - description: >- - public_key is the public key of the signer. It - is optional for accounts + UpgradedConsensusState RPC not supported with legacy querier - that already exist in state. If unset, the - verifier can use the required \ + This rpc is deprecated now that IBC has its own replacement - signer address for this position and lookup the - public key. - sequence: - description: >- - sequence is the sequence of the account, which - describes the + (https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54) + tags: + - Query + /cosmwasm/wasm/v1/code: + get: + operationId: Codes + parameters: + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. - number of committed transactions signed by a - given address. It is used to + It is less efficient than using key. Only one of offset or key + should - prevent replay attacks. - format: uint64 - type: string - type: object - type: array - tip: - description: >- - Tip is the optional tip used for transactions fees - paid in another denom. + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include - This field is ignored if the chain didn't enable tips, - i.e. didn't add the + a count of the total number of items available for pagination in + UIs. - `TipDecorator` in its posthandler. + count_total is only respected when offset is used. It is ignored + when key + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. - Since: cosmos-sdk 0.46 - properties: - amount: - items: - description: >- - Coin defines a token with a denomination and an - amount. + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + responses: + '200': + description: A successful response. + schema: + properties: + code_infos: + items: + properties: + code_id: + format: uint64 + type: string + creator: + type: string + data_hash: + format: byte + type: string + instantiate_permission: + description: AccessConfig access control type. + properties: + addresses: + items: + type: string + type: array + permission: + default: ACCESS_TYPE_UNSPECIFIED + description: >- + - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified + placeholder for empty value + - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden + - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted + - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses + enum: + - ACCESS_TYPE_UNSPECIFIED + - ACCESS_TYPE_NOBODY + - ACCESS_TYPE_EVERYBODY + - ACCESS_TYPE_ANY_OF_ADDRESSES + title: AccessType permission types + type: string + type: object + title: CodeInfoResponse contains code meta data from CodeInfo + type: object + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the + + corresponding request message has used PageRequest. - NOTE: The amount field is an Int which - implements the custom method + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + title: >- + QueryCodesResponse is the response type for the Query/Codes RPC + method + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Codes gets the metadata for all stored wasm codes + tags: + - Query + /cosmwasm/wasm/v1/code/{code_id}: + get: + operationId: Code + parameters: + - format: uint64 + in: path + name: code_id + required: true + type: string + responses: + '200': + description: A successful response. + schema: + properties: + code_info: + properties: + code_id: + format: uint64 + type: string + creator: + type: string + data_hash: + format: byte + type: string + instantiate_permission: + description: AccessConfig access control type. + properties: + addresses: + items: + type: string + type: array + permission: + default: ACCESS_TYPE_UNSPECIFIED + description: >- + - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified + placeholder for empty value + - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden + - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted + - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses + enum: + - ACCESS_TYPE_UNSPECIFIED + - ACCESS_TYPE_NOBODY + - ACCESS_TYPE_EVERYBODY + - ACCESS_TYPE_ANY_OF_ADDRESSES + title: AccessType permission types + type: string + type: object + title: CodeInfoResponse contains code meta data from CodeInfo + type: object + data: + format: byte + type: string + title: >- + QueryCodeResponse is the response type for the Query/Code RPC + method + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Code gets the binary code and metadata for a singe wasm code + tags: + - Query + /cosmwasm/wasm/v1/code/{code_id}/contracts: + get: + operationId: ContractsByCode + parameters: + - format: uint64 + in: path + name: code_id + required: true + type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: amount is the amount of the tip - type: array - tipper: - title: >- - tipper is the address of the account paying for - the tip - type: string - type: object - type: object - body: - title: body is the processable content of the transaction - description: >- - TxBody is the body of a transaction that all signers sign - over. - properties: - extension_options: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: >- - extension_options are arbitrary options that can be - added by chains + It is less efficient than using key. Only one of offset or key + should - when the default options are not sufficient. If any of - these are present + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. - and can't be handled, the transaction will be rejected - type: array - memo: - description: >- - memo is any arbitrary note/comment to be added to the - transaction. + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include - WARNING: in clients, any publicly exposed text should - not be called memo, + a count of the total number of items available for pagination in + UIs. - but should be called `note` instead (see - https://github.com/cosmos/cosmos-sdk/issues/9122). - type: string - messages: - description: >- - messages is a list of messages to be executed. The - required signers of + count_total is only respected when offset is used. It is ignored + when key - those messages define the number and order of elements - in AuthInfo's + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. - signer_infos and Tx's signatures. Each required signer - address is added to - the list only the first time it occurs. + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + responses: + '200': + description: A successful response. + schema: + properties: + contracts: + items: + type: string + title: contracts are a set of contract addresses + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the - By convention, the first required signer (usually from - the first message) + corresponding request message has used PageRequest. - is referred to as the primary signer and pays the fee - for the whole + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - transaction. - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - non_critical_extension_options: + was set, its value is undefined otherwise + type: string + type: object + title: |- + QueryContractsByCodeResponse is the response type for the + Query/ContractsByCode RPC method + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: ContractsByCode lists all smart contracts for a code id + tags: + - Query + /cosmwasm/wasm/v1/codes/params: + get: + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse is the response type for the Query/Params RPC + method. + properties: + params: + description: params defines the parameters of the module. + properties: + code_upload_access: + description: AccessConfig access control type. + properties: + addresses: items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: >- - extension_options are arbitrary options that can be - added by chains - - when the default options are not sufficient. If any of - these are present - - and can't be handled, they will be ignored + type: string type: array - timeout_height: - format: uint64 - title: >- - timeout is the block height after which this - transaction will not - - be processed by the chain + permission: + default: ACCESS_TYPE_UNSPECIFIED + description: >- + - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified + placeholder for empty value + - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden + - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted + - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses + enum: + - ACCESS_TYPE_UNSPECIFIED + - ACCESS_TYPE_NOBODY + - ACCESS_TYPE_EVERYBODY + - ACCESS_TYPE_ANY_OF_ADDRESSES + title: AccessType permission types type: string type: object - signatures: + instantiate_default_permission: + default: ACCESS_TYPE_UNSPECIFIED description: >- - signatures is a list of signatures that matches the length - and order of - - AuthInfo's signer_infos to allow connecting signature meta - information like - - public key and signing mode by position. - items: + - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified + placeholder for empty value + - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden + - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted + - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses + enum: + - ACCESS_TYPE_UNSPECIFIED + - ACCESS_TYPE_NOBODY + - ACCESS_TYPE_EVERYBODY + - ACCESS_TYPE_ANY_OF_ADDRESSES + title: AccessType permission types + type: string + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: format: byte type: string - type: array - type: object - tx_response: - description: tx_response is the queried TxResponses. - properties: - code: - description: Response code. - format: int64 - type: integer - codespace: - title: Namespace for the Code - type: string - data: - description: Result bytes, if any. - type: string - events: - description: >- - Events defines all the events emitted by processing a - transaction. Note, + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Params gets the module params + tags: + - Query + /cosmwasm/wasm/v1/codes/pinned: + get: + operationId: PinnedCodes + parameters: + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. - these events include those emitted by processing all the - messages and those + It is less efficient than using key. Only one of offset or key + should - emitted from the ante. Whereas Logs contains the events, - with + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. - additional metadata, emitted only by processing the - messages. + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include + a count of the total number of items available for pagination in + UIs. - Since: cosmos-sdk 0.42.11, 0.44.5, 0.45 - items: - description: >- - Event allows application developers to attach additional - information to + count_total is only respected when offset is used. It is ignored + when key - ResponseFinalizeBlock and ResponseCheckTx. + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. - Later, transactions may be queried using these events. - properties: - attributes: - items: - description: >- - EventAttribute is a single key-value pair, - associated with an event. - properties: - index: - type: boolean - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - type: array - gas_used: - description: Amount of gas consumed by transaction. - format: int64 - type: string - gas_wanted: - description: Amount of gas requested for transaction. - format: int64 - type: string - height: - format: int64 - title: The block height - type: string - info: - description: Additional information. May be non-deterministic. - type: string - logs: - description: >- - The output of the application's logger (typed). May be - non-deterministic. - items: - description: >- - ABCIMessageLog defines a structure containing an indexed - tx ABCI message log. - properties: - events: - description: >- - Events contains a slice of Event objects that were - emitted during some - execution. - items: - description: >- - StringEvent defines en Event object wrapper where - all the attributes + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + responses: + '200': + description: A successful response. + schema: + properties: + code_ids: + items: + format: uint64 + type: string + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the - contain key/value pairs that are strings instead - of raw bytes. - properties: - attributes: - items: - description: >- - Attribute defines an attribute wrapper where - the key and value are + corresponding request message has used PageRequest. - strings instead of raw bytes. - properties: - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - type: array - log: - type: string - msg_index: - format: int64 - type: integer - type: object - type: array - raw_log: - description: >- - The output of the application's logger (raw string). May - be + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - non-deterministic. + was set, its value is undefined otherwise type: string - timestamp: - description: >- - Time of the previous block. For heights > 1, it's the - weighted median of + type: object + title: |- + QueryPinnedCodesResponse is the response type for the + Query/PinnedCodes RPC method + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: PinnedCodes gets the pinned code ids + tags: + - Query + /cosmwasm/wasm/v1/contract/build_address: + get: + operationId: BuildAddress + parameters: + - description: CodeHash is the hash of the code. + in: query + name: code_hash + required: false + type: string + - description: CreatorAddress is the address of the contract instantiator. + in: query + name: creator_address + required: false + type: string + - description: Salt is a hex encoded salt. + in: query + name: salt + required: false + type: string + - description: >- + InitArgs are optional json encoded init args to be used in contract + address - the timestamps of the valid votes in the block.LastCommit. - For height == 1, + building if provided. + format: byte + in: query + name: init_args + required: false + type: string + responses: + '200': + description: A successful response. + schema: + description: >- + QueryBuildAddressResponse is the response type for the + Query/BuildAddress RPC - it's genesis time. - type: string - tx: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - description: The request transaction bytes. - txhash: - description: The transaction hash. - type: string - type: object + method. + properties: + address: + title: Address is the contract address + type: string type: object default: description: An unexpected error response. @@ -34298,32 +37215,81 @@ paths: message: type: string type: object - summary: GetTx fetches a tx by hash. + summary: BuildAddress builds a contract address tags: - - Service - /cosmos/upgrade/v1beta1/applied_plan/{name}: + - Query + /cosmwasm/wasm/v1/contract/{address}: get: - operationId: AppliedPlan + operationId: ContractInfo parameters: - - description: name is the name of the applied plan to query for. + - description: address is the address of the contract to query in: path - name: name + name: address required: true type: string responses: '200': description: A successful response. schema: - description: >- - QueryAppliedPlanResponse is the response type for the - Query/AppliedPlan RPC - - method. properties: - height: - description: height is the block height at which the plan was applied. - format: int64 + address: + title: address is the address of the contract type: string + contract_info: + properties: + admin: + title: Admin is an optional address that can execute migrations + type: string + code_id: + format: uint64 + title: CodeID is the reference to the stored Wasm code + type: string + created: + description: Created Tx position when the contract was instantiated. + properties: + block_height: + format: uint64 + title: BlockHeight is the block the contract was created at + type: string + tx_index: + format: uint64 + title: >- + TxIndex is a monotonic counter within the block + (actual transaction index, + + or gas consumed) + type: string + type: object + creator: + title: Creator address who initially instantiated the contract + type: string + extension: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + Extension is an extension point to store custom metadata + within the + + persistence model. + ibc_port_id: + type: string + label: + description: >- + Label is optional metadata to be stored with a contract + instance. + type: string + title: ContractInfo stores a WASM contract instance + type: object + title: >- + QueryContractInfoResponse is the response type for the + Query/ContractInfo RPC + + method type: object default: description: An unexpected error response. @@ -34347,22 +37313,157 @@ paths: message: type: string type: object - summary: AppliedPlan queries a previously applied upgrade plan by its name. + summary: ContractInfo gets the contract meta data tags: - Query - /cosmos/upgrade/v1beta1/authority: + /cosmwasm/wasm/v1/contract/{address}/history: get: - description: 'Since: cosmos-sdk 0.46' - operationId: Authority + operationId: ContractHistory + parameters: + - description: address is the address of the contract to query + in: path + name: address + required: true + type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean responses: '200': description: A successful response. schema: - description: 'Since: cosmos-sdk 0.46' properties: - address: - type: string - title: QueryAuthorityResponse is the response type for Query/Authority + entries: + items: + description: ContractCodeHistoryEntry metadata to a contract. + properties: + code_id: + format: uint64 + title: CodeID is the reference to the stored WASM code + type: string + msg: + format: byte + type: string + operation: + default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED + description: >- + - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED: + ContractCodeHistoryOperationTypeUnspecified placeholder + for empty value + - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation + - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration + - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data + enum: + - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED + - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT + - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE + - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS + title: >- + ContractCodeHistoryOperationType actions that caused a + code change + type: string + updated: + description: Updated Tx position when the operation was executed. + properties: + block_height: + format: uint64 + title: BlockHeight is the block the contract was created at + type: string + tx_index: + format: uint64 + title: >- + TxIndex is a monotonic counter within the block + (actual transaction index, + + or gas consumed) + type: string + type: object + type: object + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the + + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + title: |- + QueryContractHistoryResponse is the response type for the + Query/ContractHistory RPC method type: object default: description: An unexpected error response. @@ -34386,85 +37487,35 @@ paths: message: type: string type: object - summary: Returns the account with authority to conduct upgrades + summary: ContractHistory gets the contract code history tags: - Query - /cosmos/upgrade/v1beta1/current_plan: + /cosmwasm/wasm/v1/contract/{address}/raw/{query_data}: get: - operationId: CurrentPlan + operationId: RawContractState + parameters: + - description: address is the address of the contract + in: path + name: address + required: true + type: string + - format: byte + in: path + name: query_data + required: true + type: string responses: '200': description: A successful response. schema: - description: >- - QueryCurrentPlanResponse is the response type for the - Query/CurrentPlan RPC - - method. properties: - plan: - description: plan is the current upgrade plan. - properties: - height: - description: The height at which the upgrade must be performed. - format: int64 - type: string - info: - title: >- - Any application specific upgrade info to be included - on-chain - - such as a git commit that validators could automatically - upgrade to - type: string - name: - description: >- - 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. - type: string - time: - description: >- - 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. - format: date-time - type: string - upgraded_client_state: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - description: >- - 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. - type: object + data: + format: byte + title: Data contains the raw store data + type: string + title: |- + QueryRawContractStateResponse is the response type for the + Query/RawContractState RPC method type: object default: description: An unexpected error response. @@ -34488,54 +37539,36 @@ paths: message: type: string type: object - summary: CurrentPlan queries the current upgrade plan. + summary: RawContractState gets single key from the raw store data of a contract tags: - Query - /cosmos/upgrade/v1beta1/module_versions: + /cosmwasm/wasm/v1/contract/{address}/smart/{query_data}: get: - description: 'Since: cosmos-sdk 0.43' - operationId: ModuleVersions + operationId: SmartContractState parameters: - - description: |- - 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. - in: query - name: module_name - required: false + - description: address is the address of the contract + in: path + name: address + required: true + type: string + - description: QueryData contains the query data passed to the contract + format: byte + in: path + name: query_data + required: true type: string responses: '200': description: A successful response. schema: - description: >- - QueryModuleVersionsResponse is the response type for the - Query/ModuleVersions - - RPC method. - - - Since: cosmos-sdk 0.43 properties: - module_versions: - description: >- - module_versions is a list of module names with their consensus - versions. - items: - description: |- - ModuleVersion specifies a module and its consensus version. - - Since: cosmos-sdk 0.43 - properties: - name: - title: name of the app module - type: string - version: - format: uint64 - title: consensus version of the app module - type: string - type: object - type: array + data: + format: byte + title: Data contains the json data returned from the smart contract + type: string + title: |- + QuerySmartContractStateResponse is the response type for the + Query/SmartContractState RPC method type: object default: description: An unexpected error response. @@ -34559,35 +37592,124 @@ paths: message: type: string type: object - summary: ModuleVersions queries the list of module versions from state. + summary: SmartContractState get smart query result from the contract tags: - Query - /cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}: + /cosmwasm/wasm/v1/contract/{address}/state: get: - operationId: UpgradedConsensusState + operationId: AllContractState parameters: - - description: |- - last height of the current chain must be sent in request - as this is the height under which next consensus state is stored - format: int64 + - description: address is the address of the contract in: path - name: last_height + name: address required: true type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean responses: '200': description: A successful response. schema: - description: >- - QueryUpgradedConsensusStateResponse is the response type for the - Query/UpgradedConsensusState + properties: + models: + items: + properties: + key: + format: byte + title: hex-encode key to read it better (this is often ascii) + type: string + value: + format: byte + title: base64-encode raw value + type: string + title: Model is a struct that holds a KV pair + type: object + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the - RPC method. - properties: - upgraded_consensus_state: - format: byte - title: 'Since: cosmos-sdk 0.43' - type: string + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + title: |- + QueryAllContractStateResponse is the response type for the + Query/AllContractState RPC method type: object default: description: An unexpected error response. @@ -34611,24 +37733,18 @@ paths: message: type: string type: object - summary: >- - 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) + summary: AllContractState gets all raw store data for a single contract tags: - Query - /cosmwasm/wasm/v1/code: + /cosmwasm/wasm/v1/contracts/creator/{creator_address}: get: - operationId: Codes + operationId: ContractsByCreator parameters: + - description: CreatorAddress is the address of contract creator + in: path + name: creator_address + required: true + type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -34689,43 +37805,14 @@ paths: '200': description: A successful response. schema: + description: |- + QueryContractsByCreatorResponse is the response type for the + Query/ContractsByCreator RPC method. properties: - code_infos: + contract_addresses: items: - properties: - code_id: - format: uint64 - type: string - creator: - type: string - data_hash: - format: byte - type: string - instantiate_permission: - description: AccessConfig access control type. - properties: - addresses: - items: - type: string - type: array - permission: - default: ACCESS_TYPE_UNSPECIFIED - description: >- - - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified - placeholder for empty value - - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden - - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted - - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses - enum: - - ACCESS_TYPE_UNSPECIFIED - - ACCESS_TYPE_NOBODY - - ACCESS_TYPE_EVERYBODY - - ACCESS_TYPE_ANY_OF_ADDRESSES - title: AccessType permission types - type: string - type: object - title: CodeInfoResponse contains code meta data from CodeInfo - type: object + type: string + title: ContractAddresses result set type: array pagination: description: >- @@ -34755,9 +37842,6 @@ paths: was set, its value is undefined otherwise type: string type: object - title: >- - QueryCodesResponse is the response type for the Query/Codes RPC - method type: object default: description: An unexpected error response. @@ -34781,64 +37865,44 @@ paths: message: type: string type: object - summary: Codes gets the metadata for all stored wasm codes + summary: ContractsByCreator gets the contracts by creator tags: - Query - /cosmwasm/wasm/v1/code/{code_id}: + /feemarket/v1/gas_price/{denom}: get: - operationId: Code + operationId: GasPrice parameters: - - format: uint64 + - description: denom we are querying gas price in in: path - name: code_id + name: denom required: true type: string responses: '200': description: A successful response. schema: + description: >- + GasPriceResponse is the response type for the Query/GasPrice RPC + method. + + Returns a gas price in specified denom. properties: - code_info: + price: + description: >- + DecCoin defines a token with a denomination and a decimal + amount. + + + NOTE: The amount field is an Dec which implements the custom + method + + signatures required by gogoproto. properties: - code_id: - format: uint64 - type: string - creator: + amount: type: string - data_hash: - format: byte + denom: type: string - instantiate_permission: - description: AccessConfig access control type. - properties: - addresses: - items: - type: string - type: array - permission: - default: ACCESS_TYPE_UNSPECIFIED - description: >- - - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified - placeholder for empty value - - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden - - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted - - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses - enum: - - ACCESS_TYPE_UNSPECIFIED - - ACCESS_TYPE_NOBODY - - ACCESS_TYPE_EVERYBODY - - ACCESS_TYPE_ANY_OF_ADDRESSES - title: AccessType permission types - type: string - type: object - title: CodeInfoResponse contains code meta data from CodeInfo type: object - data: - format: byte - type: string - title: >- - QueryCodeResponse is the response type for the Query/Code RPC - method type: object default: description: An unexpected error response. @@ -34862,115 +37926,179 @@ paths: message: type: string type: object - summary: Code gets the binary code and metadata for a singe wasm code + summary: |- + GasPrice returns the current feemarket module gas price + for specified denom. tags: - Query - /cosmwasm/wasm/v1/code/{code_id}/contracts: + /feemarket/v1/gas_prices: get: - operationId: ContractsByCode - parameters: - - format: uint64 - in: path - name: code_id - required: true - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. + operationId: GasPrices + responses: + '200': + description: A successful response. + schema: + description: >- + GasPricesResponse is the response type for the Query/GasPrices RPC + method. - count_total is only respected when offset is used. It is ignored - when key + Returns a gas price in all available denoms. + properties: + prices: + items: + description: >- + DecCoin defines a token with a denomination and a decimal + amount. - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. + NOTE: The amount field is an Dec which implements the custom + method - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: |- + GasPrices returns the current feemarket module list of gas prices + in all available denoms. + tags: + - Query + /feemarket/v1/params: + get: + operationId: Params responses: '200': description: A successful response. schema: + description: >- + ParamsResponse is the response type for the Query/Params RPC + method. properties: - contracts: - items: - type: string - title: contracts are a set of contract addresses - type: array - pagination: + params: description: >- - PageResponse is to be embedded in gRPC response messages where - the + Params contains the required set of parameters for the EIP1559 + fee market - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + plugin implementation. properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte + alpha: + description: >- + Alpha is the amount we additively increase the learning + rate + + when it is above or below the target +/- threshold. + + + Must be > 0. type: string - total: + beta: + description: >- + Beta is the amount we multiplicatively decrease the + learning rate + + when it is within the target +/- threshold. + + + Must be [0, 1]. + type: string + delta: + description: >- + Delta is the amount we additively increase/decrease the + gas price when the + + net block utilization difference in the window is + above/below the target + + utilization. + type: string + distribute_fees: + description: >- + DistributeFees is a boolean that determines whether the + fees are burned or + + distributed to all stakers. + type: boolean + enabled: + description: >- + Enabled is a boolean that determines whether the EIP1559 + fee market is + + enabled. + type: boolean + fee_denom: + description: >- + FeeDenom is the denom that will be used for all fee + payments. + type: string + gamma: + description: >- + Gamma is the threshold for the learning rate. If the + learning rate is + + above or below the target +/- threshold, we additively + increase the + + learning rate by Alpha. Otherwise, we multiplicatively + decrease the + + learning rate by Beta. + + + Must be [0, 0.5]. + type: string + max_block_utilization: + description: MaxBlockUtilization is the maximum block utilization. format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + type: string + max_learning_rate: + description: MaxLearningRate is the upper bound for the learning rate. + type: string + min_base_gas_price: + description: >- + MinBaseGasPrice determines the initial gas price of the + module and the - was set, its value is undefined otherwise + global minimum for the network. + type: string + min_learning_rate: + description: MinLearningRate is the lower bound for the learning rate. + type: string + window: + description: >- + Window defines the window size for calculating an adaptive + learning rate + + over a moving window of blocks. + format: uint64 type: string type: object - title: |- - QueryContractsByCodeResponse is the response type for the - Query/ContractsByCode RPC method type: object default: description: An unexpected error response. @@ -34994,61 +38122,57 @@ paths: message: type: string type: object - summary: ContractsByCode lists all smart contracts for a code id + summary: Params returns the current feemarket module parameters. tags: - Query - /cosmwasm/wasm/v1/codes/params: + /feemarket/v1/state: get: - operationId: Params + operationId: State responses: '200': description: A successful response. schema: - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. + description: StateResponse is the response type for the Query/State RPC method. properties: - params: - description: params defines the parameters of the module. + state: + description: >- + State is utilized to track the current state of the fee + market. This includes + + the current base fee, learning rate, and block utilization + within the + + specified AIMD window. properties: - code_upload_access: - description: AccessConfig access control type. - properties: - addresses: - items: - type: string - type: array - permission: - default: ACCESS_TYPE_UNSPECIFIED - description: >- - - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified - placeholder for empty value - - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden - - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted - - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses - enum: - - ACCESS_TYPE_UNSPECIFIED - - ACCESS_TYPE_NOBODY - - ACCESS_TYPE_EVERYBODY - - ACCESS_TYPE_ANY_OF_ADDRESSES - title: AccessType permission types - type: string - type: object - instantiate_default_permission: - default: ACCESS_TYPE_UNSPECIFIED + base_gas_price: description: >- - - ACCESS_TYPE_UNSPECIFIED: AccessTypeUnspecified - placeholder for empty value - - ACCESS_TYPE_NOBODY: AccessTypeNobody forbidden - - ACCESS_TYPE_EVERYBODY: AccessTypeEverybody unrestricted - - ACCESS_TYPE_ANY_OF_ADDRESSES: AccessTypeAnyOfAddresses allow any of the addresses - enum: - - ACCESS_TYPE_UNSPECIFIED - - ACCESS_TYPE_NOBODY - - ACCESS_TYPE_EVERYBODY - - ACCESS_TYPE_ANY_OF_ADDRESSES - title: AccessType permission types + BaseGasPrice is the current base fee. This is denominated + in the fee per + + gas unit. + type: string + index: + description: >- + Index is the index of the current block in the block + utilization window. + format: uint64 + type: string + learning_rate: + description: LearningRate is the current learning rate. type: string + window: + description: >- + Window contains a list of the last blocks' utilization + values. This is used + + to calculate the next base fee. This stores the number of + units of gas + + consumed per block. + items: + format: uint64 + type: string + type: array type: object type: object default: @@ -35073,110 +38197,117 @@ paths: message: type: string type: object - summary: Params gets the module params + summary: State returns the current feemarket module state. tags: - Query - /cosmwasm/wasm/v1/codes/pinned: + /gaia/globalfee/v1beta1/params: get: - operationId: PinnedCodes - parameters: - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: |- + QueryMinimumGasPricesResponse is the response type for the + Query/MinimumGasPrices RPC method. + properties: + params: + description: Params defines the set of module parameters. + properties: + bypass_min_fee_msg_types: + description: >- + bypass_min_fee_msg_types defines a list of message type + urls - It is less efficient than using key. Only one of offset or key - should + that are free of fee charge. + items: + type: string + type: array + max_total_bypass_min_fee_msg_gas_usage: + description: >- + max_total_bypass_min_fee_msg_gas_usage defines the total + maximum gas usage - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. + allowed for a transaction containing only messages of + types in bypass_min_fee_msg_types - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include + to bypass fee charge. + format: uint64 + type: string + minimum_gas_prices: + items: + description: >- + DecCoin defines a token with a denomination and a + decimal amount. - a count of the total number of items available for pagination in - UIs. - count_total is only respected when offset is used. It is ignored - when key + NOTE: The amount field is an Dec which implements the + custom method - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + minimum_gas_prices stores the minimum gas price(s) for all + TX on the chain. + When multiple coins are defined then they are accepted + alternatively. - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean + The list must be sorted by denoms asc. No duplicate denoms + or zero amount + + values allowed. For more information see + + https://docs.cosmos.network/main/modules/auth#concepts + type: array + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + tags: + - Query + /ibc/apps/packetforward/v1/params: + get: + operationId: Params responses: '200': description: A successful response. schema: + description: >- + QueryParamsResponse is the response type for the Query/Params RPC + method. properties: - code_ids: - items: - format: uint64 - type: string - type: array - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + params: + description: params defines the parameters of the module. properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise + fee_percentage: type: string type: object - title: |- - QueryPinnedCodesResponse is the response type for the - Query/PinnedCodes RPC method type: object default: description: An unexpected error response. @@ -35200,81 +38331,31 @@ paths: message: type: string type: object - summary: PinnedCodes gets the pinned code ids + summary: Params queries all parameters of the packetforward module. tags: - Query - /cosmwasm/wasm/v1/contract/{address}: + /ibc/apps/transfer/v1/denom_hashes/{trace}: get: - operationId: ContractInfo + operationId: DenomHash parameters: - - description: address is the address of the contract to query + - description: The denomination trace ([port_id]/[channel_id])+/[denom] in: path - name: address + name: trace required: true type: string responses: '200': description: A successful response. schema: + description: >- + QueryDenomHashResponse is the response type for the + Query/DenomHash RPC + + method. properties: - address: - title: address is the address of the contract + hash: + description: hash (in hex format) of the denomination trace information. type: string - contract_info: - properties: - admin: - title: Admin is an optional address that can execute migrations - type: string - code_id: - format: uint64 - title: CodeID is the reference to the stored Wasm code - type: string - created: - description: Created Tx position when the contract was instantiated. - properties: - block_height: - format: uint64 - title: BlockHeight is the block the contract was created at - type: string - tx_index: - format: uint64 - title: >- - TxIndex is a monotonic counter within the block - (actual transaction index, - - or gas consumed) - type: string - type: object - creator: - title: Creator address who initially instantiated the contract - type: string - extension: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - description: >- - Extension is an extension point to store custom metadata - within the - - persistence model. - ibc_port_id: - type: string - label: - description: >- - Label is optional metadata to be stored with a contract - instance. - type: string - title: ContractInfo stores a WASM contract instance - type: object - title: >- - QueryContractInfoResponse is the response type for the - Query/ContractInfo RPC - - method type: object default: description: An unexpected error response. @@ -35298,18 +38379,13 @@ paths: message: type: string type: object - summary: ContractInfo gets the contract meta data + summary: DenomHash queries a denomination hash information. tags: - Query - /cosmwasm/wasm/v1/contract/{address}/history: + /ibc/apps/transfer/v1/denom_traces: get: - operationId: ContractHistory + operationId: DenomTraces parameters: - - description: address is the address of the contract to query - in: path - name: address - required: true - type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -35370,52 +38446,31 @@ paths: '200': description: A successful response. schema: + description: >- + QueryConnectionsResponse is the response type for the + Query/DenomTraces RPC + + method. properties: - entries: + denom_traces: + description: denom_traces returns all denominations trace information. items: - description: ContractCodeHistoryEntry metadata to a contract. + description: >- + DenomTrace contains the base denomination for ICS20 fungible + tokens and the + + source tracing information path. properties: - code_id: - format: uint64 - title: CodeID is the reference to the stored WASM code - type: string - msg: - format: byte + base_denom: + description: base denomination of the relayed fungible token. type: string - operation: - default: CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED + path: description: >- - - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED: - ContractCodeHistoryOperationTypeUnspecified placeholder - for empty value - - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT: ContractCodeHistoryOperationTypeInit on chain contract instantiation - - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE: ContractCodeHistoryOperationTypeMigrate code migration - - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS: ContractCodeHistoryOperationTypeGenesis based on genesis data - enum: - - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED - - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT - - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE - - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS - title: >- - ContractCodeHistoryOperationType actions that caused a - code change - type: string - updated: - description: Updated Tx position when the operation was executed. - properties: - block_height: - format: uint64 - title: BlockHeight is the block the contract was created at - type: string - tx_index: - format: uint64 - title: >- - TxIndex is a monotonic counter within the block - (actual transaction index, + path defines the chain of port/channel identifiers used + for tracing the - or gas consumed) - type: string - type: object + source of the fungible token. + type: string type: object type: array pagination: @@ -35437,18 +38492,78 @@ paths: there are no more results. format: byte type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: DenomTraces queries all denomination traces. + tags: + - Query + /ibc/apps/transfer/v1/denom_traces/{hash}: + get: + operationId: DenomTrace + parameters: + - description: >- + hash (in hex format) or denom (full denom with ibc prefix) of the + denomination trace information. + in: path + name: hash + required: true + type: string + responses: + '200': + description: A successful response. + schema: + description: >- + QueryDenomTraceResponse is the response type for the + Query/DenomTrace RPC + + method. + properties: + denom_trace: + description: >- + denom_trace returns the requested denomination trace + information. + properties: + base_denom: + description: base denomination of the relayed fungible token. + type: string + path: + description: >- + path defines the chain of port/channel identifiers used + for tracing the - was set, its value is undefined otherwise + source of the fungible token. type: string type: object - title: |- - QueryContractHistoryResponse is the response type for the - Query/ContractHistory RPC method type: object default: description: An unexpected error response. @@ -35472,35 +38587,38 @@ paths: message: type: string type: object - summary: ContractHistory gets the contract code history + summary: DenomTrace queries a denomination trace information. tags: - Query - /cosmwasm/wasm/v1/contract/{address}/raw/{query_data}: + /ibc/apps/transfer/v1/params: get: - operationId: RawContractState - parameters: - - description: address is the address of the contract - in: path - name: address - required: true - type: string - - format: byte - in: path - name: query_data - required: true - type: string + operationId: Params responses: '200': description: A successful response. schema: + description: >- + QueryParamsResponse is the response type for the Query/Params RPC + method. properties: - data: - format: byte - title: Data contains the raw store data - type: string - title: |- - QueryRawContractStateResponse is the response type for the - Query/RawContractState RPC method + params: + description: params defines the parameters of the module. + properties: + receive_enabled: + description: >- + receive_enabled enables or disables all cross-chain token + transfers to this + + chain. + type: boolean + send_enabled: + description: >- + send_enabled enables or disables all cross-chain token + transfers from this + + chain. + type: boolean + type: object type: object default: description: An unexpected error response. @@ -35524,36 +38642,47 @@ paths: message: type: string type: object - summary: RawContractState gets single key from the raw store data of a contract + summary: Params queries all parameters of the ibc-transfer module. tags: - Query - /cosmwasm/wasm/v1/contract/{address}/smart/{query_data}: + /interchain_security/ccv/consumer/next-fee-distribution: get: - operationId: SmartContractState - parameters: - - description: address is the address of the contract - in: path - name: address - required: true - type: string - - description: QueryData contains the query data passed to the contract - format: byte - in: path - name: query_data - required: true - type: string + operationId: QueryNextFeeDistribution responses: '200': description: A successful response. schema: properties: data: - format: byte - title: Data contains the json data returned from the smart contract - type: string - title: |- - QuerySmartContractStateResponse is the response type for the - Query/SmartContractState RPC method + properties: + currentHeight: + format: int64 + title: current block height at the time of querying + type: string + distribution_fraction: + title: ratio between consumer and provider fee distribution + type: string + lastHeight: + format: int64 + title: block height at which last distribution took place + type: string + nextHeight: + format: int64 + title: block height at which next distribution will take place + type: string + toConsumer: + title: amount distributed (kept) by consumer chain + type: string + toProvider: + title: amount distributed to provider chain + type: string + total: + title: total accruead fees at the time of querying + type: string + title: >- + NextFeeDistributionEstimate holds information about next fee + distribution + type: object type: object default: description: An unexpected error response. @@ -35577,124 +38706,197 @@ paths: message: type: string type: object - summary: SmartContractState get smart query result from the contract + summary: >- + ConsumerGenesis queries the genesis state needed to start a consumer + chain + + whose proposal has been accepted tags: - Query - /cosmwasm/wasm/v1/contract/{address}/state: + /interchain_security/ccv/consumer/params: get: - operationId: AllContractState - parameters: - - description: address is the address of the contract - in: path - name: address - required: true - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. + operationId: QueryParams + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. + properties: + params: + description: params holds all the parameters of this module. + properties: + blocks_per_distribution_transmission: + description: >- + ///////////////////// - It is less efficient than using key. Only one of offset or key - should + Distribution Params - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. + Number of blocks between ibc-token-transfers from the + consumer chain to - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include + the provider chain. Note that at this transmission event a + fraction of - a count of the total number of items available for pagination in - UIs. + the accumulated tokens are divided and sent consumer + redistribution + + address. + format: int64 + type: string + ccv_timeout_period: + title: >- + Sent CCV related IBC packets will timeout after this + duration + type: string + consumer_redistribution_fraction: + description: >- + The fraction of tokens allocated to the consumer + redistribution address + + during distribution events. The fraction is a string + representing a + + decimal number. For example "0.75" would represent 75%. + type: string + distribution_transmission_channel: + description: >- + Channel, and provider-chain receiving address to send + distribution token + + transfers over. These parameters is auto-set during the + consumer <-> + + provider handshake procedure. + type: string + enabled: + title: >- + TODO: Remove enabled flag and find a better way to setup + integration tests + + See: + https://github.com/cosmos/interchain-security/issues/339 + type: boolean + historical_entries: + description: >- + The number of historical info entries to persist in store. + + This param is a part of the cosmos sdk staking module. In + the case of + + a ccv enabled consumer chain, the ccv module acts as the + staking module. + format: int64 + type: string + provider_fee_pool_addr_str: + type: string + provider_reward_denoms: + items: + type: string + title: >- + Provider-originated reward denoms. These are denoms coming + from the + + provider which are allowed to be used as rewards. e.g. + "uatom" + type: array + retry_delay_period: + description: >- + The period after which a consumer can retry sending a + throttled packet. + type: string + reward_denoms: + description: >- + Reward denoms. These are the denominations which are + allowed to be sent to - count_total is only respected when offset is used. It is ignored - when key + the provider as rewards. + items: + type: string + type: array + soft_opt_out_threshold: + title: >- + The threshold for the percentage of validators at the + bottom of the set who - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. + can opt out of running the consumer chain without being + punished. For + example, a value of 0.05 means that the validators in the + bottom 5% of the - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean - responses: - '200': - description: A successful response. + set can opt out + type: string + transfer_timeout_period: + title: >- + Sent transfer related IBC packets will timeout after this + duration + type: string + unbonding_period: + description: >- + Unbonding period for the consumer, + + which should be smaller than that of the provider in + general. + type: string + type: object + type: object + default: + description: An unexpected error response. schema: properties: - models: + code: + format: int32 + type: integer + details: items: properties: - key: - format: byte - title: hex-encode key to read it better (this is often ascii) + type_url: type: string value: format: byte - title: base64-encode raw value type: string - title: Model is a struct that holds a KV pair type: object type: array - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + error: + type: string + message: + type: string + type: object + summary: QueryParams queries the ccv/consumer module parameters. + tags: + - Query + /interchain_security/ccv/consumer/provider-info: + get: + operationId: QueryProviderInfo + responses: + '200': + description: A successful response. + schema: + properties: + consumer: properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte + chainID: type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise + channelID: + type: string + clientID: + type: string + connectionID: + type: string + type: object + provider: + properties: + chainID: + type: string + channelID: + type: string + clientID: + type: string + connectionID: type: string type: object - title: |- - QueryAllContractStateResponse is the response type for the - Query/AllContractState RPC method type: object default: description: An unexpected error response. @@ -35718,114 +38920,109 @@ paths: message: type: string type: object - summary: AllContractState gets all raw store data for a single contract tags: - Query - /cosmwasm/wasm/v1/contracts/creator/{creator_address}: + /interchain_security/ccv/consumer/throttle_state: get: - operationId: ContractsByCreator - parameters: - - description: CreatorAddress is the address of contract creator - in: path - name: creator_address - required: true - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean + operationId: QueryThrottleState responses: '200': description: A successful response. schema: - description: |- - QueryContractsByCreatorResponse is the response type for the - Query/ContractsByCreator RPC method. properties: - contract_addresses: + packet_data_queue: items: - type: string - title: ContractAddresses result set + properties: + slashPacketData: + description: >- + This packet is sent from the consumer chain to the + provider chain + + to request the slashing of a validator as a result of an + infraction + + committed on the consumer chain. + properties: + infraction: + title: >- + tell if the slashing is for a downtime or a + double-signing infraction + default: INFRACTION_UNSPECIFIED + description: >- + Infraction indicates the infraction a validator + commited. + + - INFRACTION_UNSPECIFIED: UNSPECIFIED defines an empty infraction. + - INFRACTION_DOUBLE_SIGN: DOUBLE_SIGN defines a validator that double-signs a block. + - INFRACTION_DOWNTIME: DOWNTIME defines a validator that missed signing too many blocks. + enum: + - INFRACTION_UNSPECIFIED + - INFRACTION_DOUBLE_SIGN + - INFRACTION_DOWNTIME + type: string + validator: + properties: + address: + format: byte + type: string + power: + format: int64 + title: PubKey pub_key = 2 [(gogoproto.nullable)=false]; + type: string + type: object + valset_update_id: + format: uint64 + title: map to the infraction block height on the provider + type: string + type: object + type: + default: CONSUMER_PACKET_TYPE_UNSPECIFIED + description: >- + ConsumerPacketType indicates interchain security + specific packet types. + + - CONSUMER_PACKET_TYPE_UNSPECIFIED: UNSPECIFIED packet type + - CONSUMER_PACKET_TYPE_SLASH: Slash packet + - CONSUMER_PACKET_TYPE_VSCM: VSCMatured packet + enum: + - CONSUMER_PACKET_TYPE_UNSPECIFIED + - CONSUMER_PACKET_TYPE_SLASH + - CONSUMER_PACKET_TYPE_VSCM + type: string + vscMaturedPacketData: + description: >- + This packet is sent from the consumer chain to the + provider chain + + to notify that a VSC packet reached maturity on the + consumer chain. + properties: + valset_update_id: + format: uint64 + title: the id of the VSC packet that reached maturity + type: string + type: object + title: >- + ConsumerPacketData contains a consumer packet data and a + type tag + type: object type: array - pagination: + slash_record: description: >- - PageResponse is to be embedded in gRPC response messages where - the + A record storing the state of a slash packet sent to the + provider chain - corresponding request message has used PageRequest. + which may bounce back and forth until handled by the provider. - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - was set, its value is undefined otherwise + Note this type is only used internally to the consumer CCV + module. + properties: + send_time: + format: date-time type: string + waiting_on_reply: + type: boolean type: object type: object default: @@ -35850,74 +39047,110 @@ paths: message: type: string type: object - summary: ContractsByCreator gets the contracts by creator + summary: >- + QueryThrottleState returns on-chain state relevant to throttled consumer + packets tags: - Query - /gaia/globalfee/v1beta1/params: + /neutron-org/neutron/feerefunder/info: get: - operationId: Params + operationId: FeeInfo + parameters: + - in: query + name: channel_id + required: false + type: string + - in: query + name: port_id + required: false + type: string + - format: uint64 + in: query + name: sequence + required: false + type: string responses: '200': description: A successful response. schema: - description: |- - QueryMinimumGasPricesResponse is the response type for the - Query/MinimumGasPrices RPC method. properties: - params: - description: Params defines the set of module parameters. + fee_info: properties: - bypass_min_fee_msg_types: - description: >- - bypass_min_fee_msg_types defines a list of message type - urls - - that are free of fee charge. - items: - type: string - type: array - max_total_bypass_min_fee_msg_gas_usage: - description: >- - max_total_bypass_min_fee_msg_gas_usage defines the total - maximum gas usage + fee: + properties: + ack_fee: + items: + description: >- + Coin defines a token with a denomination and an + amount. - allowed for a transaction containing only messages of - types in bypass_min_fee_msg_types - to bypass fee charge. - format: uint64 - type: string - minimum_gas_prices: - items: - description: >- - DecCoin defines a token with a denomination and a - decimal amount. + NOTE: The amount field is an Int which implements + the custom method + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: the packet acknowledgement fee + type: array + recv_fee: + items: + description: >- + Coin defines a token with a denomination and an + amount. - NOTE: The amount field is an Dec which implements the - custom method - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: >- - minimum_gas_prices stores the minimum gas price(s) for all - TX on the chain. + NOTE: The amount field is an Int which implements + the custom method - When multiple coins are defined then they are accepted - alternatively. + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: the packet receive fee + type: array + timeout_fee: + items: + description: >- + Coin defines a token with a denomination and an + amount. - The list must be sorted by denoms asc. No duplicate denoms - or zero amount - values allowed. For more information see + NOTE: The amount field is an Int which implements + the custom method - https://docs.cosmos.network/main/modules/auth#concepts - type: array + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: the packet timeout fee + type: array + title: >- + Fee defines the ICS29 receive, acknowledgement and timeout + fees + type: object + packet_id: + properties: + channel_id: + type: string + port_id: + type: string + sequence: + format: uint64 + type: string + type: object + payer: + type: string type: object type: object default: @@ -35944,7 +39177,7 @@ paths: type: object tags: - Query - /ibc/apps/packetforward/v1/params: + /neutron-org/neutron/feerefunder/params: get: operationId: Params responses: @@ -35952,63 +39185,76 @@ paths: description: A successful response. schema: description: >- - QueryParamsResponse is the response type for the Query/Params RPC + QueryParamsResponse is response type for the Query/Params RPC method. properties: params: - description: params defines the parameters of the module. + description: params holds all the parameters of this module. properties: - fee_percentage: - type: string - type: object - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: Params queries all parameters of the packetforward module. - tags: - - Query - /ibc/apps/transfer/v1/denom_hashes/{trace}: - get: - operationId: DenomHash - parameters: - - description: The denomination trace ([port_id]/[channel_id])+/[denom] - in: path - name: trace - required: true - type: string - responses: - '200': - description: A successful response. - schema: - description: >- - QueryDenomHashResponse is the response type for the - Query/DenomHash RPC + min_fee: + properties: + ack_fee: + items: + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: the packet acknowledgement fee + type: array + recv_fee: + items: + description: >- + Coin defines a token with a denomination and an + amount. - method. - properties: - hash: - description: hash (in hex format) of the denomination trace information. - type: string + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: the packet receive fee + type: array + timeout_fee: + items: + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: the packet timeout fee + type: array + title: >- + Fee defines the ICS29 receive, acknowledgement and timeout + fees + type: object + type: object type: object default: description: An unexpected error response. @@ -36032,13 +39278,24 @@ paths: message: type: string type: object - summary: DenomHash queries a denomination hash information. + summary: Parameters queries the parameters of the module. tags: - Query - /ibc/apps/transfer/v1/denom_traces: + /neutron/contractmanager/failures: get: - operationId: DenomTraces + operationId: Failures parameters: + - description: address of the contract which Sudo call failed. + in: query + name: address + required: false + type: string + - description: ID of the failure for the given contract. + format: uint64 + in: query + name: failure_id + required: false + type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -36100,30 +39357,40 @@ paths: description: A successful response. schema: description: >- - QueryConnectionsResponse is the response type for the - Query/DenomTraces RPC - + QueryFailuresResponse is response type for the Query/Failures RPC method. properties: - denom_traces: - description: denom_traces returns all denominations trace information. + failures: items: - description: >- - DenomTrace contains the base denomination for ICS20 fungible - tokens and the - - source tracing information path. properties: - base_denom: - description: base denomination of the relayed fungible token. + address: + title: Address of the failed contract type: string - path: - description: >- - path defines the chain of port/channel identifiers used - for tracing the - - source of the fungible token. + error: + title: >- + Redacted error response of the sudo call. Full error is + emitted as an event + type: string + id: + format: uint64 + title: Id of the failure under specific address + type: string + sudo_payload: + format: byte + title: >- + Serialized MessageSudoCallback with Packet and Ack(if + exists) type: string + title: >- + Failure message contains information about ACK failures and + can be used to + + replay ACK in case of requirement. + + Note that Failure means that sudo handler to cosmwasm + contract failed for + + some reason type: object type: array pagination: @@ -36177,164 +39444,148 @@ paths: message: type: string type: object - summary: DenomTraces queries all denomination traces. + summary: Queries a list of Failures occurred on the network. tags: - Query - /ibc/apps/transfer/v1/denom_traces/{hash}: + /neutron/contractmanager/failures/{address}: get: - operationId: DenomTrace + operationId: AddressFailures parameters: - - description: >- - hash (in hex format) or denom (full denom with ibc prefix) of the - denomination trace information. + - description: address of the contract which Sudo call failed. in: path - name: hash + name: address required: true type: string - responses: - '200': - description: A successful response. - schema: - description: >- - QueryDenomTraceResponse is the response type for the - Query/DenomTrace RPC + - description: ID of the failure for the given contract. + format: uint64 + in: query + name: failure_id + required: false + type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. - method. - properties: - denom_trace: - description: >- - denom_trace returns the requested denomination trace - information. - properties: - base_denom: - description: base denomination of the relayed fungible token. - type: string - path: - description: >- - path defines the chain of port/channel identifiers used - for tracing the + It is less efficient than using key. Only one of offset or key + should - source of the fungible token. - type: string - type: object - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: DenomTrace queries a denomination trace information. - tags: - - Query - /ibc/apps/transfer/v1/params: - get: - operationId: Params - responses: - '200': - description: A successful response. - schema: - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. - properties: - params: - description: params defines the parameters of the module. - properties: - receive_enabled: - description: >- - receive_enabled enables or disables all cross-chain token - transfers to this + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. - chain. - type: boolean - send_enabled: - description: >- - send_enabled enables or disables all cross-chain token - transfers from this + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include - chain. - type: boolean - type: object - type: object - default: - description: An unexpected error response. + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + responses: + '200': + description: A successful response. schema: + description: >- + QueryFailuresResponse is response type for the Query/Failures RPC + method. properties: - code: - format: int32 - type: integer - details: + failures: items: properties: - type_url: + address: + title: Address of the failed contract type: string - value: + error: + title: >- + Redacted error response of the sudo call. Full error is + emitted as an event + type: string + id: + format: uint64 + title: Id of the failure under specific address + type: string + sudo_payload: format: byte + title: >- + Serialized MessageSudoCallback with Packet and Ack(if + exists) type: string + title: >- + Failure message contains information about ACK failures and + can be used to + + replay ACK in case of requirement. + + Note that Failure means that sudo handler to cosmwasm + contract failed for + + some reason type: object type: array - error: - type: string - message: - type: string - type: object - summary: Params queries all parameters of the ibc-transfer module. - tags: - - Query - /interchain_security/ccv/consumer/next-fee-distribution: - get: - operationId: QueryNextFeeDistribution - responses: - '200': - description: A successful response. - schema: - properties: - data: + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the + + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } properties: - currentHeight: - format: int64 - title: current block height at the time of querying - type: string - distribution_fraction: - title: ratio between consumer and provider fee distribution - type: string - lastHeight: - format: int64 - title: block height at which last distribution took place - type: string - nextHeight: - format: int64 - title: block height at which next distribution will take place - type: string - toConsumer: - title: amount distributed (kept) by consumer chain - type: string - toProvider: - title: amount distributed to provider chain + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte type: string total: - title: total accruead fees at the time of querying + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise type: string - title: >- - NextFeeDistributionEstimate holds information about next fee - distribution type: object type: object default: @@ -36359,139 +39610,147 @@ paths: message: type: string type: object - summary: >- - ConsumerGenesis queries the genesis state needed to start a consumer - chain - - whose proposal has been accepted + summary: Queries Failures by contract address. tags: - Query - /interchain_security/ccv/consumer/params: + /neutron/contractmanager/failures/{address}/{failure_id}: get: - operationId: QueryParams - responses: - '200': - description: A successful response. - schema: - description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. - properties: - params: - description: params holds all the parameters of this module. - properties: - blocks_per_distribution_transmission: - description: >- - ///////////////////// - - Distribution Params - - Number of blocks between ibc-token-transfers from the - consumer chain to - - the provider chain. Note that at this transmission event a - fraction of - - the accumulated tokens are divided and sent consumer - redistribution + operationId: AddressFailure + parameters: + - description: address of the contract which Sudo call failed. + in: path + name: address + required: true + type: string + - description: ID of the failure for the given contract. + format: uint64 + in: path + name: failure_id + required: true + type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false + type: string + - description: >- + offset is a numeric offset that can be used when key is unavailable. - address. - format: int64 - type: string - ccv_timeout_period: - title: >- - Sent CCV related IBC packets will timeout after this - duration - type: string - consumer_redistribution_fraction: - description: >- - The fraction of tokens allocated to the consumer - redistribution address + It is less efficient than using key. Only one of offset or key + should - during distribution events. The fraction is a string - representing a + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. - decimal number. For example "0.75" would represent 75%. - type: string - distribution_transmission_channel: - description: >- - Channel, and provider-chain receiving address to send - distribution token + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false + type: string + - description: >- + count_total is set to true to indicate that the result set should + include - transfers over. These parameters is auto-set during the - consumer <-> + a count of the total number of items available for pagination in + UIs. - provider handshake procedure. - type: string - enabled: - title: >- - TODO: Remove enabled flag and find a better way to setup - integration tests + count_total is only respected when offset is used. It is ignored + when key - See: - https://github.com/cosmos/interchain-security/issues/339 - type: boolean - historical_entries: - description: >- - The number of historical info entries to persist in store. + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. - This param is a part of the cosmos sdk staking module. In - the case of - a ccv enabled consumer chain, the ccv module acts as the - staking module. - format: int64 - type: string - provider_fee_pool_addr_str: - type: string - provider_reward_denoms: - items: + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + responses: + '200': + description: A successful response. + schema: + description: >- + QueryFailuresResponse is response type for the Query/Failures RPC + method. + properties: + failures: + items: + properties: + address: + title: Address of the failed contract + type: string + error: + title: >- + Redacted error response of the sudo call. Full error is + emitted as an event type: string - title: >- - Provider-originated reward denoms. These are denoms coming - from the + id: + format: uint64 + title: Id of the failure under specific address + type: string + sudo_payload: + format: byte + title: >- + Serialized MessageSudoCallback with Packet and Ack(if + exists) + type: string + title: >- + Failure message contains information about ACK failures and + can be used to - provider which are allowed to be used as rewards. e.g. - "uatom" - type: array - retry_delay_period: - description: >- - The period after which a consumer can retry sending a - throttled packet. - type: string - reward_denoms: - description: >- - Reward denoms. These are the denominations which are - allowed to be sent to + replay ACK in case of requirement. - the provider as rewards. - items: - type: string - type: array - soft_opt_out_threshold: - title: >- - The threshold for the percentage of validators at the - bottom of the set who + Note that Failure means that sudo handler to cosmwasm + contract failed for - can opt out of running the consumer chain without being - punished. For + some reason + type: object + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the - example, a value of 0.05 means that the validators in the - bottom 5% of the + corresponding request message has used PageRequest. - set can opt out + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte type: string - transfer_timeout_period: + total: + format: uint64 title: >- - Sent transfer related IBC packets will timeout after this - duration - type: string - unbonding_period: - description: >- - Unbonding period for the consumer, + total is total number of results available if + PageRequest.count_total - which should be smaller than that of the provider in - general. + was set, its value is undefined otherwise type: string type: object type: object @@ -36517,37 +39776,25 @@ paths: message: type: string type: object - summary: QueryParams queries the ccv/consumer module parameters. + summary: Queries a Failure by contract address and failure ID. tags: - Query - /interchain_security/ccv/consumer/provider-info: + /neutron/contractmanager/params: get: - operationId: QueryProviderInfo + operationId: Params responses: '200': description: A successful response. schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. properties: - consumer: - properties: - chainID: - type: string - channelID: - type: string - clientID: - type: string - connectionID: - type: string - type: object - provider: + params: + description: params holds all the parameters of this module. properties: - chainID: - type: string - channelID: - type: string - clientID: - type: string - connectionID: + sudo_call_gas_limit: + format: uint64 type: string type: object type: object @@ -36573,109 +39820,27 @@ paths: message: type: string type: object + summary: Parameters queries the parameters of the module. tags: - Query - /interchain_security/ccv/consumer/throttle_state: + /neutron/cron/params: get: - operationId: QueryThrottleState + operationId: Params responses: '200': description: A successful response. schema: properties: - packet_data_queue: - items: - properties: - slashPacketData: - description: >- - This packet is sent from the consumer chain to the - provider chain - - to request the slashing of a validator as a result of an - infraction - - committed on the consumer chain. - properties: - infraction: - title: >- - tell if the slashing is for a downtime or a - double-signing infraction - default: INFRACTION_UNSPECIFIED - description: >- - Infraction indicates the infraction a validator - commited. - - - INFRACTION_UNSPECIFIED: UNSPECIFIED defines an empty infraction. - - INFRACTION_DOUBLE_SIGN: DOUBLE_SIGN defines a validator that double-signs a block. - - INFRACTION_DOWNTIME: DOWNTIME defines a validator that missed signing too many blocks. - enum: - - INFRACTION_UNSPECIFIED - - INFRACTION_DOUBLE_SIGN - - INFRACTION_DOWNTIME - type: string - validator: - properties: - address: - format: byte - type: string - power: - format: int64 - title: PubKey pub_key = 2 [(gogoproto.nullable)=false]; - type: string - type: object - valset_update_id: - format: uint64 - title: map to the infraction block height on the provider - type: string - type: object - type: - default: CONSUMER_PACKET_TYPE_UNSPECIFIED - description: >- - ConsumerPacketType indicates interchain security - specific packet types. - - - CONSUMER_PACKET_TYPE_UNSPECIFIED: UNSPECIFIED packet type - - CONSUMER_PACKET_TYPE_SLASH: Slash packet - - CONSUMER_PACKET_TYPE_VSCM: VSCMatured packet - enum: - - CONSUMER_PACKET_TYPE_UNSPECIFIED - - CONSUMER_PACKET_TYPE_SLASH - - CONSUMER_PACKET_TYPE_VSCM - type: string - vscMaturedPacketData: - description: >- - This packet is sent from the consumer chain to the - provider chain - - to notify that a VSC packet reached maturity on the - consumer chain. - properties: - valset_update_id: - format: uint64 - title: the id of the VSC packet that reached maturity - type: string - type: object - title: >- - ConsumerPacketData contains a consumer packet data and a - type tag - type: object - type: array - slash_record: - description: >- - A record storing the state of a slash packet sent to the - provider chain - - which may bounce back and forth until handled by the provider. - - - Note this type is only used internally to the consumer CCV - module. + params: + description: params holds all the parameters of this module. properties: - send_time: - format: date-time + limit: + format: uint64 + title: Limit of schedules executed in one block + type: string + security_address: + title: Security address that can remove schedules type: string - waiting_on_reply: - type: boolean type: object type: object default: @@ -36700,111 +39865,132 @@ paths: message: type: string type: object - summary: >- - QueryThrottleState returns on-chain state relevant to throttled consumer - packets + summary: Queries the parameters of the module. tags: - Query - /neutron-org/neutron/feerefunder/info: + /neutron/cron/schedule: get: - operationId: FeeInfo + operationId: Schedules parameters: - - in: query - name: channel_id + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key required: false type: string - - in: query - name: port_id + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit required: false type: string - - format: uint64 + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. in: query - name: sequence + name: pagination.count_total required: false - type: string + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean responses: '200': description: A successful response. schema: properties: - fee_info: - properties: - fee: - properties: - ack_fee: - items: - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: the packet acknowledgement fee - type: array - recv_fee: - items: - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: the packet receive fee - type: array - timeout_fee: - items: - description: >- - Coin defines a token with a denomination and an - amount. - + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the - NOTE: The amount field is an Int which implements - the custom method + corresponding request message has used PageRequest. - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: the packet timeout fee - type: array + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 title: >- - Fee defines the ICS29 receive, acknowledgement and timeout - fees - type: object - packet_id: - properties: - channel_id: - type: string - port_id: - type: string - sequence: - format: uint64 - type: string - type: object - payer: + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise type: string type: object + schedules: + items: + properties: + last_execute_height: + format: uint64 + title: Last execution's block height + type: string + msgs: + items: + properties: + contract: + title: Contract is the address of the smart contract + type: string + msg: + title: >- + Msg is json encoded message to be passed to the + contract + type: string + type: object + title: Msgs that will be executed every period amount of time + type: array + name: + title: Name of schedule + type: string + period: + format: uint64 + title: Period in blocks + type: string + type: object + type: array type: object default: description: An unexpected error response. @@ -36828,85 +40014,49 @@ paths: message: type: string type: object + summary: Queries a list of Schedule items. tags: - Query - /neutron-org/neutron/feerefunder/params: + /neutron/cron/schedule/{name}: get: - operationId: Params + operationId: Schedule + parameters: + - in: path + name: name + required: true + type: string responses: '200': description: A successful response. schema: - description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. properties: - params: - description: params holds all the parameters of this module. + schedule: properties: - min_fee: - properties: - ack_fee: - items: - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: the packet acknowledgement fee - type: array - recv_fee: - items: - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: the packet receive fee - type: array - timeout_fee: - items: - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: the packet timeout fee - type: array - title: >- - Fee defines the ICS29 receive, acknowledgement and timeout - fees - type: object + last_execute_height: + format: uint64 + title: Last execution's block height + type: string + msgs: + items: + properties: + contract: + title: Contract is the address of the smart contract + type: string + msg: + title: >- + Msg is json encoded message to be passed to the + contract + type: string + type: object + title: Msgs that will be executed every period amount of time + type: array + name: + title: Name of schedule + type: string + period: + format: uint64 + title: Period in blocks + type: string type: object type: object default: @@ -36931,147 +40081,56 @@ paths: message: type: string type: object - summary: Parameters queries the parameters of the module. + summary: Queries a Schedule by name. tags: - Query - /neutron/contractmanager/failures: + /neutron/dex/estimate_multi_hop_swap: get: - operationId: Failures + operationId: EstimateMultiHopSwap parameters: - - description: address of the contract which Sudo call failed. - in: query - name: address - required: false - type: string - - description: ID of the failure for the given contract. - format: uint64 - in: query - name: failure_id + - in: query + name: creator required: false type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key + - in: query + name: receiver required: false type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset + - in: query + name: amount_in required: false type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit + - in: query + name: exit_limit_price required: false type: string - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - + If pickBestRoute == true then all routes are run and the route with + the - Since: cosmos-sdk 0.43 + best price is chosen otherwise, the first succesful route is used. in: query - name: pagination.reverse + name: pick_best_route required: false type: boolean responses: '200': description: A successful response. schema: - description: >- - QueryFailuresResponse is response type for the Query/Failures RPC - method. properties: - failures: - items: - properties: - address: - title: Address of the failed contract - type: string - error: - title: >- - Redacted error response of the sudo call. Full error is - emitted as an event - type: string - id: - format: uint64 - title: Id of the failure under specific address - type: string - sudo_payload: - format: byte - title: >- - Serialized MessageSudoCallback with Packet and Ack(if - exists) - type: string - title: >- - Failure message contains information about ACK failures and - can be used to - - replay ACK in case of requirement. - - Note that Failure means that sudo handler to cosmwasm - contract failed for - - some reason - type: object - type: array - pagination: + coin_out: description: >- - PageResponse is to be embedded in gRPC response messages where - the + Coin defines a token with a denomination and an amount. - corresponding request message has used PageRequest. - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte + amount: type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise + denom: type: string type: object type: object @@ -37097,149 +40156,130 @@ paths: message: type: string type: object - summary: Queries a list of Failures occurred on the network. + summary: Queries the simulated result of a multihop swap tags: - Query - /neutron/contractmanager/failures/{address}: + /neutron/dex/estimate_place_limit_order: get: - operationId: AddressFailures + operationId: EstimatePlaceLimitOrder parameters: - - description: address of the contract which Sudo call failed. - in: path - name: address - required: true + - in: query + name: creator + required: false type: string - - description: ID of the failure for the given contract. - format: uint64 - in: query - name: failure_id + - in: query + name: receiver required: false type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key + - in: query + name: token_in required: false type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset + - in: query + name: token_out required: false type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 + - format: int64 in: query - name: pagination.limit + name: tick_index_in_to_out required: false type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. + - in: query + name: amount_in + required: false + type: string + - default: GOOD_TIL_CANCELLED + enum: + - GOOD_TIL_CANCELLED + - FILL_OR_KILL + - IMMEDIATE_OR_CANCEL + - JUST_IN_TIME + - GOOD_TIL_TIME in: query - name: pagination.count_total + name: order_type required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 + type: string + - description: expirationTime is only valid iff orderType == GOOD_TIL_TIME. + format: date-time in: query - name: pagination.reverse + name: expiration_time required: false - type: boolean + type: string + - in: query + name: maxAmount_out + required: false + type: string responses: '200': description: A successful response. schema: - description: >- - QueryFailuresResponse is response type for the Query/Failures RPC - method. - properties: - failures: - items: - properties: - address: - title: Address of the failed contract - type: string - error: - title: >- - Redacted error response of the sudo call. Full error is - emitted as an event - type: string - id: - format: uint64 - title: Id of the failure under specific address - type: string - sudo_payload: - format: byte - title: >- - Serialized MessageSudoCallback with Packet and Ack(if - exists) - type: string - title: >- - Failure message contains information about ACK failures and - can be used to + properties: + swap_in_coin: + description: >- + Coin defines a token with a denomination and an amount. - replay ACK in case of requirement. - Note that Failure means that sudo handler to cosmwasm - contract failed for + NOTE: The amount field is an Int which implements the custom + method - some reason - type: object - type: array - pagination: + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + Total amount of the token in that was immediately swapped for + swapOutCoin + swap_out_coin: description: >- - PageResponse is to be embedded in gRPC response messages where - the + Coin defines a token with a denomination and an amount. - corresponding request message has used PageRequest. - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte + amount: type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + denom: + type: string + type: object + title: >- + Total amount of coin received from the taker portion of the + limit order - was set, its value is undefined otherwise + This is the amount of coin immediately available in the users + account after + + executing the limit order. It does not include any future + proceeds from the + + maker portion which will have withdrawn in the future + total_in_coin: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: type: string type: object + title: >- + Total amount of coin used for the limit order + + You can derive makerLimitInCoin using the equation: + totalInCoin = + + swapInCoin + makerLimitInCoin type: object default: description: An unexpected error response. @@ -37263,24 +40303,13 @@ paths: message: type: string type: object - summary: Queries Failures by contract address. + summary: Queries the simulated result of a PlaceLimit order tags: - Query - /neutron/contractmanager/failures/{address}/{failure_id}: + /neutron/dex/filled_limit_order_tranche: get: - operationId: AddressFailure + operationId: InactiveLimitOrderTrancheAll2 parameters: - - description: address of the contract which Sudo call failed. - in: path - name: address - required: true - type: string - - description: ID of the failure for the given contract. - format: uint64 - in: path - name: failure_id - required: true - type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -37341,41 +40370,47 @@ paths: '200': description: A successful response. schema: - description: >- - QueryFailuresResponse is response type for the Query/Failures RPC - method. properties: - failures: + inactive_limit_order_tranche: items: properties: - address: - title: Address of the failed contract - type: string - error: + expiration_time: + format: date-time title: >- - Redacted error response of the sudo call. Full error is - emitted as an event + JIT orders also use expiration_time to handle deletion + but represent a special case + + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live + + Order deletion still functions the same and the orders + will be deleted at the end of the block type: string - id: - format: uint64 - title: Id of the failure under specific address + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: type: string - sudo_payload: - format: byte - title: >- - Serialized MessageSudoCallback with Packet and Ack(if - exists) + reserves_maker_denom: + type: string + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: type: string - title: >- - Failure message contains information about ACK failures and - can be used to - - replay ACK in case of requirement. - - Note that Failure means that sudo handler to cosmwasm - contract failed for - - some reason type: object type: array pagination: @@ -37429,70 +40464,73 @@ paths: message: type: string type: object - summary: Queries a Failure by contract address and failure ID. + summary: Queries a list of InactiveLimitOrderTranche items. tags: - Query - /neutron/contractmanager/params: + /neutron/dex/filled_limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: get: - operationId: Params + operationId: InactiveLimitOrderTranche2 + parameters: + - in: path + name: pair_id + required: true + type: string + - in: path + name: token_in + required: true + type: string + - format: int64 + in: path + name: tick_index + required: true + type: string + - in: path + name: tranche_key + required: true + type: string responses: '200': description: A successful response. schema: - description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. properties: - params: - description: params holds all the parameters of this module. + inactive_limit_order_tranche: properties: - sudo_call_gas_limit: - format: uint64 + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle deletion but + represent a special case + + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live + + Order deletion still functions the same and the orders + will be deleted at the end of the block type: string - type: object - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: Parameters queries the parameters of the module. - tags: - - Query - /neutron/cron/params: - get: - operationId: Params - responses: - '200': - description: A successful response. - schema: - properties: - params: - description: params holds all the parameters of this module. - properties: - limit: - format: uint64 - title: Limit of schedules executed in one block + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: type: string - security_address: - title: Security address that can remove schedules + reserves_maker_denom: + type: string + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: type: string type: object type: object @@ -37518,12 +40556,12 @@ paths: message: type: string type: object - summary: Queries the parameters of the module. + summary: Queries a InactiveLimitOrderTranche by index. tags: - Query - /neutron/cron/schedule: + /neutron/dex/inactive_limit_order_tranche: get: - operationId: Schedules + operationId: InactiveLimitOrderTrancheAll parameters: - description: |- key is a value returned in PageResponse.next_key to begin @@ -37586,6 +40624,48 @@ paths: description: A successful response. schema: properties: + inactive_limit_order_tranche: + items: + properties: + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle deletion + but represent a special case + + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live + + Order deletion still functions the same and the orders + will be deleted at the end of the block + type: string + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: + type: string + type: object + type: array pagination: description: >- PageResponse is to be embedded in gRPC response messages where @@ -37614,36 +40694,6 @@ paths: was set, its value is undefined otherwise type: string type: object - schedules: - items: - properties: - last_execute_height: - format: uint64 - title: Last execution's block height - type: string - msgs: - items: - properties: - contract: - title: Contract is the address of the smart contract - type: string - msg: - title: >- - Msg is json encoded message to be passed to the - contract - type: string - type: object - title: Msgs that will be executed every period amount of time - type: array - name: - title: Name of schedule - type: string - period: - format: uint64 - title: Period in blocks - type: string - type: object - type: array type: object default: description: An unexpected error response. @@ -37667,15 +40717,28 @@ paths: message: type: string type: object - summary: Queries a list of Schedule items. + summary: Queries a list of InactiveLimitOrderTranche items. tags: - Query - /neutron/cron/schedule/{name}: + /neutron/dex/inactive_limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: get: - operationId: Schedule + operationId: InactiveLimitOrderTranche parameters: - in: path - name: name + name: pair_id + required: true + type: string + - in: path + name: token_in + required: true + type: string + - format: int64 + in: path + name: tick_index + required: true + type: string + - in: path + name: tranche_key required: true type: string responses: @@ -37683,32 +40746,44 @@ paths: description: A successful response. schema: properties: - schedule: + inactive_limit_order_tranche: properties: - last_execute_height: - format: uint64 - title: Last execution's block height + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle deletion but + represent a special case + + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live + + Order deletion still functions the same and the orders + will be deleted at the end of the block type: string - msgs: - items: - properties: - contract: - title: Contract is the address of the smart contract - type: string - msg: - title: >- - Msg is json encoded message to be passed to the - contract - type: string - type: object - title: Msgs that will be executed every period amount of time - type: array - name: - title: Name of schedule + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: type: string - period: - format: uint64 - title: Period in blocks + reserves_maker_denom: + type: string + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: type: string type: object type: object @@ -37734,36 +40809,75 @@ paths: message: type: string type: object - summary: Queries a Schedule by name. + summary: Queries a InactiveLimitOrderTranche by index. tags: - Query - /neutron/dex/estimate_multi_hop_swap: + /neutron/dex/limit_order_tranche/{pair_id}/{token_in}: get: - operationId: EstimateMultiHopSwap + operationId: LimitOrderTrancheAll parameters: - - in: query - name: creator - required: false + - in: path + name: pair_id + required: true type: string - - in: query - name: receiver + - in: path + name: token_in + required: true + type: string + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key required: false type: string - - in: query - name: amount_in + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset required: false type: string - - in: query - name: exit_limit_price + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit required: false type: string - description: >- - If pickBestRoute == true then all routes are run and the route with - the + count_total is set to true to indicate that the result set should + include - best price is chosen otherwise, the first succesful route is used. + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. in: query - name: pick_best_route + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse required: false type: boolean responses: @@ -37771,19 +40885,74 @@ paths: description: A successful response. schema: properties: - coin_out: - description: >- - Coin defines a token with a denomination and an amount. + limit_order_tranche: + items: + properties: + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle deletion + but represent a special case + + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live + Order deletion still functions the same and the orders + will be deleted at the end of the block + type: string + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: + type: string + type: object + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the - NOTE: The amount field is an Int which implements the custom - method + corresponding request message has used PageRequest. - signatures required by gogoproto. + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } properties: - amount: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte type: string - denom: + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise type: string type: object type: object @@ -37809,130 +40978,77 @@ paths: message: type: string type: object - summary: Queries the simulated result of a multihop swap + summary: |- + Queries a list of LimitOrderTranche items for a given pairID / TokenIn + combination. tags: - Query - /neutron/dex/estimate_place_limit_order: + /neutron/dex/limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: get: - operationId: EstimatePlaceLimitOrder + operationId: LimitOrderTranche parameters: - - in: query - name: creator - required: false - type: string - - in: query - name: receiver - required: false + - in: path + name: pair_id + required: true type: string - - in: query + - in: path name: token_in - required: false - type: string - - in: query - name: token_out - required: false + required: true type: string - format: int64 - in: query - name: tick_index_in_to_out - required: false - type: string - - in: query - name: amount_in - required: false - type: string - - default: GOOD_TIL_CANCELLED - enum: - - GOOD_TIL_CANCELLED - - FILL_OR_KILL - - IMMEDIATE_OR_CANCEL - - JUST_IN_TIME - - GOOD_TIL_TIME - in: query - name: order_type - required: false - type: string - - description: expirationTime is only valid iff orderType == GOOD_TIL_TIME. - format: date-time - in: query - name: expiration_time - required: false + in: path + name: tick_index + required: true type: string - - in: query - name: maxAmount_out - required: false + - in: path + name: tranche_key + required: true type: string responses: '200': description: A successful response. schema: properties: - swap_in_coin: - description: >- - Coin defines a token with a denomination and an amount. - + limit_order_tranche: + properties: + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle deletion but + represent a special case - NOTE: The amount field is an Int which implements the custom - method + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as live - signatures required by gogoproto. - properties: - amount: + Order deletion still functions the same and the orders + will be deleted at the end of the block type: string - denom: + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: type: string - type: object - title: >- - Total amount of the token in that was immediately swapped for - swapOutCoin - swap_out_coin: - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - properties: - amount: + reserves_maker_denom: type: string - denom: + reserves_taker_denom: type: string - type: object - title: >- - Total amount of coin received from the taker portion of the - limit order - - This is the amount of coin immediately available in the users - account after - - executing the limit order. It does not include any future - proceeds from the - - maker portion which will have withdrawn in the future - total_in_coin: - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - properties: - amount: + total_maker_denom: type: string - denom: + total_taker_denom: type: string type: object - title: >- - Total amount of coin used for the limit order - - You can derive makerLimitInCoin using the equation: - totalInCoin = - - swapInCoin + makerLimitInCoin type: object default: description: An unexpected error response. @@ -37956,12 +41072,12 @@ paths: message: type: string type: object - summary: Queries the simulated result of a PlaceLimit order + summary: Queries a LimitOrderTranche by index. tags: - Query - /neutron/dex/filled_limit_order_tranche: + /neutron/dex/limit_order_tranche_user: get: - operationId: InactiveLimitOrderTrancheAll2 + operationId: LimitOrderTrancheUserAll parameters: - description: |- key is a value returned in PageResponse.next_key to begin @@ -38024,45 +41140,37 @@ paths: description: A successful response. schema: properties: - inactive_limit_order_tranche: + limit_order_tranche_user: items: properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion - but represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block + address: type: string - key: + order_type: + default: GOOD_TIL_CANCELLED + enum: + - GOOD_TIL_CANCELLED + - FILL_OR_KILL + - IMMEDIATE_OR_CANCEL + - JUST_IN_TIME + - GOOD_TIL_TIME + type: string + shares_cancelled: + type: string + shares_owned: + type: string + shares_withdrawn: + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: properties: - tick_index_taker_to_maker: - format: int64 + maker_denom: type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: + taker_denom: type: string type: object - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - reserves_taker_denom: - type: string - total_maker_denom: - type: string - total_taker_denom: + tranche_key: type: string type: object type: array @@ -38117,19 +41225,150 @@ paths: message: type: string type: object - summary: Queries a list of InactiveLimitOrderTranche items. + summary: Queries a list of LimitOrderTranchUser items. tags: - Query - /neutron/dex/filled_limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: + /neutron/dex/limit_order_tranche_user/{address}/{tranche_key}: get: - operationId: InactiveLimitOrderTranche2 + operationId: LimitOrderTrancheUser parameters: - in: path - name: pair_id + name: address required: true type: string - in: path - name: token_in + name: tranche_key + required: true + type: string + - in: query + name: calc_withdrawable_shares + required: false + type: boolean + responses: + '200': + description: A successful response. + schema: + properties: + limit_order_tranche_user: + properties: + address: + type: string + order_type: + default: GOOD_TIL_CANCELLED + enum: + - GOOD_TIL_CANCELLED + - FILL_OR_KILL + - IMMEDIATE_OR_CANCEL + - JUST_IN_TIME + - GOOD_TIL_TIME + type: string + shares_cancelled: + type: string + shares_owned: + type: string + shares_withdrawn: + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + withdrawable_shares: + type: string + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Queries a LimitOrderTrancheUser by index. + tags: + - Query + /neutron/dex/params: + get: + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. + properties: + params: + description: params holds all the parameters of this module. + properties: + fee_tiers: + items: + format: uint64 + type: string + type: array + good_til_purge_allowance: + format: uint64 + type: string + max_jits_per_block: + format: uint64 + type: string + paused: + type: boolean + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Parameters queries the parameters of the module. + tags: + - Query + /neutron/dex/pool/{pair_id}/{tick_index}/{fee}: + get: + operationId: Pool + parameters: + - in: path + name: pair_id required: true type: string - format: int64 @@ -38137,8 +41376,9 @@ paths: name: tick_index required: true type: string - - in: path - name: tranche_key + - format: uint64 + in: path + name: fee required: true type: string responses: @@ -38146,45 +41386,157 @@ paths: description: A successful response. schema: properties: - inactive_limit_order_tranche: + pool: properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion but - represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block + id: + format: uint64 + type: string + lower_tick0: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + upper_tick1: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Queries a pool by pair, tick and fee + tags: + - Query + /neutron/dex/pool/{pool_id}: + get: + operationId: PoolByID + parameters: + - format: uint64 + in: path + name: pool_id + required: true + type: string + responses: + '200': + description: A successful response. + schema: + properties: + pool: + properties: + id: + format: uint64 type: string - key: + lower_tick0: properties: - tick_index_taker_to_maker: - format: int64 + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: type: string - trade_pair_id: + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + upper_tick1: + properties: + key: properties: - maker_denom: + fee: + format: uint64 type: string - taker_denom: + tick_index_taker_to_maker: + format: int64 type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object type: object - tranche_key: + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: type: string type: object - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - reserves_taker_denom: - type: string - total_maker_denom: - type: string - total_taker_denom: - type: string type: object type: object default: @@ -38209,12 +41561,12 @@ paths: message: type: string type: object - summary: Queries a InactiveLimitOrderTranche by index. + summary: Queries a pool by ID tags: - Query - /neutron/dex/inactive_limit_order_tranche: + /neutron/dex/pool_metadata: get: - operationId: InactiveLimitOrderTrancheAll + operationId: PoolMetadataAll parameters: - description: |- key is a value returned in PageResponse.next_key to begin @@ -38277,48 +41629,6 @@ paths: description: A successful response. schema: properties: - inactive_limit_order_tranche: - items: - properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion - but represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block - type: string - key: - properties: - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: - type: string - type: object - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - reserves_taker_denom: - type: string - total_maker_denom: - type: string - total_taker_denom: - type: string - type: object - type: array pagination: description: >- PageResponse is to be embedded in gRPC response messages where @@ -38347,6 +41657,27 @@ paths: was set, its value is undefined otherwise type: string type: object + pool_metadata: + items: + properties: + fee: + format: uint64 + type: string + id: + format: uint64 + type: string + pair_id: + properties: + token0: + type: string + token1: + type: string + type: object + tick: + format: int64 + type: string + type: object + type: array type: object default: description: An unexpected error response. @@ -38370,28 +41701,16 @@ paths: message: type: string type: object - summary: Queries a list of InactiveLimitOrderTranche items. + summary: Queries a list of PoolMetadata items. tags: - Query - /neutron/dex/inactive_limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: + /neutron/dex/pool_metadata/{id}: get: - operationId: InactiveLimitOrderTranche + operationId: PoolMetadata parameters: - - in: path - name: pair_id - required: true - type: string - - in: path - name: token_in - required: true - type: string - - format: int64 + - format: uint64 in: path - name: tick_index - required: true - type: string - - in: path - name: tranche_key + name: id required: true type: string responses: @@ -38399,44 +41718,23 @@ paths: description: A successful response. schema: properties: - inactive_limit_order_tranche: + Pool_metadata: properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion but - represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block + fee: + format: uint64 type: string - key: + id: + format: uint64 + type: string + pair_id: properties: - tick_index_taker_to_maker: - format: int64 + token0: type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: + token1: type: string type: object - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - reserves_taker_denom: - type: string - total_maker_denom: - type: string - total_taker_denom: + tick: + format: int64 type: string type: object type: object @@ -38462,12 +41760,12 @@ paths: message: type: string type: object - summary: Queries a InactiveLimitOrderTranche by index. + summary: Queries a PoolMetadata by ID tags: - Query - /neutron/dex/limit_order_tranche/{pair_id}/{token_in}: + /neutron/dex/pool_reserves/{pair_id}/{token_in}: get: - operationId: LimitOrderTrancheAll + operationId: PoolReservesAll parameters: - in: path name: pair_id @@ -38538,48 +41836,6 @@ paths: description: A successful response. schema: properties: - limit_order_tranche: - items: - properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion - but represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block - type: string - key: - properties: - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: - type: string - type: object - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - reserves_taker_denom: - type: string - total_maker_denom: - type: string - total_taker_denom: - type: string - type: object - type: array pagination: description: >- PageResponse is to be embedded in gRPC response messages where @@ -38608,6 +41864,33 @@ paths: was set, its value is undefined otherwise type: string type: object + pool_reserves: + items: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + type: array type: object default: description: An unexpected error response. @@ -38631,14 +41914,12 @@ paths: message: type: string type: object - summary: |- - Queries a list of LimitOrderTranche items for a given pairID / TokenIn - combination. + summary: Queries a list of PoolReserves items. tags: - Query - /neutron/dex/limit_order_tranche/{pair_id}/{token_in}/{tick_index}/{tranche_key}: + /neutron/dex/pool_reserves/{pair_id}/{token_in}/{tick_index}/{fee}: get: - operationId: LimitOrderTranche + operationId: PoolReserves parameters: - in: path name: pair_id @@ -38653,8 +41934,9 @@ paths: name: tick_index required: true type: string - - in: path - name: tranche_key + - format: uint64 + in: path + name: fee required: true type: string responses: @@ -38662,22 +41944,13 @@ paths: description: A successful response. schema: properties: - limit_order_tranche: + pool_reserves: properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle deletion but - represent a special case - - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as live - - Order deletion still functions the same and the orders - will be deleted at the end of the block - type: string key: properties: + fee: + format: uint64 + type: string tick_index_taker_to_maker: format: int64 type: string @@ -38688,19 +41961,13 @@ paths: taker_denom: type: string type: object - tranche_key: - type: string type: object + price_opposite_taker_to_maker: + type: string price_taker_to_maker: type: string reserves_maker_denom: type: string - reserves_taker_denom: - type: string - total_maker_denom: - type: string - total_taker_denom: - type: string type: object type: object default: @@ -38725,13 +41992,21 @@ paths: message: type: string type: object - summary: Queries a LimitOrderTranche by index. + summary: Queries a PoolReserve by index tags: - Query - /neutron/dex/limit_order_tranche_user: + /neutron/dex/tick_liquidity/{pair_id}/{token_in}: get: - operationId: LimitOrderTrancheUserAll + operationId: TickLiquidityAll parameters: + - in: path + name: pair_id + required: true + type: string + - in: path + name: token_in + required: true + type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -38793,40 +42068,6 @@ paths: description: A successful response. schema: properties: - limit_order_tranche_user: - items: - properties: - address: - type: string - order_type: - default: GOOD_TIL_CANCELLED - enum: - - GOOD_TIL_CANCELLED - - FILL_OR_KILL - - IMMEDIATE_OR_CANCEL - - JUST_IN_TIME - - GOOD_TIL_TIME - type: string - shares_cancelled: - type: string - shares_owned: - type: string - shares_withdrawn: - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: - type: string - type: object - type: array pagination: description: >- PageResponse is to be embedded in gRPC response messages where @@ -38855,135 +42096,77 @@ paths: was set, its value is undefined otherwise type: string type: object - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: - items: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - type: array - error: - type: string - message: - type: string - type: object - summary: Queries a list of LimitOrderTranchUser items. - tags: - - Query - /neutron/dex/limit_order_tranche_user/{address}/{tranche_key}: - get: - operationId: LimitOrderTrancheUser - parameters: - - in: path - name: address - required: true - type: string - - in: path - name: tranche_key - required: true - type: string - - in: query - name: calc_withdrawable_shares - required: false - type: boolean - responses: - '200': - description: A successful response. - schema: - properties: - limit_order_tranche_user: - properties: - address: - type: string - order_type: - default: GOOD_TIL_CANCELLED - enum: - - GOOD_TIL_CANCELLED - - FILL_OR_KILL - - IMMEDIATE_OR_CANCEL - - JUST_IN_TIME - - GOOD_TIL_TIME - type: string - shares_cancelled: - type: string - shares_owned: - type: string - shares_withdrawn: - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: - type: string - type: object - withdrawable_shares: - type: string - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: + tick_liquidity: items: properties: - type_url: - type: string - value: - format: byte - type: string + limit_order_tranche: + properties: + expiration_time: + format: date-time + title: >- + JIT orders also use expiration_time to handle + deletion but represent a special case + + All JIT orders have a expiration_time of 0 and an + exception is made to still treat these orders as + live + + Order deletion still functions the same and the + orders will be deleted at the end of the block + type: string + key: + properties: + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + reserves_taker_denom: + type: string + total_maker_denom: + type: string + total_taker_denom: + type: string + type: object + pool_reserves: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object type: object type: array - error: - type: string - message: - type: string - type: object - summary: Queries a LimitOrderTrancheUser by index. - tags: - - Query - /neutron/dex/params: - get: - operationId: Params - responses: - '200': - description: A successful response. - schema: - description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. - properties: - params: - description: params holds all the parameters of this module. - properties: - fee_tiers: - items: - format: uint64 - type: string - type: array - max_true_taker_spread: - type: string - type: object type: object default: description: An unexpected error response. @@ -39007,183 +42190,193 @@ paths: message: type: string type: object - summary: Parameters queries the parameters of the module. + summary: Queries a list of TickLiquidity items. tags: - Query - /neutron/dex/pool/{pair_id}/{tick_index}/{fee}: + /neutron/dex/user/deposits/{address}: get: - operationId: Pool + operationId: UserDepositsAll parameters: - in: path - name: pair_id + name: address required: true type: string - - format: int64 - in: path - name: tick_index - required: true + - description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + format: byte + in: query + name: pagination.key + required: false type: string - - format: uint64 - in: path - name: fee - required: true + - description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + format: uint64 + in: query + name: pagination.offset + required: false + type: string + - description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + format: uint64 + in: query + name: pagination.limit + required: false type: string + - description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + name: pagination.count_total + required: false + type: boolean + - description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + name: pagination.reverse + required: false + type: boolean + - in: query + name: include_pool_data + required: false + type: boolean responses: '200': description: A successful response. schema: properties: - pool: - properties: - id: - format: uint64 - type: string - lower_tick0: - properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - type: object - upper_tick1: - properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - type: object - type: object - type: object - default: - description: An unexpected error response. - schema: - properties: - code: - format: int32 - type: integer - details: + deposits: items: properties: - type_url: + center_tick_index: + format: int64 + type: string + fee: + format: uint64 + type: string + lower_tick_index: + format: int64 + type: string + pair_id: + properties: + token0: + type: string + token1: + type: string + type: object + pool: + properties: + id: + format: uint64 + type: string + lower_tick0: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + upper_tick1: + properties: + key: + properties: + fee: + format: uint64 + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + type: object + price_opposite_taker_to_maker: + type: string + price_taker_to_maker: + type: string + reserves_maker_denom: + type: string + type: object + type: object + shares_owned: type: string - value: - format: byte + total_shares: + type: string + upper_tick_index: + format: int64 type: string type: object type: array - error: - type: string - message: - type: string - type: object - summary: Queries a pool by pair, tick and fee - tags: - - Query - /neutron/dex/pool/{pool_id}: - get: - operationId: PoolByID - parameters: - - format: uint64 - in: path - name: pool_id - required: true - type: string - responses: - '200': - description: A successful response. - schema: - properties: - pool: + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the + + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } properties: - id: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise type: string - lower_tick0: - properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - type: object - upper_tick1: - properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - type: object type: object type: object default: @@ -39208,13 +42401,17 @@ paths: message: type: string type: object - summary: Queries a pool by ID + summary: Queries a list of UserDeposits items. tags: - Query - /neutron/dex/pool_metadata: + /neutron/dex/user/limit_orders/{address}: get: - operationId: PoolMetadataAll + operationId: LimitOrderTrancheUserAllByAddress parameters: + - in: path + name: address + required: true + type: string - description: |- key is a value returned in PageResponse.next_key to begin querying the next page most efficiently. Only one of offset or key @@ -39276,55 +42473,190 @@ paths: description: A successful response. schema: properties: - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + limit_orders: + items: + properties: + address: + type: string + order_type: + default: GOOD_TIL_CANCELLED + enum: + - GOOD_TIL_CANCELLED + - FILL_OR_KILL + - IMMEDIATE_OR_CANCEL + - JUST_IN_TIME + - GOOD_TIL_TIME + type: string + shares_cancelled: + type: string + shares_owned: + type: string + shares_withdrawn: + type: string + tick_index_taker_to_maker: + format: int64 + type: string + trade_pair_id: + properties: + maker_denom: + type: string + taker_denom: + type: string + type: object + tranche_key: + type: string + type: object + type: array + pagination: + description: >- + PageResponse is to be embedded in gRPC response messages where + the + + corresponding request message has used PageRequest. + + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + properties: + next_key: + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + format: byte + type: string + total: + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise + type: string + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Queries a list of LimitOrderTrancheUser items for a given address. + tags: + - Query + /neutron/dynamicfees/v1/params: + get: + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. + properties: + params: + description: params holds all the parameters of this module. + properties: + ntrn_prices: + items: + description: >- + DecCoin defines a token with a denomination and a + decimal amount. + + + NOTE: The amount field is an Dec which implements the + custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + List of asset prices by the NTRN + + it's used in cooperation with feemarket module + + ntrn_prices is a data source to convert gas_price from + feemarket's base_denom (untrn) + + into a given asset + type: array + type: object + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: Parameters queries the parameters of the module. + tags: + - Query + /neutron/feeburner/params: + get: + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. + properties: + params: + description: params holds all the parameters of this module. properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 + neutron_denom: title: >- - total is total number of results available if - PageRequest.count_total + Defines Neutron denom, which will be burned during fee + processing, any - was set, its value is undefined otherwise + other denom will be sent to Treasury + type: string + reserve_address: + title: Deprecated in v0.4.4. Is not used anymore + type: string + treasury_address: + title: Defines treasury address type: string type: object - pool_metadata: - items: - properties: - fee: - format: uint64 - type: string - id: - format: uint64 - type: string - pair_id: - properties: - token0: - type: string - token1: - type: string - type: object - tick: - format: int64 - type: string - type: object - type: array type: object default: description: An unexpected error response. @@ -39348,41 +42680,40 @@ paths: message: type: string type: object - summary: Queries a list of PoolMetadata items. + summary: Parameters queries the parameters of the module. tags: - Query - /neutron/dex/pool_metadata/{id}: + /neutron/feeburner/total_burned_neutrons_amount: get: - operationId: PoolMetadata - parameters: - - format: uint64 - in: path - name: id - required: true - type: string + operationId: TotalBurnedNeutronsAmount responses: '200': description: A successful response. schema: + description: |- + QueryTotalBurnedNeutronsAmountResponse is response type for the + Query/QueryTotalBurnedNeutronsAmount method. properties: - Pool_metadata: + total_burned_neutrons_amount: properties: - fee: - format: uint64 - type: string - id: - format: uint64 - type: string - pair_id: + coin: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. properties: - token0: + amount: type: string - token1: + denom: type: string type: object - tick: - format: int64 - type: string + title: >- + TotalBurnedNeutronsAmount defines total amount of burned + neutron fees type: object type: object default: @@ -39407,137 +42738,61 @@ paths: message: type: string type: object - summary: Queries a PoolMetadata by ID + summary: TotalBurnedNeutronsAmount queries total amount of burned neutron fees. tags: - Query - /neutron/dex/pool_reserves/{pair_id}/{token_in}: + /neutron/interchainqueries/params: get: - operationId: PoolReservesAll - parameters: - - in: path - name: pair_id - required: true - type: string - - in: path - name: token_in - required: true - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean + operationId: Params responses: '200': description: A successful response. schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. properties: - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the + params: + description: params holds all the parameters of this module. + properties: + query_deposit: + description: Amount of coins deposited for the query. + items: + description: >- + Coin defines a token with a denomination and an amount. - corresponding request message has used PageRequest. - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + NOTE: The amount field is an Int which implements the + custom method - was set, its value is undefined otherwise - type: string - type: object - pool_reserves: - items: - properties: - key: + signatures required by gogoproto. properties: - fee: - format: uint64 + amount: type: string - tick_index_taker_to_maker: - format: int64 + denom: type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - type: object - type: array + type: array + query_submit_timeout: + format: uint64 + title: >- + Defines amount of blocks required before query becomes + available for + + removal by anybody + type: string + tx_query_removal_limit: + description: >- + Amount of tx hashes to be removed during a single + EndBlock. Can vary to + + balance between network cleaning speed and EndBlock + duration. A zero value + + means no limit. + format: uint64 + type: string + type: object type: object default: description: An unexpected error response. @@ -39561,59 +42816,216 @@ paths: message: type: string type: object - summary: Queries a list of PoolReserves items. + summary: Parameters queries the parameters of the module. tags: - Query - /neutron/dex/pool_reserves/{pair_id}/{token_in}/{tick_index}/{fee}: + /neutron/interchainqueries/query_result: get: - operationId: PoolReserves + operationId: QueryResult parameters: - - in: path - name: pair_id - required: true - type: string - - in: path - name: token_in - required: true - type: string - - format: int64 - in: path - name: tick_index - required: true - type: string - format: uint64 - in: path - name: fee - required: true + in: query + name: query_id + required: false type: string responses: '200': description: A successful response. schema: properties: - pool_reserves: + result: properties: - key: + allow_kv_callbacks: + type: boolean + block: properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: + header: properties: - maker_denom: + type_url: type: string - taker_denom: + value: + format: byte + type: string + type: object + title: >- + We need to know block X to verify inclusion of + transaction for block X + next_block_header: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + title: >- + We need to know block X+1 to verify response of + transaction for block X + + since LastResultsHash is root hash of all results from + the txs from the + + previous block + tx: + properties: + data: + format: byte + title: is body of the transaction type: string + delivery_proof: + title: >- + is the Merkle Proof which proves existence of + response in block with height + + next_block_header.Height + properties: + aunts: + items: + format: byte + type: string + type: array + index: + format: int64 + type: string + leaf_hash: + format: byte + type: string + total: + format: int64 + type: string + type: object + inclusion_proof: + title: >- + is the Merkle Proof which proves existence of data + in block with height + + header.Height + properties: + aunts: + items: + format: byte + type: string + type: array + index: + format: int64 + type: string + leaf_hash: + format: byte + type: string + total: + format: int64 + type: string + type: object + response: + description: >- + ExecTxResult contains results of executing one + individual transaction. + + + * Its structure is equivalent to + #ResponseDeliverTx which will be + deprecated/deleted + properties: + code: + format: int64 + type: integer + codespace: + type: string + data: + format: byte + type: string + events: + items: + description: >- + Event allows application developers to + attach additional information to + + ResponseFinalizeBlock and ResponseCheckTx. + + Later, transactions may be queried using + these events. + properties: + attributes: + items: + description: >- + EventAttribute is a single key-value + pair, associated with an event. + properties: + index: + type: boolean + key: + type: string + value: + type: string + type: object + type: array + type: + type: string + type: object + type: array + gas_used: + format: int64 + type: string + gas_wanted: + format: int64 + type: string + info: + type: string + log: + type: string + type: object type: object type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + height: + format: uint64 type: string - reserves_maker_denom: + kv_results: + items: + properties: + Proof: + title: >- + is the Merkle Proof which proves existence of + key-value pair in IAVL + + storage + properties: + ops: + items: + properties: + data: + format: byte + type: string + key: + format: byte + type: string + type: + type: string + title: >- + ProofOp defines an operation used for + calculating Merkle root + + The data could be arbitrary format, providing + nessecary data + + for example neighbouring node hash + type: object + type: array + type: object + key: + format: byte + title: is the key in IAVL store + type: string + storage_prefix: + title: is the substore name (acc, staking, etc.) + type: string + value: + format: byte + title: is the value in IAVL store + type: string + type: object + type: array + revision: + format: uint64 type: string type: object type: object @@ -39639,20 +43051,22 @@ paths: message: type: string type: object - summary: Queries a PoolReserve by index tags: - - Query - /neutron/dex/tick_liquidity/{pair_id}/{token_in}: - get: - operationId: TickLiquidityAll - parameters: - - in: path - name: pair_id - required: true - type: string - - in: path - name: token_in - required: true + - Query + /neutron/interchainqueries/registered_queries: + get: + operationId: RegisteredQueries + parameters: + - collectionFormat: multi + in: query + items: + type: string + name: owners + required: false + type: array + - in: query + name: connection_id + required: false type: string - description: |- key is a value returned in PageResponse.next_key to begin @@ -39743,77 +43157,252 @@ paths: was set, its value is undefined otherwise type: string type: object - tick_liquidity: + registered_queries: items: properties: - limit_order_tranche: - properties: - expiration_time: - format: date-time - title: >- - JIT orders also use expiration_time to handle - deletion but represent a special case + connection_id: + title: >- + The IBC connection ID for getting ConsensusState to + verify proofs + type: string + deposit: + description: Amount of coins deposited for the query. + items: + description: >- + Coin defines a token with a denomination and an + amount. - All JIT orders have a expiration_time of 0 and an - exception is made to still treat these orders as - live - Order deletion still functions the same and the - orders will be deleted at the end of the block - type: string - key: - properties: - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: - type: string - type: object - price_taker_to_maker: - type: string - reserves_maker_denom: + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + type: array + id: + description: The unique id of the registered query. + format: uint64 + type: string + keys: + items: + properties: + key: + format: byte + title: Key you want to read from the storage + type: string + path: + title: >- + Path (storage prefix) to the storage where you + want to read value by key + + (usually name of cosmos-sdk module: 'staking', + 'bank', etc.) + type: string + type: object + title: >- + The KV-storage keys for which we want to get values from + remote chain + type: array + last_submitted_result_local_height: + description: >- + The local chain last block height when the query result + was updated. + format: uint64 + type: string + last_submitted_result_remote_height: + description: >- + The remote chain last block height when the query result + was updated. + properties: + revision_height: + format: uint64 + title: the height within the given revision type: string - reserves_taker_denom: + revision_number: + format: uint64 + title: the revision that the client is currently on type: string - total_maker_denom: + title: >- + Height is a monotonically increasing data type + + that can be compared against another Height for the + purposes of updating and + + freezing clients + type: object + owner: + description: The address that registered the query. + type: string + query_type: + title: 'The query type identifier: `kv` or `tx` now' + type: string + registered_at_height: + description: The local chain height when the query was registered. + format: uint64 + type: string + submit_timeout: + description: >- + Timeout before query becomes available for everybody to + remove. + format: uint64 + type: string + transactions_filter: + title: The filter for transaction search ICQ + type: string + update_period: + description: >- + Parameter that defines how often the query must be + updated. + format: uint64 + type: string + type: object + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + tags: + - Query + /neutron/interchainqueries/registered_query: + get: + operationId: RegisteredQuery + parameters: + - format: uint64 + in: query + name: query_id + required: false + type: string + responses: + '200': + description: A successful response. + schema: + properties: + registered_query: + properties: + connection_id: + title: >- + The IBC connection ID for getting ConsensusState to verify + proofs + type: string + deposit: + description: Amount of coins deposited for the query. + items: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: type: string - total_taker_denom: + denom: type: string type: object - pool_reserves: + type: array + id: + description: The unique id of the registered query. + format: uint64 + type: string + keys: + items: properties: key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: + format: byte + title: Key you want to read from the storage type: string - reserves_maker_denom: + path: + title: >- + Path (storage prefix) to the storage where you want + to read value by key + + (usually name of cosmos-sdk module: 'staking', + 'bank', etc.) type: string type: object - type: object - type: array + title: >- + The KV-storage keys for which we want to get values from + remote chain + type: array + last_submitted_result_local_height: + description: >- + The local chain last block height when the query result + was updated. + format: uint64 + type: string + last_submitted_result_remote_height: + description: >- + The remote chain last block height when the query result + was updated. + properties: + revision_height: + format: uint64 + title: the height within the given revision + type: string + revision_number: + format: uint64 + title: the revision that the client is currently on + type: string + title: >- + Height is a monotonically increasing data type + + that can be compared against another Height for the + purposes of updating and + + freezing clients + type: object + owner: + description: The address that registered the query. + type: string + query_type: + title: 'The query type identifier: `kv` or `tx` now' + type: string + registered_at_height: + description: The local chain height when the query was registered. + format: uint64 + type: string + submit_timeout: + description: >- + Timeout before query becomes available for everybody to + remove. + format: uint64 + type: string + transactions_filter: + title: The filter for transaction search ICQ + type: string + update_period: + description: >- + Parameter that defines how often the query must be + updated. + format: uint64 + type: string + type: object type: object default: description: An unexpected error response. @@ -39837,193 +43426,89 @@ paths: message: type: string type: object - summary: Queries a list of TickLiquidity items. tags: - Query - /neutron/dex/user/deposits/{address}: + /neutron/interchainqueries/remote_height: get: - operationId: UserDepositsAll + operationId: LastRemoteHeight parameters: - - in: path - name: address - required: true - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean - in: query - name: include_pool_data + name: connection_id required: false - type: boolean + type: string responses: '200': description: A successful response. schema: properties: - deposits: + height: + format: uint64 + type: string + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: items: properties: - center_tick_index: - format: int64 - type: string - fee: - format: uint64 - type: string - lower_tick_index: - format: int64 - type: string - pair_id: - properties: - token0: - type: string - token1: - type: string - type: object - pool: - properties: - id: - format: uint64 - type: string - lower_tick0: - properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - type: object - upper_tick1: - properties: - key: - properties: - fee: - format: uint64 - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - type: object - price_opposite_taker_to_maker: - type: string - price_taker_to_maker: - type: string - reserves_maker_denom: - type: string - type: object - type: object - shares_owned: - type: string - total_shares: + type_url: type: string - upper_tick_index: - format: int64 + value: + format: byte type: string type: object type: array - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } + error: + type: string + message: + type: string + type: object + tags: + - Query + /neutron/interchaintxs/params: + get: + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. + properties: + params: + description: params holds all the parameters of this module. properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: + msg_submit_tx_max_messages: format: uint64 title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise + Defines maximum amount of messages to be passed in + MsgSubmitTx type: string + register_fee: + items: + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + Defines a minimum fee required to register interchain + account + type: array type: object type: object default: @@ -40048,140 +43533,49 @@ paths: message: type: string type: object - summary: Queries a list of UserDeposits items. + summary: Parameters queries the parameters of the module. tags: - Query - /neutron/dex/user/limit_orders/{address}: + /neutron/interchaintxs/{owner_address}/{interchain_account_id}/{connection_id}/interchain_account_address: get: - operationId: LimitOrderTrancheUserAllByAddress + operationId: InterchainAccountAddress parameters: - - in: path - name: address - required: true - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte - in: query - name: pagination.key - required: false - type: string - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should + owner_address is the owner of the interchain account on the + controller - be set. - format: uint64 - in: query - name: pagination.offset - required: false + chain + in: path + name: owner_address + required: true type: string - description: >- - limit is the total number of results to be returned in the result - page. + interchain_account_id is an identifier of your interchain account + from - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false + which you want to execute msgs + in: path + name: interchain_account_id + required: true type: string - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. - + connection_id is an IBC connection identifier between Neutron and + remote - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean + chain + in: path + name: connection_id + required: true + type: string responses: '200': description: A successful response. schema: properties: - limit_orders: - items: - properties: - address: - type: string - order_type: - default: GOOD_TIL_CANCELLED - enum: - - GOOD_TIL_CANCELLED - - FILL_OR_KILL - - IMMEDIATE_OR_CANCEL - - JUST_IN_TIME - - GOOD_TIL_TIME - type: string - shares_cancelled: - type: string - shares_owned: - type: string - shares_withdrawn: - type: string - tick_index_taker_to_maker: - format: int64 - type: string - trade_pair_id: - properties: - maker_denom: - type: string - taker_denom: - type: string - type: object - tranche_key: - type: string - type: object - type: array - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - type: string - type: object + interchain_account_address: + title: The corresponding interchain account address on the host chain + type: string + title: Query response for an interchain account address type: object default: description: An unexpected error response. @@ -40205,35 +43599,42 @@ paths: message: type: string type: object - summary: Queries a list of LimitOrderTrancheUser items for a given address. tags: - Query - /neutron/feeburner/params: + /osmosis/tokenfactory/v1beta1/denoms/factory/{creator}/{subdenom}/authority_metadata: get: - operationId: Params + operationId: DenomAuthorityMetadata + parameters: + - in: path + name: creator + required: true + type: string + - in: path + name: subdenom + required: true + type: string responses: '200': description: A successful response. schema: description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. + QueryDenomAuthorityMetadataResponse defines the response structure + for the + + DenomAuthorityMetadata gRPC query. properties: - params: - description: params holds all the parameters of this module. - properties: - neutron_denom: - title: >- - Defines Neutron denom, which will be burned during fee - processing, any + authority_metadata: + description: >- + DenomAuthorityMetadata specifies metadata for addresses that + have specific - other denom will be sent to Treasury - type: string - reserve_address: - title: Deprecated in v0.4.4. Is not used anymore - type: string - treasury_address: - title: Defines treasury address + capabilities over a token factory denom. Right now there is + only one Admin + + permission, but is planned to be extended to the future. + properties: + Admin: + title: Can be empty for no admin, or a valid osmosis address type: string type: object type: object @@ -40259,41 +43660,35 @@ paths: message: type: string type: object - summary: Parameters queries the parameters of the module. + summary: |- + DenomAuthorityMetadata defines a gRPC query method for fetching + DenomAuthorityMetadata for a particular denom. tags: - Query - /neutron/feeburner/total_burned_neutrons_amount: + /osmosis/tokenfactory/v1beta1/denoms/factory/{creator}/{subdenom}/before_send_hook: get: - operationId: TotalBurnedNeutronsAmount + operationId: BeforeSendHookAddress + parameters: + - in: path + name: creator + required: true + type: string + - in: path + name: subdenom + required: true + type: string responses: '200': description: A successful response. schema: - description: |- - QueryTotalBurnedNeutronsAmountResponse is response type for the - Query/QueryTotalBurnedNeutronsAmount method. - properties: - total_burned_neutrons_amount: - properties: - coin: - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method + description: >- + QueryBeforeSendHookAddressResponse defines the response structure + for the - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: >- - TotalBurnedNeutronsAmount defines total amount of burned - neutron fees - type: object + DenomBeforeSendHook gRPC query. + properties: + contract_addr: + type: string type: object default: description: An unexpected error response. @@ -40317,61 +43712,33 @@ paths: message: type: string type: object - summary: TotalBurnedNeutronsAmount queries total amount of burned neutron fees. + summary: |- + BeforeSendHookAddress defines a gRPC query method for + getting the address registered for the before send hook. tags: - Query - /neutron/interchainqueries/params: + /osmosis/tokenfactory/v1beta1/denoms_from_creator/{creator}: get: - operationId: Params + operationId: DenomsFromCreator + parameters: + - in: path + name: creator + required: true + type: string responses: '200': description: A successful response. schema: description: >- - QueryParamsResponse is response type for the Query/Params RPC - method. - properties: - params: - description: params holds all the parameters of this module. - properties: - query_deposit: - description: Amount of coins deposited for the query. - items: - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - type: array - query_submit_timeout: - format: uint64 - title: >- - Defines amount of blocks required before query becomes - available for - - removal by anybody - type: string - tx_query_removal_limit: - description: >- - Amount of tx hashes to be removed during a single - EndBlock. Can vary to - - balance between network cleaning speed and EndBlock - duration. A zero value + QueryDenomsFromCreatorRequest defines the response structure for + the - means no limit. - format: uint64 - type: string - type: object + DenomsFromCreator gRPC query. + properties: + denoms: + items: + type: string + type: array type: object default: description: An unexpected error response. @@ -40395,217 +43762,89 @@ paths: message: type: string type: object - summary: Parameters queries the parameters of the module. + summary: |- + DenomsFromCreator defines a gRPC query method for fetching all + denominations created by a specific admin/creator. tags: - Query - /neutron/interchainqueries/query_result: + /osmosis/tokenfactory/v1beta1/params: get: - operationId: QueryResult - parameters: - - format: uint64 - in: query - name: query_id - required: false - type: string + operationId: Params responses: '200': description: A successful response. schema: + description: >- + QueryParamsResponse is the response type for the Query/Params RPC + method. properties: - result: + params: + description: params defines the parameters of the module. properties: - allow_kv_callbacks: - type: boolean - block: - properties: - header: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: >- - We need to know block X to verify inclusion of - transaction for block X - next_block_header: - properties: - type_url: - type: string - value: - format: byte - type: string - type: object - title: >- - We need to know block X+1 to verify response of - transaction for block X - - since LastResultsHash is root hash of all results from - the txs from the - - previous block - tx: - properties: - data: - format: byte - title: is body of the transaction - type: string - delivery_proof: - title: >- - is the Merkle Proof which proves existence of - response in block with height - - next_block_header.Height - properties: - aunts: - items: - format: byte - type: string - type: array - index: - format: int64 - type: string - leaf_hash: - format: byte - type: string - total: - format: int64 - type: string - type: object - inclusion_proof: - title: >- - is the Merkle Proof which proves existence of data - in block with height - - header.Height - properties: - aunts: - items: - format: byte - type: string - type: array - index: - format: int64 - type: string - leaf_hash: - format: byte - type: string - total: - format: int64 - type: string - type: object - response: - description: >- - ExecTxResult contains results of executing one - individual transaction. - - - * Its structure is equivalent to - #ResponseDeliverTx which will be - deprecated/deleted - properties: - code: - format: int64 - type: integer - codespace: - type: string - data: - format: byte - type: string - events: - items: - description: >- - Event allows application developers to - attach additional information to + denom_creation_fee: + description: >- + DenomCreationFee defines the fee to be charged on the + creation of a new - ResponseFinalizeBlock and ResponseCheckTx. + denom. The fee is drawn from the MsgCreateDenom's sender + account, and - Later, transactions may be queried using - these events. - properties: - attributes: - items: - description: >- - EventAttribute is a single key-value - pair, associated with an event. - properties: - index: - type: boolean - key: - type: string - value: - type: string - type: object - type: array - type: - type: string - type: object - type: array - gas_used: - format: int64 - type: string - gas_wanted: - format: int64 - type: string - info: - type: string - log: - type: string - type: object - type: object - type: object - height: - format: uint64 - type: string - kv_results: + transferred to the community pool. items: - properties: - Proof: - title: >- - is the Merkle Proof which proves existence of - key-value pair in IAVL - - storage - properties: - ops: - items: - properties: - data: - format: byte - type: string - key: - format: byte - type: string - type: - type: string - title: >- - ProofOp defines an operation used for - calculating Merkle root + description: >- + Coin defines a token with a denomination and an amount. - The data could be arbitrary format, providing - nessecary data - for example neighbouring node hash - type: object - type: array - type: object - key: - format: byte - title: is the key in IAVL store - type: string - storage_prefix: - title: is the substore name (acc, staking, etc.) + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + properties: + amount: type: string - value: - format: byte - title: is the value in IAVL store + denom: type: string type: object type: array - revision: + denom_creation_gas_consume: + description: >- + DenomCreationGasConsume defines the gas cost for creating + a new denom. + + This is intended as a spam deterrence mechanism. + + + See: https://github.com/CosmWasm/token-factory/issues/11 format: uint64 type: string + fee_collector_address: + title: >- + FeeCollectorAddress is the address where fees collected + from denom creation + + are sent to + type: string + whitelisted_hooks: + items: + properties: + code_id: + format: uint64 + type: string + denom_creator: + type: string + title: >- + WhitelistedHook describes a beforeSendHook which is + allowed to be added and executed + + SetBeforeSendHook can only be called on denoms where the + denom creator and + + code_id for the `contract_addr` match a WhitelistedHook + type: object + title: >- + whitelisted_hooks is the list of hooks which are allowed + to be added and executed + type: array type: object type: object default: @@ -40630,217 +43869,370 @@ paths: message: type: string type: object + summary: >- + Params defines a gRPC query method that returns the tokenfactory + module's + + parameters. tags: - Query - /neutron/interchainqueries/registered_queries: + /slinky/alerts/v1/alerts: get: - operationId: RegisteredQueries + operationId: Alerts parameters: - - collectionFormat: multi - in: query - items: - type: string - name: owners - required: false - type: array - - in: query - name: connection_id - required: false - type: string - - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - format: byte + - default: CONCLUSION_STATUS_UNSPECIFIED + enum: + - CONCLUSION_STATUS_UNSPECIFIED + - CONCLUSION_STATUS_UNCONCLUDED + - CONCLUSION_STATUS_CONCLUDED in: query - name: pagination.key + name: status required: false type: string - - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should + responses: + '200': + description: A successful response. + schema: + description: >- + AlertsResponse is the response type for the Query.Alerts RPC + method, it - be set. - format: uint64 - in: query - name: pagination.offset - required: false - type: string - - description: >- - limit is the total number of results to be returned in the result - page. + contains the list of Alerts that are being tracked by the alerts + module. + properties: + alerts: + items: + description: >- + Alert defines the basic meta-data necessary for the alerts + module to resolve - If left empty it will default to a value to be set by each app. - format: uint64 - in: query - name: pagination.limit - required: false - type: string - - description: >- - count_total is set to true to indicate that the result set should - include + a claim that the price of a CurrencyPair on-chain is + deviating from the price - a count of the total number of items available for pagination in - UIs. + off-chain. + properties: + currency_pair: + description: >- + currency_pair is the currency-pair that this claim + asserts is deviating - count_total is only respected when offset is used. It is ignored - when key + from the price off-chain. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of + assets, where one - is set. - in: query - name: pagination.count_total - required: false - type: boolean - - description: >- - reverse is set to true if results are to be returned in the - descending order. + (Base) is priced in terms of the other (Quote) + type: object + height: + description: >- + height represents the height for which the alert is + filed. + format: uint64 + type: string + signer: + description: >- + signer is the signer of this alert, this is the address + that will receive + the reward in the case of a positive conclusion, or + whose bond will get - Since: cosmos-sdk 0.43 - in: query - name: pagination.reverse - required: false - type: boolean + slashed in the event of a negative conclusion. + type: string + type: object + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: |- + Alerts gets all alerts in state under the given status. If no status is + given, all Alerts are returned + tags: + - Query + /slinky/alerts/v1/params: + get: + operationId: Params responses: '200': description: A successful response. schema: + description: >- + ParamsResponse is the response type for the Query.Params RPC + method, it + + contains the Params of the module. properties: - pagination: - description: >- - PageResponse is to be embedded in gRPC response messages where - the + params: + description: Params is the set of parameters for the x/Alerts module. + properties: + alert_params: + description: >- + AlertParams is the set of parameters for the x/Alerts + module's Alerting. + properties: + bond_amount: + description: >- + Coin defines a token with a denomination and an + amount. - corresponding request message has used PageRequest. - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - properties: - next_key: - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - format: byte - type: string - total: - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total + NOTE: The amount field is an Int which implements the + custom method - was set, its value is undefined otherwise - type: string + signatures required by gogoproto. + properties: + amount: + type: string + denom: + type: string + type: object + title: >- + BondAmount is the minimum amount of bond required to + submit an + + Alert + enabled: + title: >- + Enabled is a boolean defining whether or not Alerts + can be submitted + + to the module + type: boolean + max_block_age: + description: >- + MaxBlockAge defines the maximum age of an Alert before + it is pruned, notice + + this is defined wrt. the height that the Alert + references, i.e Alerts are + + only relevant until Alert.Height + MaxBlockAge is + reached. + format: uint64 + type: string + type: object + conclusion_verification_params: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + description: >- + ConclusionVerificationParams is the set of parameters for + the x/Alerts + + module's conclusion verification. + pruning_params: + description: >- + PruningParams is the set of parameters for the x/Alerts + module's pruning. + properties: + blocks_to_prune: + description: >- + BlocksToPrune defines the number of blocks until an + Alert will be pruned + + from state, notice this is defined wrt. the current + block height, i.e + + Alerts will be stored in state until current_height + + BlocksToPrune is + + reached. + format: uint64 + type: string + enabled: + title: Enabled defines whether Alerts are to be pruned + type: boolean + type: object type: object - registered_queries: - items: - properties: - connection_id: - title: >- - The IBC connection ID for getting ConsensusState to - verify proofs + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: type: string - deposit: - description: Amount of coins deposited for the query. - items: - description: >- - Coin defines a token with a denomination and an - amount. - + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + tags: + - Query + /slinky/incentives/v1/get_all_incentives: + get: + operationId: GetAllIncentives + responses: + '200': + description: A successful response. + schema: + description: >- + GetAllIncentivesResponse is the response type for the + Query/GetAllIncentives - NOTE: The amount field is an Int which implements the - custom method + RPC method. + properties: + registry: + description: Registry is the list of all incentives, grouped by type. + items: + description: >- + IncentivesByType encapsulates a list of incentives by type. + Each of the - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - type: array - id: - description: The unique id of the registered query. - format: uint64 - type: string - keys: + entries here must correspond to the same incentive type + defined here. + properties: + entries: + description: Entries is a list of incentive bytes. items: - properties: - key: - format: byte - title: Key you want to read from the storage - type: string - path: - title: >- - Path (storage prefix) to the storage where you - want to read value by key - - (usually name of cosmos-sdk module: 'staking', - 'bank', etc.) - type: string - type: object - title: >- - The KV-storage keys for which we want to get values from - remote chain + format: byte + type: string type: array - last_submitted_result_local_height: - description: >- - The local chain last block height when the query result - was updated. - format: uint64 - type: string - last_submitted_result_remote_height: + incentive_type: description: >- - The remote chain last block height when the query result - was updated. - properties: - revision_height: - format: uint64 - title: the height within the given revision - type: string - revision_number: - format: uint64 - title: the revision that the client is currently on - type: string - title: >- - Height is a monotonically increasing data type + IncentiveType is the incentive type i.e. + (BadPriceIncentiveType, - that can be compared against another Height for the - purposes of updating and - - freezing clients - type: object - owner: - description: The address that registered the query. - type: string - query_type: - title: 'The query type identifier: `kv` or `tx` now' + GoodPriceIncentiveType). type: string - registered_at_height: - description: The local chain height when the query was registered. - format: uint64 + type: object + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: type: string - submit_timeout: - description: >- - Timeout before query becomes available for everybody to - remove. - format: uint64 + value: + format: byte type: string - transactions_filter: - title: The filter for transaction search ICQ + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: GetAllIncentives returns all incentives. + tags: + - Query + /slinky/incentives/v1/get_incentives_by_type/{incentive_type}: + get: + operationId: GetIncentivesByType + parameters: + - description: |- + IncentiveType is the incentive type i.e. (BadPriceIncentiveType, + GoodPriceIncentiveType). + in: path + name: incentive_type + required: true + type: string + responses: + '200': + description: A successful response. + schema: + description: |- + GetIncentivesByTypeResponse is the response type for the + Query/GetIncentivesByType RPC method. + properties: + entries: + description: Entries is the list of incentives of the given type. + items: + format: byte + type: string + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: type: string - update_period: - description: >- - Parameter that defines how often the query must be - updated. - format: uint64 + value: + format: byte type: string type: object type: array + error: + type: string + message: + type: string + type: object + summary: >- + GetIncentivesByType returns all incentives of a given type. If the type + is + + not registered with the module, an error is returned. + tags: + - Query + /slinky/marketmap/v1/last_updated: + get: + operationId: LastUpdated + responses: + '200': + description: A successful response. + schema: + description: >- + LastUpdatedResponse is the response type for the Query/LastUpdated + RPC + + method. + properties: + last_updated: + format: uint64 + type: string type: object default: description: An unexpected error response. @@ -40864,123 +44256,149 @@ paths: message: type: string type: object + summary: LastUpdated returns the last height the market map was updated at. tags: - Query - /neutron/interchainqueries/registered_query: + /slinky/marketmap/v1/market: get: - operationId: RegisteredQuery + operationId: Market parameters: - - format: uint64 - in: query - name: query_id + - in: query + name: currency_pair.Base + required: false + type: string + - in: query + name: currency_pair.Quote required: false type: string responses: '200': description: A successful response. schema: + description: MarketResponse is the query response for the Market query. properties: - registered_query: + market: + description: >- + Market encapsulates a Ticker and its provider-specific + configuration. properties: - connection_id: - title: >- - The IBC connection ID for getting ConsensusState to verify - proofs - type: string - deposit: - description: Amount of coins deposited for the query. + provider_configs: + description: >- + ProviderConfigs is the list of provider-specific configs + for this Market. items: - description: >- - Coin defines a token with a denomination and an amount. - + properties: + invert: + title: >- + Invert is a boolean indicating if the BASE and QUOTE + of the market should - NOTE: The amount field is an Int which implements the - custom method + be inverted. i.e. BASE -> QUOTE, QUOTE -> BASE + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes any + extra configuration - signatures required by gogoproto. - properties: - amount: + for the given provider config. type: string - denom: - type: string - type: object - type: array - id: - description: The unique id of the registered query. - format: uint64 - type: string - keys: - items: - properties: - key: - format: byte - title: Key you want to read from the storage + name: + description: >- + Name corresponds to the name of the provider for + which the configuration is + + being set. type: string - path: + normalize_by_pair: + description: >- + NormalizeByPair is the currency pair for this ticker + to be normalized by. + + For example, if the desired Ticker is BTC/USD, this + market could be reached + + using: OffChainTicker = BTC/USDT NormalizeByPair = + USDT/USD This field is + + optional and nullable. + properties: + Base: + type: string + Quote: + type: string title: >- - Path (storage prefix) to the storage where you want - to read value by key + CurrencyPair is the standard representation of a + pair of assets, where one - (usually name of cosmos-sdk module: 'staking', - 'bank', etc.) + (Base) is priced in terms of the other (Quote) + type: object + off_chain_ticker: + description: >- + OffChainTicker is the off-chain representation of + the ticker i.e. BTC/USD. + + The off-chain ticker is unique to a given provider + and is used to fetch the + + price of the ticker from the provider. type: string - type: object - title: >- - The KV-storage keys for which we want to get values from - remote chain + type: object type: array - last_submitted_result_local_height: - description: >- - The local chain last block height when the query result - was updated. - format: uint64 - type: string - last_submitted_result_remote_height: + ticker: description: >- - The remote chain last block height when the query result - was updated. + Ticker represents a price feed for a given asset pair i.e. + BTC/USD. The + + price feed is scaled to a number of decimal places and has + a minimum number + + of providers required to consider the ticker valid. properties: - revision_height: - format: uint64 - title: the height within the given revision - type: string - revision_number: + currency_pair: + description: CurrencyPair is the currency pair for this ticker. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair + of assets, where one + + (Base) is priced in terms of the other (Quote) + type: object + decimals: + description: >- + Decimals is the number of decimal places for the + ticker. The number of + + decimal places is used to convert the price to a + human-readable format. format: uint64 - title: the revision that the client is currently on type: string - title: >- - Height is a monotonically increasing data type + enabled: + description: >- + Enabled is the flag that denotes if the Ticker is + enabled for price - that can be compared against another Height for the - purposes of updating and + fetching by an oracle. + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes any + extra configuration - freezing clients + for the given ticker. + type: string + min_provider_count: + description: >- + MinProviderCount is the minimum number of providers + required to consider + + the ticker valid. + format: uint64 + type: string type: object - owner: - description: The address that registered the query. - type: string - query_type: - title: 'The query type identifier: `kv` or `tx` now' - type: string - registered_at_height: - description: The local chain height when the query was registered. - format: uint64 - type: string - submit_timeout: - description: >- - Timeout before query becomes available for everybody to - remove. - format: uint64 - type: string - transactions_filter: - title: The filter for transaction search ICQ - type: string - update_period: - description: >- - Parameter that defines how often the query must be - updated. - format: uint64 - type: string type: object type: object default: @@ -41005,24 +44423,174 @@ paths: message: type: string type: object + summary: |- + Market returns a market stored in the x/marketmap + module. tags: - Query - /neutron/interchainqueries/remote_height: + /slinky/marketmap/v1/marketmap: get: - operationId: LastRemoteHeight - parameters: - - in: query - name: connection_id - required: false - type: string + operationId: MarketMap responses: '200': description: A successful response. schema: + description: MarketMapResponse is the query response for the MarketMap query. properties: - height: + chain_id: + description: ChainId is the chain identifier for the market map. + type: string + last_updated: + description: >- + LastUpdated is the last block height that the market map was + updated. + + This field can be used as an optimization for clients checking + if there + + is a new update to the map. format: uint64 type: string + market_map: + description: >- + MarketMap defines the global set of market configurations for + all providers + + and markets. + properties: + markets: + additionalProperties: + description: >- + Market encapsulates a Ticker and its provider-specific + configuration. + properties: + provider_configs: + description: >- + ProviderConfigs is the list of provider-specific + configs for this Market. + items: + properties: + invert: + title: >- + Invert is a boolean indicating if the BASE and + QUOTE of the market should + + be inverted. i.e. BASE -> QUOTE, QUOTE -> BASE + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes + any extra configuration + + for the given provider config. + type: string + name: + description: >- + Name corresponds to the name of the provider + for which the configuration is + + being set. + type: string + normalize_by_pair: + description: >- + NormalizeByPair is the currency pair for this + ticker to be normalized by. + + For example, if the desired Ticker is BTC/USD, + this market could be reached + + using: OffChainTicker = BTC/USDT + NormalizeByPair = USDT/USD This field is + + optional and nullable. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of + a pair of assets, where one + + (Base) is priced in terms of the other (Quote) + type: object + off_chain_ticker: + description: >- + OffChainTicker is the off-chain representation + of the ticker i.e. BTC/USD. + + The off-chain ticker is unique to a given + provider and is used to fetch the + + price of the ticker from the provider. + type: string + type: object + type: array + ticker: + description: >- + Ticker represents a price feed for a given asset + pair i.e. BTC/USD. The + + price feed is scaled to a number of decimal places + and has a minimum number + + of providers required to consider the ticker valid. + properties: + currency_pair: + description: >- + CurrencyPair is the currency pair for this + ticker. + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a + pair of assets, where one + + (Base) is priced in terms of the other (Quote) + type: object + decimals: + description: >- + Decimals is the number of decimal places for the + ticker. The number of + + decimal places is used to convert the price to a + human-readable format. + format: uint64 + type: string + enabled: + description: >- + Enabled is the flag that denotes if the Ticker + is enabled for price + + fetching by an oracle. + type: boolean + metadata_JSON: + description: >- + MetadataJSON is a string of JSON that encodes + any extra configuration + + for the given ticker. + type: string + min_provider_count: + description: >- + MinProviderCount is the minimum number of + providers required to consider + + the ticker valid. + format: uint64 + type: string + type: object + type: object + description: >- + Markets is the full list of tickers and their associated + configurations + + to be stored on-chain. + type: object + type: object type: object default: description: An unexpected error response. @@ -41046,9 +44614,12 @@ paths: message: type: string type: object + summary: |- + MarketMap returns the full market map stored in the x/marketmap + module. tags: - Query - /neutron/interchaintxs/params: + /slinky/marketmap/v1/params: get: operationId: Params responses: @@ -41056,37 +44627,28 @@ paths: description: A successful response. schema: description: >- - QueryParamsResponse is response type for the Query/Params RPC + ParamsResponse is the response type for the Query/Params RPC method. properties: params: - description: params holds all the parameters of this module. + description: Params defines the parameters for the x/marketmap module. properties: - msg_submit_tx_max_messages: - format: uint64 - title: >- - Defines maximum amount of messages to be passed in - MsgSubmitTx - type: string - register_fee: - items: - description: >- - Coin defines a token with a denomination and an amount. - + admin: + description: >- + Admin is an address that can remove addresses from the + MarketAuthorities - NOTE: The amount field is an Int which implements the - custom method + list. Only governance can add to the MarketAuthorities or + change the Admin. + type: string + market_authorities: + description: >- + MarketAuthorities is the list of authority accounts that + are able to - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - title: >- - Defines a minimum fee required to register interchain - account + control updating the marketmap. + items: + type: string type: array type: object type: object @@ -41112,49 +44674,94 @@ paths: message: type: string type: object - summary: Parameters queries the parameters of the module. + summary: Params returns the current x/marketmap module parameters. tags: - Query - /neutron/interchaintxs/{owner_address}/{interchain_account_id}/{connection_id}/interchain_account_address: + /slinky/oracle/v1/get_all_tickers: get: - operationId: InterchainAccountAddress - parameters: - - description: >- - owner_address is the owner of the interchain account on the - controller - - chain - in: path - name: owner_address - required: true - type: string - - description: >- - interchain_account_id is an identifier of your interchain account - from + operationId: GetAllCurrencyPairs + responses: + '200': + description: A successful response. + schema: + description: >- + GetAllCurrencyPairsResponse returns all CurrencyPairs that the + module is - which you want to execute msgs - in: path - name: interchain_account_id - required: true - type: string - - description: >- - connection_id is an IBC connection identifier between Neutron and - remote + currently tracking. + properties: + currency_pairs: + items: + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of + assets, where one - chain - in: path - name: connection_id - required: true - type: string + (Base) is priced in terms of the other (Quote) + type: object + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: + type: string + message: + type: string + type: object + summary: >- + Get all the currency pairs the x/oracle module is tracking price-data + for. + tags: + - Query + /slinky/oracle/v1/get_currency_pair_mapping: + get: + operationId: GetCurrencyPairMapping responses: '200': description: A successful response. schema: + description: >- + GetCurrencyPairMappingResponse is the GetCurrencyPairMapping + response type. properties: - interchain_account_address: - title: The corresponding interchain account address on the host chain - type: string - title: Query response for an interchain account address + currency_pair_mapping: + additionalProperties: + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of + assets, where one + + (Base) is priced in terms of the other (Quote) + type: object + description: >- + currency_pair_mapping is a mapping of the id representing the + currency pair + + to the currency pair itself. + type: object type: object default: description: An unexpected error response. @@ -41178,42 +44785,82 @@ paths: message: type: string type: object + summary: >- + Get the mapping of currency pair ID -> currency pair. This is useful for + + indexers that have access to the ID of a currency pair, but no way to + get + + the underlying currency pair from it. tags: - Query - /osmosis/tokenfactory/v1beta1/denoms/factory/{creator}/{subdenom}/authority_metadata: + /slinky/oracle/v1/get_price: get: - operationId: DenomAuthorityMetadata + operationId: GetPrice parameters: - - in: path - name: creator - required: true + - in: query + name: currency_pair.Base + required: false type: string - - in: path - name: subdenom - required: true + - in: query + name: currency_pair.Quote + required: false type: string responses: '200': description: A successful response. schema: description: >- - QueryDenomAuthorityMetadataResponse defines the response structure - for the + GetPriceResponse is the response from the GetPrice grpc method + exposed from - DenomAuthorityMetadata gRPC query. + the x/oracle query service. properties: - authority_metadata: + decimals: description: >- - DenomAuthorityMetadata specifies metadata for addresses that - have specific + decimals represents the number of decimals that the + quote-price is - capabilities over a token factory denom. Right now there is - only one Admin + represented in. For Pairs where ETHEREUM is the quote this + will be 18, - permission, but is planned to be extended to the future. + otherwise it will be 8. + format: uint64 + type: string + id: + description: ID represents the identifier for the CurrencyPair. + format: uint64 + type: string + nonce: + format: uint64 + title: >- + nonce represents the nonce for the CurrencyPair if it exists + in state + type: string + price: + title: >- + QuotePrice represents the quote-price for the CurrencyPair + given in + + GetPriceRequest (possibly nil if no update has been made) properties: - Admin: - title: Can be empty for no admin, or a valid osmosis address + block_height: + format: uint64 + title: BlockHeight is height of block mentioned above + type: string + block_timestamp: + format: date-time + title: >- + BlockTimestamp tracks the block height associated with + this price update. + + We include block timestamp alongside the price to ensure + that smart + + contracts and applications are not utilizing stale oracle + prices + type: string + price: type: string type: object type: object @@ -41239,35 +44886,135 @@ paths: message: type: string type: object - summary: |- - DenomAuthorityMetadata defines a gRPC query method for fetching - DenomAuthorityMetadata for a particular denom. + summary: >- + Given a CurrencyPair (or its identifier) return the latest QuotePrice + for + + that CurrencyPair. tags: - Query - /osmosis/tokenfactory/v1beta1/denoms/factory/{creator}/{subdenom}/before_send_hook: + /slinky/oracle/v1/get_prices: get: - operationId: BeforeSendHookAddress + operationId: GetPrices parameters: - - in: path - name: creator - required: true - type: string - - in: path - name: subdenom - required: true - type: string + - collectionFormat: multi + in: query + items: + type: string + name: currency_pair_ids + required: false + type: array responses: '200': description: A successful response. schema: description: >- - QueryBeforeSendHookAddressResponse defines the response structure - for the + GetPricesResponse is the response from the GetPrices grpc method + exposed from - DenomBeforeSendHook gRPC query. + the x/oracle query service. properties: - contract_addr: + prices: + items: + description: >- + GetPriceResponse is the response from the GetPrice grpc + method exposed from + + the x/oracle query service. + properties: + decimals: + description: >- + decimals represents the number of decimals that the + quote-price is + + represented in. For Pairs where ETHEREUM is the quote + this will be 18, + + otherwise it will be 8. + format: uint64 + type: string + id: + description: ID represents the identifier for the CurrencyPair. + format: uint64 + type: string + nonce: + format: uint64 + title: >- + nonce represents the nonce for the CurrencyPair if it + exists in state + type: string + price: + title: >- + QuotePrice represents the quote-price for the + CurrencyPair given in + + GetPriceRequest (possibly nil if no update has been + made) + properties: + block_height: + format: uint64 + title: BlockHeight is height of block mentioned above + type: string + block_timestamp: + format: date-time + title: >- + BlockTimestamp tracks the block height associated + with this price update. + + We include block timestamp alongside the price to + ensure that smart + + contracts and applications are not utilizing stale + oracle prices + type: string + price: + type: string + type: object + type: object + type: array + type: object + default: + description: An unexpected error response. + schema: + properties: + code: + format: int32 + type: integer + details: + items: + properties: + type_url: + type: string + value: + format: byte + type: string + type: object + type: array + error: type: string + message: + type: string + type: object + tags: + - Query + /slinky/sla/v1/params: + get: + operationId: Params + responses: + '200': + description: A successful response. + schema: + description: >- + QueryParamsResponse is the response type for the Query/Params RPC + method. + properties: + params: + description: Params defines the parameters for the sla module. + properties: + enabled: + description: Enabled is a flag to enable or disable the sla module. + type: boolean + type: object type: object default: description: An unexpected error response. @@ -41291,32 +45038,91 @@ paths: message: type: string type: object - summary: |- - BeforeSendHookAddress defines a gRPC query method for - getting the address registered for the before send hook. + summary: Params returns the current SLA module parameters. tags: - Query - /osmosis/tokenfactory/v1beta1/denoms_from_creator/{creator}: + /slinky/sla/v1/price_feeds: get: - operationId: DenomsFromCreator + operationId: GetPriceFeeds parameters: - - in: path - name: creator - required: true + - description: ID defines the SLA to query price feeds for. + in: query + name: id + required: false type: string responses: '200': description: A successful response. schema: description: >- - QueryDenomsFromCreatorRequest defines the response structure for - the + QueryGetPriceFeedsResponse is the response type for the + Query/GetPriceFeeds - DenomsFromCreator gRPC query. + RPC method. properties: - denoms: + price_feeds: + description: PriceFeeds defines the price feeds for the given SLA. items: - type: string + description: >- + PriceFeed defines the object type that will be utilized to + monitor how + + frequently validators are voting with price updates across + the network. + properties: + currency_pair: + properties: + Base: + type: string + Quote: + type: string + title: >- + CurrencyPair is the standard representation of a pair of + assets, where one + + (Base) is priced in terms of the other (Quote) + type: object + description: >- + CurrencyPair represents the currency pair that this SLA + corresponds to. + id: + description: >- + ID corresponds to the SLA ID that this price feed + corresponds to. + type: string + inclusion_map: + description: >- + InclusionMap represents the relevant moving window of + blocks that the + + validator has voted on. + format: byte + type: string + index: + description: Index corresponds to the current index into the bitmap. + format: uint64 + type: string + maximum_viable_window: + description: >- + MaximumViableWindow represents the maximum number of + blocks that can be + + represented by the bit map. + format: uint64 + type: string + update_map: + description: >- + UpdateMap represents the relevant moving window of price + feed updates. + format: byte + type: string + validator: + description: >- + Validator represents the validator that this SLA + corresponds to. + format: byte + type: string + type: object type: array type: object default: @@ -41342,68 +45148,81 @@ paths: type: string type: object summary: |- - DenomsFromCreator defines a gRPC query method for fetching all - denominations created by a specific admin/creator. + GetPriceFeeds returns all price feeds that the module is currently + tracking. This request type inputs the SLA ID to query price feeds for. tags: - Query - /osmosis/tokenfactory/v1beta1/params: + /slinky/sla/v1/slas: get: - operationId: Params + operationId: GetAllSLAs responses: '200': description: A successful response. schema: description: >- - QueryParamsResponse is the response type for the Query/Params RPC + QueryAllSLAsResponse is the response type for the Query/GetAllSLAs + RPC + method. properties: - params: - description: params defines the parameters of the module. - properties: - denom_creation_fee: - description: >- - DenomCreationFee defines the fee to be charged on the - creation of a new + slas: + items: + description: >- + PriceFeedSLA defines the the desired SLA for a given set of + price feeds. A - denom. The fee is drawn from the MsgCreateDenom's sender - account, and + price feed is defined to be a set of price prices for the + same (currency - transferred to the community pool. - items: + pair, validator). + properties: + expected_uptime: description: >- - Coin defines a token with a denomination and an amount. + ExpectedUptime is the expected uptime for the given + validator and price + feed. + type: string + frequency: + description: >- + Frequency is the frequency at which we will check the + SLA. + format: uint64 + type: string + id: + description: ID is the unique identifier for the SLA. + type: string + maximum_viable_window: + description: >- + MaximumViableWindow is the maximum time window that we + are interested - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - properties: - amount: - type: string - denom: - type: string - type: object - type: array - denom_creation_gas_consume: - description: >- - DenomCreationGasConsume defines the gas cost for creating - a new denom. + for the SLA. This is used to determine the moving window + of blocks that - This is intended as a spam deterrence mechanism. + we are interested in. + format: uint64 + type: string + minimum_block_updates: + description: >- + MinimumBlockUpdates is the minimum number of blocks that + the + validator had to have voted on in the maximum viable + window - See: https://github.com/CosmWasm/token-factory/issues/11 - format: uint64 - type: string - fee_collector_address: - title: >- - FeeCollectorAddress is the address where fees collected - from denom creation + in order to be considered for the SLA. + format: uint64 + type: string + slash_constant: + description: >- + SlashConstant is the constant by which we will multiply + the deviation from - are sent to - type: string - type: object + the expected uptime. + type: string + type: object + type: array type: object default: description: An unexpected error response. @@ -41427,11 +45246,7 @@ paths: message: type: string type: object - summary: >- - Params defines a gRPC query method that returns the tokenfactory - module's - - parameters. + summary: GetAllSLAs returns all SLAs that the module is currently enforcing. tags: - Query produces: diff --git a/go.mod b/go.mod index 0bf3d2b86..6bb0dc10a 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module github.com/neutron-org/neutron/v4 -go 1.22 - -toolchain go1.22.1 +go 1.22.4 require ( cosmossdk.io/client/v2 v2.0.0-beta.1 @@ -11,23 +9,23 @@ require ( cosmossdk.io/log v1.3.1 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.0 - cosmossdk.io/x/evidence v0.1.0 - cosmossdk.io/x/feegrant v0.1.0 + cosmossdk.io/x/evidence v0.1.1 + cosmossdk.io/x/feegrant v0.1.1 cosmossdk.io/x/tx v0.13.3 - cosmossdk.io/x/upgrade v0.1.1 - github.com/CosmWasm/wasmd v0.50.0 - github.com/CosmWasm/wasmvm/v2 v2.0.0 - github.com/cometbft/cometbft v0.38.7 - github.com/cosmos/admin-module v0.0.0-20220204080909-475a98e03f31 + cosmossdk.io/x/upgrade v0.1.4 + github.com/CosmWasm/wasmd v0.51.0 + github.com/CosmWasm/wasmvm/v2 v2.0.1 + github.com/cometbft/cometbft v0.38.10 + github.com/cosmos/admin-module/v2 v2.0.0-20240430142959-8b3328d1b1a2 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-proto v1.0.0-beta.5 - github.com/cosmos/cosmos-sdk v0.50.6 - github.com/cosmos/gogoproto v1.4.12 - github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.1 - github.com/cosmos/ibc-go/modules/capability v1.0.0 + github.com/cosmos/cosmos-sdk v0.50.7 + github.com/cosmos/gogoproto v1.5.0 + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.2 + github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/v8 v8.2.1 github.com/cosmos/ics23/go v0.10.0 - github.com/cosmos/interchain-security/v5 v5.0.0-rc0 + github.com/cosmos/interchain-security/v5 v5.0.0 github.com/gogo/protobuf v1.3.3 github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.4 @@ -37,37 +35,76 @@ require ( github.com/hashicorp/go-metrics v0.5.3 github.com/iancoleman/orderedmap v0.3.0 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.19.0 + github.com/prometheus/client_golang v1.19.1 github.com/rs/zerolog v1.32.0 - github.com/skip-mev/block-sdk/v2 v2.1.2 - github.com/skip-mev/slinky v0.4.3 + github.com/skip-mev/block-sdk/v2 v2.1.5 + github.com/skip-mev/feemarket v1.0.4 + github.com/skip-mev/slinky v1.0.3 github.com/spf13/cast v1.6.0 - github.com/spf13/cobra v1.8.0 + github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.18.2 + github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.9.0 - golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 - google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8 - google.golang.org/grpc v1.63.2 - google.golang.org/protobuf v1.34.1 + golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 + google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3 + google.golang.org/grpc v1.65.0 + google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v2 v2.4.0 ) require ( - cloud.google.com/go v0.112.0 // indirect - cloud.google.com/go/compute v1.24.0 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.6 // indirect - cloud.google.com/go/storage v1.36.0 // indirect - cosmossdk.io/api v0.7.4 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect + github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect + github.com/blendle/zapdriver v1.3.1 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect + github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect + github.com/deckarep/golang-set/v2 v2.6.0 // indirect + github.com/ethereum/c-kzg-4844 v1.0.0 // indirect + github.com/ethereum/go-ethereum v1.14.5 // indirect + github.com/gagliardetto/binary v0.8.0 // indirect + github.com/gagliardetto/solana-go v1.10.0 // indirect + github.com/gagliardetto/treeout v0.1.4 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/holiman/uint256 v1.2.4 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/logrusorgru/aurora v2.0.3+incompatible // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect + github.com/oxyno-zeta/gomock-extra-matcher v1.2.0 // indirect + github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect + github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + go.mongodb.org/mongo-driver v1.11.0 // indirect + go.uber.org/mock v0.4.0 // indirect + go.uber.org/ratelimit v0.2.0 // indirect + go.uber.org/zap v1.27.0 // indirect + rsc.io/tmplfunc v0.0.3 // indirect +) + +require ( + cloud.google.com/go v0.114.0 // indirect + cloud.google.com/go/auth v0.5.1 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect + cloud.google.com/go/compute/metadata v0.3.0 // indirect + cloud.google.com/go/iam v1.1.8 // indirect + cloud.google.com/go/storage v1.41.0 // indirect + cosmossdk.io/api v0.7.5 // indirect cosmossdk.io/collections v0.4.0 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect - cosmossdk.io/x/circuit v0.1.0 // indirect - filippo.io/edwards25519 v1.0.0 // indirect + cosmossdk.io/x/circuit v0.1.1 // 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.2 // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect github.com/DataDog/zstd v1.5.5 // indirect + github.com/GeertJohan/go.rice v1.0.3 // 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 @@ -75,6 +112,7 @@ require ( github.com/bits-and-blooms/bitset v1.13.0 // indirect github.com/btcsuite/btcd v0.22.0-beta // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/buger/jsonparser v1.1.1 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -89,8 +127,9 @@ require ( 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.1.2 // indirect + github.com/cosmos/iavl v1.2.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect + github.com/daaku/go.zipexe v1.0.2 // indirect github.com/danieljoos/wincred v1.2.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect @@ -100,9 +139,9 @@ require ( github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/distribution/reference v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/emicklei/dot v1.6.1 // indirect - github.com/fatih/color v1.16.0 // indirect + github.com/dvsekhvalnov/jose2go v1.7.0 // indirect + github.com/emicklei/dot v1.6.2 // indirect + github.com/fatih/color v1.17.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect @@ -110,11 +149,11 @@ require ( 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.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect - github.com/golang/glog v1.2.0 // indirect + github.com/golang/glog v1.2.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/btree v1.1.2 // indirect @@ -124,9 +163,10 @@ require ( github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/googleapis/gax-go/v2 v2.12.4 // indirect github.com/gorilla/handlers v1.5.2 // indirect - github.com/gorilla/websocket v1.5.1 // indirect + github.com/gorilla/rpc v1.2.0 // 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-cleanhttp v0.5.2 // indirect @@ -135,8 +175,9 @@ require ( github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-plugin v1.5.2 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect @@ -146,11 +187,10 @@ require ( 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.17.8 // indirect + github.com/klauspost/compress v1.17.9 // 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/libp2p/go-buffer-pool v0.1.0 // indirect github.com/linxGnu/grocksdb v1.8.14 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect @@ -164,7 +204,6 @@ require ( github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/oxyno-zeta/gomock-extra-matcher v1.2.0 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -188,25 +227,23 @@ require ( github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect - go.opentelemetry.io/otel v1.22.0 // indirect - go.opentelemetry.io/otel/metric v1.22.0 // indirect - go.opentelemetry.io/otel/trace v1.22.0 // indirect - go.uber.org/mock v0.4.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/otel/metric v1.24.0 // indirect + go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/oauth2 v0.18.0 // indirect + golang.org/x/crypto v0.24.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/oauth2 v0.20.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/term v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - google.golang.org/api v0.162.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/api v0.180.0 // indirect + google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -217,13 +254,12 @@ require ( replace ( github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 - github.com/CosmWasm/wasmd => github.com/neutron-org/wasmd v0.45.1-0.20240501180153-d9bebe629e05 - github.com/cosmos/admin-module => github.com/neutron-org/admin-module v1.0.2-0.20240402143659-7dcb4a8c2056 - github.com/cosmos/cosmos-sdk => github.com/neutron-org/cosmos-sdk v0.50.0-beta.0.0.20240226131019-8efae68de5cc + github.com/CosmWasm/wasmd => github.com/neutron-org/wasmd v0.51.0 + github.com/cosmos/admin-module/v2 => github.com/neutron-org/admin-module/v2 v2.0.0 + github.com/cosmos/cosmos-sdk => github.com/neutron-org/cosmos-sdk v0.50.8-neutron + // explicitely replace iavl to v1.2.0 cause sometimes go mod tidy uses not right version + github.com/cosmos/iavl => github.com/cosmos/iavl v1.2.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.18.0 - github.com/prometheus/client_model => github.com/prometheus/client_model v0.6.0 - github.com/prometheus/common => github.com/prometheus/common v0.47.0 github.com/prometheus/procfs => github.com/prometheus/procfs v0.12.0 github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) diff --git a/go.sum b/go.sum index d83e85882..d988100f4 100644 --- a/go.sum +++ b/go.sum @@ -3,7 +3,6 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT 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= @@ -16,7 +15,6 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY 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= @@ -28,93 +26,32 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y 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.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= -cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= -cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= -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 v0.114.0 h1:OIPFAdfrFDFO2ve2U7r/H5SwSbBzEdrBdE7xkgwc+kY= +cloud.google.com/go v0.114.0/go.mod h1:ZV9La5YYxctro1HTPug5lXH/GefROyW8PPD4T8n9J8E= 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.5.1 h1:0QNO7VThG54LUzKiQxv8C6x1YX7lUrzlAa1nVLF8CIw= +cloud.google.com/go/auth v0.5.1/go.mod h1:vbZT8GjzDf3AVqCcQmqeeM32U9HBFc32vVVAbwDsa6s= +cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= +cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= 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= @@ -122,44 +59,12 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= -cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= -cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= -cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= cloud.google.com/go/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= @@ -167,444 +72,122 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= -cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= -cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= -cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= -cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= -cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= -cloud.google.com/go/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/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= +cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= 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.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= -cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= -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/iam v1.1.8 h1:r7umDwhj+BQyz0ScZMp4QrGXjSTI3ZINnpgU2nlB/K0= +cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= -cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= -cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= -cloud.google.com/go/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/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.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= -cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= -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/storage v1.41.0 h1:RusiwatSu6lHeEXe3kglxakAmAbfV+rhtPqA6i8RBx0= +cloud.google.com/go/storage v1.41.0/go.mod h1:J1WCa/Z2FcgdEDuPUY8DxT5I+d9mFKsCepp5vR6Sq80= 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/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.7.4 h1:sPo8wKwCty1lht8kgL3J7YL1voJywP3YWuA5JKkBz30= -cosmossdk.io/api v0.7.4/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= +cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= @@ -621,73 +204,93 @@ cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= -cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= -cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= -cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= -cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= -cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= -cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= -cosmossdk.io/x/nft v0.1.0 h1:VhcsFiEK33ODN27kxKLa0r/CeFd8laBfbDBwYqCyYCM= -cosmossdk.io/x/nft v0.1.0/go.mod h1:ec4j4QAO4mJZ+45jeYRnW7awLHby1JZANqe1hNZ4S3g= +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.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= +cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= +cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= +cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= +cosmossdk.io/x/nft v0.1.1 h1:pslAVS8P5NkW080+LWOamInjDcq+v2GSCo+BjN9sxZ8= +cosmossdk.io/x/nft v0.1.1/go.mod h1:Kac6F6y2gsKvoxU+fy8uvxRTi4BIhLOor2zgCNQwVgY= cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.1 h1:aoPe2gNvH+Gwt/Pgq3dOxxQVU3j5P6Xf+DaUJTDZATc= -cosmossdk.io/x/upgrade v0.1.1/go.mod h1:MNLptLPcIFK9CWt7Ra//8WUZAxweyRDNcbs5nkOcQy0= +cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38= +cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= -filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= 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/AlekSi/pointer v1.1.0 h1:SSDMPcXD9jSl8FPy9cRzoRaMJtm9g9ggGTxecRUbQoI= +github.com/AlekSi/pointer v1.1.0/go.mod h1:y7BvfRI3wXPWKXEBhU71nbnIEEZX0QTSB2Bj48UJIZE= 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/CosmWasm/wasmvm/v2 v2.0.0 h1:IqNCI2G0mvs7K6ej17/I28805rVqnu+Y1cWDqIdwb08= -github.com/CosmWasm/wasmvm/v2 v2.0.0/go.mod h1:su9lg5qLr7adV95eOfzjZWkGiky8WNaNIHDr7Fpu7Ck= +github.com/CosmWasm/wasmvm/v2 v2.0.1 h1:0YCQ7MKGNri7NFeRp75erPJXrqyCtH4gdc9jMstyMzk= +github.com/CosmWasm/wasmvm/v2 v2.0.1/go.mod h1:su9lg5qLr7adV95eOfzjZWkGiky8WNaNIHDr7Fpu7Ck= 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.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= +github.com/GeertJohan/go.rice v1.0.3 h1:k5viR+xGtIhF61125vCE1cmJ5957RQGXG6dmbaWZSmI= +github.com/GeertJohan/go.rice v1.0.3/go.mod h1:XVdrU4pW00M4ikZed5q56tPf1v2KwnIKeIdc9CBYNt4= +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 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= +github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= -github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +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/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI= +github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= 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.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= +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/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-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.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.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/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= +github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= @@ -707,18 +310,20 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= +github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/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 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.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= @@ -733,24 +338,20 @@ 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/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-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= 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.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= @@ -763,16 +364,23 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/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/cometbft/cometbft v0.38.7 h1:ULhIOJ9+LgSy6nLekhq9ae3juX3NnQUMMPyVdhZV6Hk= -github.com/cometbft/cometbft v0.38.7/go.mod h1:HIyf811dFMI73IE0F7RrnY/Fr+d1+HuJAgtkEpQjCMY= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/cometbft/cometbft v0.38.10 h1:2ePuglchT+j0Iao+cfmt/nw5U7K2lnGDzXSUPGVdXaU= +github.com/cometbft/cometbft v0.38.10/go.mod h1:jHPx9vQpWzPHEAiYI/7EDKaB1NXhK6o3SArrrY8ExKc= github.com/cometbft/cometbft-db v0.11.0 h1:M3Lscmpogx5NTbb1EGyGDaFRdsoLWrUWimFEyf7jej8= github.com/cometbft/cometbft-db v0.11.0/go.mod h1:GDPJAC/iFHNjmZZPN8V8C1yr/eyityhi2W1hz2MGKSc= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +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.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= @@ -784,27 +392,37 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x 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.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= -github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= -github.com/cosmos/iavl v1.1.2 h1:zL9FK7C4L/P4IF1Dm5fIwz0WXCnn7Bp1M2FxH0ayM7Y= -github.com/cosmos/iavl v1.1.2/go.mod h1:jLeUvm6bGT1YutCaL2fIar/8vGUE8cPZvh/gXEWDaDM= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.1 h1:BHn+JWZILxkUT9IrlP1ctUfo9ENGi+EmiZ9om1XSHIw= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.1/go.mod h1:82hPO/tRawbuFad2gPwChvpZ0JEIoNi91LwVneAYCeM= -github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= -github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= +github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= +github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= +github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.2 h1:dyLNlDElY6+5zW/BT/dO/3Ad9FpQblfh+9dQpYQodbA= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.2/go.mod h1:82hPO/tRawbuFad2gPwChvpZ0JEIoNi91LwVneAYCeM= +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/v8 v8.2.1 h1:MTsnZZjxvGD4Fv5pYyx5UkELafSX0rlPt6IfsE2BpTQ= github.com/cosmos/ibc-go/v8 v8.2.1/go.mod h1:wj3qx75iC/XNnsMqbPDCIGs0G6Y3E/lo3bdqCyoCy+8= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/interchain-security/v5 v5.0.0-rc0 h1:Sh5CDqLDS32q2WsO9k5j3NyBzmW+mm66c+kgRniCthA= -github.com/cosmos/interchain-security/v5 v5.0.0-rc0/go.mod h1:h/RkwOppo5AJj+1pkQyfjqU1MPdpohD/S6oEeAXpGZY= +github.com/cosmos/interchain-security/v5 v5.0.0 h1:iwHu1nFbXuYfa13isEgm6hkHU+2t/t56YjcfyP3PnQA= +github.com/cosmos/interchain-security/v5 v5.0.0/go.mod h1:h/RkwOppo5AJj+1pkQyfjqU1MPdpohD/S6oEeAXpGZY= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +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.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= +github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= +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/daaku/go.zipexe v1.0.2 h1:Zg55YLYTr7M9wjKn8SY/WcpuuEi+kR2u4E8RhvpyXmk= +github.com/daaku/go.zipexe v1.0.2/go.mod h1:5xWogtqlYnfBXkSB1o9xysukNP9GTvaNkqzUZbt3Bw8= github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -812,6 +430,8 @@ 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/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.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= @@ -824,6 +444,7 @@ github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= 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= @@ -833,14 +454,19 @@ github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKoh 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/emicklei/dot v1.6.1 h1:ujpDlBkkwgWUY+qPId5IwapRW/xEoligRSYjioR6DFI= -github.com/emicklei/dot v1.6.1/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +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/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= @@ -850,30 +476,41 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m 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.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= 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.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= +github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.14.5 h1:szuFzO1MhJmweXjoM5nSAeDvjNUH3vIQoMzzQnfvjpw= +github.com/ethereum/go-ethereum v1.14.5/go.mod h1:VEDGGhSxY7IEjn98hJRFXl/uFvpRgbIIf2PpXiyGGgc= +github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 h1:KrE8I4reeVvf7C1tm8elRjj4BdscTYzz/WAbYyf/JI4= +github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0/go.mod h1:D9AJLVXSyZQXJQVk8oh1EwjISE+sJTn2duYIZC0dy3w= 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.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= -github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= 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/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= +github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= 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.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= +github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= +github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= +github.com/gagliardetto/gofuzz v1.2.2/go.mod h1:bkH/3hYLZrMLbfYWA0pWzXmi5TTRZnu4pMGZBkqMKvY= +github.com/gagliardetto/solana-go v1.10.0 h1:lDuHGC+XLxw9j8fCHBZM9tv4trI0PVhev1m9NAMaIdM= +github.com/gagliardetto/solana-go v1.10.0/go.mod h1:afBEcIRrDLJst3lvAahTr63m6W2Ns6dajZxe2irF7Jg= +github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= +github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= +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.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= @@ -885,34 +522,30 @@ github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-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-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.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +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-ole/go-ole v1.2.5/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-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= @@ -923,6 +556,7 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= @@ -932,20 +566,23 @@ github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/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/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +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/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/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.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= -github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4= +github.com/golang/glog v1.2.1/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= @@ -979,9 +616,10 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/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.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= @@ -990,7 +628,6 @@ 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.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -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= @@ -1017,8 +654,8 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/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= @@ -1030,18 +667,16 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf 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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= -github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +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= @@ -1049,8 +684,6 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ 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.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -1062,35 +695,42 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= -github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= -github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= -github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.12.4 h1:9gWcmF85Wvq4ryPFvGFaOgPIs1AQX0d0bcbGw4Z96qg= +github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI= 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/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk= +github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= +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.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +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/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU= 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-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-getter v1.7.4 h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0= @@ -1102,34 +742,57 @@ github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJ github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE= github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= +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.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= 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/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.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/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/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.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +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/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.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +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= @@ -1139,63 +802,73 @@ github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPt 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/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/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/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= +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/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +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.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.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 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.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/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/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= +github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= @@ -1206,6 +879,7 @@ github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-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= @@ -1213,45 +887,77 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ 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/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= -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/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +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/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +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/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= 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/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 h1:mPMvm6X6tf4w8y7j9YIt6V9jfWhL6QlbEc7CCmeQlWk= +github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1/go.mod h1:ye2e/VUEtE2BHE+G/QcKkcLQVAEJoYRFj5VUOQatCRE= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= 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/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/neutron-org/admin-module v1.0.2-0.20240402143659-7dcb4a8c2056 h1:mb3fNlOG3gO5fG/z2zY7glHZhHFQ2/aDzGFZMZinkPo= -github.com/neutron-org/admin-module v1.0.2-0.20240402143659-7dcb4a8c2056/go.mod h1:di9iYm/L6fwGZXig6kNw8jCkCLfNdHo46UMcFgIbJUo= -github.com/neutron-org/cosmos-sdk v0.50.0-beta.0.0.20240226131019-8efae68de5cc h1:8Ci9jiKFhKQ1WdiMcwD/+Egygu+hr2XgzDA0Ngb4vnw= -github.com/neutron-org/cosmos-sdk v0.50.0-beta.0.0.20240226131019-8efae68de5cc/go.mod h1:UbShFs6P8Ly29xxJvkNGaNaL/UGj5a686NRtb1Cqra0= -github.com/neutron-org/wasmd v0.45.1-0.20240501180153-d9bebe629e05 h1:HTf3tdocEy9MDElIe9wePm/P9A74cE/3gyIgnWvOGEc= -github.com/neutron-org/wasmd v0.45.1-0.20240501180153-d9bebe629e05/go.mod h1:7TSaj5HoolghujuVWeExqmcUKgpcYWEySGLSODbnnwY= +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/neutron-org/admin-module/v2 v2.0.0 h1:MlkSc1821sQ+G5/cYOajuqZ5/lM53xTbixpTtXnHh0A= +github.com/neutron-org/admin-module/v2 v2.0.0/go.mod h1:RfOyabXsdJ5btcOKyKPZDYiZhtuKFubbJMOb8EJZtvA= +github.com/neutron-org/cosmos-sdk v0.50.8-neutron h1:L+4obYi/KkkmS05gBlXNF+FhipHYTl0iO3EkmpMBXkE= +github.com/neutron-org/cosmos-sdk v0.50.8-neutron/go.mod h1:Zb+DgHtiByNwgj71IlJBXwOq6dLhtyAq3AgqpXm/jHo= +github.com/neutron-org/wasmd v0.51.0 h1:OBp5aG8xeEz199Crepwb3q6YtuJVL0sudsD7F2oyyfs= +github.com/neutron-org/wasmd v0.51.0/go.mod h1:7TSaj5HoolghujuVWeExqmcUKgpcYWEySGLSODbnnwY= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nkovacs/streamquote v1.0.0/go.mod h1:BN+NaZ2CmdKqUuTUXUEm9j95B2TRbpOWpxbJYzzgUsc= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oasisprotocol/curve25519-voi v0.0.0-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/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo 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= @@ -1264,29 +970,39 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= 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/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= 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/oxyno-zeta/gomock-extra-matcher v1.2.0 h1:WPEclU0y0PMwUzdDcaKZvld4aXpa3fkzjiUMQdcBEHg= github.com/oxyno-zeta/gomock-extra-matcher v1.2.0/go.mod h1:S0r7HmKeCGsHmvIVFMjKWwswb4+30nCNWbXRMBVPkaU= +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 v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU= github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/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/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -1294,29 +1010,48 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE 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/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= 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/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= -github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= -github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= -github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= -github.com/prometheus/common v0.47.0 h1:p5Cz0FNHo7SnWOmWmoRozVcjEp0bIVU8cV7OShpjL1k= -github.com/prometheus/common v0.47.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= +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.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +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.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.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= +github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +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/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +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.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -1325,50 +1060,73 @@ github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 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/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +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/skip-mev/block-sdk/v2 v2.1.2 h1:fNKbrb+PVVzuU0JiSuWgBV4Afj5zZ1VeHQJp88wSl1g= -github.com/skip-mev/block-sdk/v2 v2.1.2/go.mod h1:kIq7SMva0/eHKTCiG/oI5XGxD4HNVK0t71TrUZqHcvA= -github.com/skip-mev/chaintestutil v0.0.0-20240116134208-3e49bf514803 h1:VRRVYN3wsOIOqVT3e3nDh3vyUl6RvF9QwdK4BvgPP9c= -github.com/skip-mev/chaintestutil v0.0.0-20240116134208-3e49bf514803/go.mod h1:LF2koCTmygQnz11yjSfHvNP8axdyZ2lTEw0EwI+dnno= -github.com/skip-mev/slinky v0.4.3 h1:4LWqeDa2and84GXG3HgAAmDa145+TG2WQ0uRDAU7AzA= -github.com/skip-mev/slinky v0.4.3/go.mod h1:6LkqFirdIh1FfHijGyRf1MeiBgVshDseTH/jHTOVQVs= +github.com/skip-mev/block-sdk/v2 v2.1.5 h1:3uoYG2ayP253wiohBPKdD3LrkJGd1Kgw914mmI1ZyOI= +github.com/skip-mev/block-sdk/v2 v2.1.5/go.mod h1:E8SvITZUdxkes3gI3+kgESZL+NLffkcLKnowUgYTOf4= +github.com/skip-mev/chaintestutil v0.0.0-20240514161515-056d7ba45610 h1:4JlsiRVt/YZOvrKH525T7sZXgEWUEjqSDMwE6fXNbdo= +github.com/skip-mev/chaintestutil v0.0.0-20240514161515-056d7ba45610/go.mod h1:kB8gFZX07CyJnw8q9iEZijI3qJTIe1K/Y++P5VGkrcg= +github.com/skip-mev/feemarket v1.0.4 h1:OPZ9D0tlDUa55n+HIjE2DgL+geMOwcDwUXTYdz4ig9Y= +github.com/skip-mev/feemarket v1.0.4/go.mod h1:lszt7zGEEActbDYq1hOKogQvfCsnLEHH5113LwgmYcE= +github.com/skip-mev/slinky v1.0.3 h1:+7Yw+HHjYqJ7gb5nrG1k2bplNG+qEmn5wws+OesdY2M= +github.com/skip-mev/slinky v1.0.3/go.mod h1:EE3O71wIJ74OciYh62Fc5EysF07KArBEYb6lDmTIKVM= +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/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.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.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= +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/streamingfast/logging v0.0.0-20230608130331-f22c91403091 h1:RN5mrigyirb8anBEtdjtHFIufXdacyTi6i4KBfeNXeo= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= 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= @@ -1385,19 +1143,32 @@ 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.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.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/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/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/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= +github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= 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/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +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/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 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= @@ -1407,8 +1178,21 @@ github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZ 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/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= 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= @@ -1416,14 +1200,18 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec 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/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.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.mongodb.org/mongo-driver v1.11.0 h1:FZKhBSTydeuffHj9CBjXlR8vQLee1cQyTWYPA6/tqiE= +go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= +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= @@ -1433,66 +1221,68 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= -go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= -go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= -go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= -go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= -go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= +go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= 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/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= 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/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA= +go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= +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= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= 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-20181203042331-505ab145d0a9/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-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-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.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -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.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -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.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= 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= @@ -1500,22 +1290,10 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= 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= @@ -1539,28 +1317,29 @@ 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.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-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= @@ -1582,14 +1361,12 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY 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-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1602,22 +1379,10 @@ golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-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.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 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= @@ -1641,18 +1406,10 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= -golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= -golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= +golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= 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= @@ -1666,15 +1423,17 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ 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.2.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.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1688,12 +1447,15 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-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-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1710,6 +1472,8 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w 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-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= @@ -1719,14 +1483,11 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/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-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1735,11 +1496,9 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc 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-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1761,37 +1520,19 @@ golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBc 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.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.15.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.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= 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= @@ -1801,33 +1542,23 @@ 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 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +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.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -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-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= @@ -1836,8 +1567,9 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw 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= @@ -1846,6 +1578,7 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn 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= @@ -1867,12 +1600,10 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc 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-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= @@ -1880,13 +1611,7 @@ 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.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -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.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= -golang.org/x/tools v0.21.0/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= @@ -1894,16 +1619,10 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.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= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +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= @@ -1951,37 +1670,24 @@ google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaE google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= -google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= -google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= -google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= -google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps= -google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= +google.golang.org/api v0.180.0 h1:M2D87Yo0rGBPWpo1orwfCLehUUL6E7/TYe5gvMQWDh4= +google.golang.org/api v0.180.0/go.mod h1:51AiyoEg1MJPSZ9zvklA8VnRILPXxn1iVen9v25XHAE= 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/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= 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= @@ -2014,10 +1720,8 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D 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= @@ -2051,7 +1755,6 @@ google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= @@ -2084,58 +1787,22 @@ google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53B google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= -google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8 h1:8eadJkXbwDEMNwcB5O0s5Y5eCfyuCLdvaiOIaGTrWmQ= -google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda h1:wu/KJm9KJwpfHWhkkZGohVC6KRrc1oJNr4jwtQMOQXw= +google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda/go.mod h1:g2LLCvCeCSir/JJSWosk19BR4NVxGqHUC6rxIRsd7Aw= +google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3 h1:QW9+G6Fir4VcRXVH8x3LilNAb6cxBGLa6+GM4hRwexE= +google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3/go.mod h1:kdrSS/OiLkPrNUpzD4aHgCq2rVuC/YRxok32HXZ4vRE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +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= @@ -2159,7 +1826,6 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.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= @@ -2169,13 +1835,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= 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= @@ -2192,29 +1853,34 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ 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.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +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/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= +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= @@ -2225,6 +1891,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2232,48 +1899,16 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.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= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.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= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= +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/network/hermes/config.toml b/network/hermes/config.toml index e69db2839..4e311112d 100644 --- a/network/hermes/config.toml +++ b/network/hermes/config.toml @@ -100,8 +100,8 @@ key_name = 'testkey_1' store_prefix = 'ibc' default_gas = 100000 max_gas = 3000000 -gas_price = { price = 0.0025, denom = 'untrn' } -gas_multiplier = 1.5 +gas_price = { price = 0.01, denom = 'untrn' } +gas_multiplier = 1.8 max_msg_num = 30 max_tx_size = 2097152 clock_drift = '5s' diff --git a/network/init-neutrond.sh b/network/init-neutrond.sh index fa3f0a978..1e4ac6a08 100755 --- a/network/init-neutrond.sh +++ b/network/init-neutrond.sh @@ -7,6 +7,7 @@ CHAINID=${CHAINID:-test-1} STAKEDENOM=${STAKEDENOM:-untrn} CONTRACTS_BINARIES_DIR=${CONTRACTS_BINARIES_DIR:-./contracts} THIRD_PARTY_CONTRACTS_DIR=${THIRD_PARTY_CONTRACTS_DIR:-./contracts_thirdparty} +FEEMARKET_ENABLED=${FEEMARKET_ENABLED:-true} # IMPORTANT! minimum_gas_prices should always contain at least one record, otherwise the chain will not start or halt # ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2 denom is required by intgration tests (test:tokenomics) @@ -52,6 +53,12 @@ CW4_GROUP_CONTRACT=$THIRD_PARTY_CONTRACTS_DIR/cw4_group.wasm NEUTRON_CHAIN_MANAGER_CONTRACT=$CONTRACTS_BINARIES_DIR/neutron_chain_manager.wasm +# Slinky genesis configs +USE_CORE_MARKETS=${USE_CORE_MARKETS:-true} +USE_RAYDIUM_MARKETS=${USE_RAYDIUM_MARKETS:-false} +USE_UNISWAPV3_BASE_MARKETS=${USE_UNISWAPV3_BASE_MARKETS:-false} +USE_COINGECKO_MARKETS=${USE_COINGECKO_MARKETS:-false} + echo "Add consumer section..." $BINARY add-consumer-section --home "$CHAIN_DIR" ### PARAMETERS SECTION @@ -718,12 +725,25 @@ function convert_bech32_base64_esc() { DAO_CONTRACT_ADDRESS_B64=$(convert_bech32_base64_esc "$DAO_CONTRACT_ADDRESS") echo $DAO_CONTRACT_ADDRESS_B64 +echo "Adding marketmap into genesis..." +go run network/slinky_genesis.go --use-core=$USE_CORE_MARKETS --use-raydium=$USE_RAYDIUM_MARKETS --use-uniswapv3-base=$USE_UNISWAPV3_BASE_MARKETS --use-coingecko=$USE_COINGECKO_MARKETS --temp-file=markets.json +MARKETS=$(cat markets.json) + +NUM_MARKETS=$(echo "$MARKETS" | jq '.markets | length + 1') + +NUM_MARKETS=$NUM_MARKETS; jq --arg num "$NUM_MARKETS" '.app_state["oracle"]["next_id"] = $num' "$GENESIS_PATH" > genesis_tmp.json && mv genesis_tmp.json "$GENESIS_PATH" +MARKETS=$MARKETS; jq --arg markets "$MARKETS" '.app_state["marketmap"]["market_map"] = ($markets | fromjson)' "$GENESIS_PATH" > genesis_tmp.json && mv genesis_tmp.json "$GENESIS_PATH" +MARKETS=$MARKETS; jq --arg markets "$MARKETS" '.app_state["oracle"]["currency_pair_genesis"] += [$markets | fromjson | .markets | values | .[].ticker.currency_pair | {"currency_pair": {"Base": .Base, "Quote": .Quote}, "currency_pair_price": null, "nonce": 0} ]' "$GENESIS_PATH" > genesis_tmp.json && mv genesis_tmp.json "$GENESIS_PATH" +MARKETS=$MARKETS; jq --arg markets "$MARKETS" '.app_state["oracle"]["currency_pair_genesis"] |= (to_entries | map(.value += {id: (.key + 1)} | .value))' "$GENESIS_PATH" > genesis_tmp.json && mv genesis_tmp.json "$GENESIS_PATH" + +rm markets.json + +echo "Setting the rest of Neutron genesis params..." set_genesis_param admins "[\"$NEUTRON_CHAIN_MANAGER_CONTRACT_ADDRESS\"]" # admin module set_genesis_param treasury_address "\"$DAO_CONTRACT_ADDRESS\"" # feeburner -set_genesis_param fee_collector_address "\"$DAO_CONTRACT_ADDRESS\"" # tokenfactory +set_genesis_param fee_collector_address "\"$DAO_CONTRACT_ADDRESS\"," # tokenfactory set_genesis_param security_address "\"$SECURITY_SUBDAO_CORE_CONTRACT_ADDRESS\"," # cron set_genesis_param limit 5 # cron -#set_genesis_param allow_messages "[\"*\"]" # interchainaccounts set_genesis_param signed_blocks_window "\"$SLASHING_SIGNED_BLOCKS_WINDOW\"," # slashing set_genesis_param min_signed_per_window "\"$SLASHING_MIN_SIGNED\"," # slashing set_genesis_param slash_fraction_double_sign "\"$SLASHING_FRACTION_DOUBLE_SIGN\"," # slashing @@ -738,6 +758,12 @@ set_genesis_param max_gas "\"1000000000\"" set_genesis_param vote_extensions_enable_height "\"1\"" # consensus_params set_genesis_param_jq ".app_state.marketmap.params.admin" "\"$ADMIN_MODULE_ADDRESS\"" # marketmap set_genesis_param_jq ".app_state.marketmap.params.market_authorities" "[\"$ADMIN_MODULE_ADDRESS\"]" # marketmap +set_genesis_param_jq ".app_state.feemarket.params.min_base_gas_price" "\"0.0025\"" # feemarket +set_genesis_param_jq ".app_state.feemarket.params.fee_denom" "\"untrn\"" # feemarket +set_genesis_param_jq ".app_state.feemarket.params.max_learning_rate" "\"0.5\"" # feemarket +set_genesis_param_jq ".app_state.feemarket.params.enabled" "$FEEMARKET_ENABLED" # feemarket +set_genesis_param_jq ".app_state.feemarket.params.distribute_fees" "true" # feemarket +set_genesis_param_jq ".app_state.feemarket.state.base_gas_price" "\"0.0025\"" # feemarket if ! jq -e . "$GENESIS_PATH" >/dev/null 2>&1; then echo "genesis appears to become incorrect json" >&2 diff --git a/network/slinky_genesis.go b/network/slinky_genesis.go new file mode 100644 index 000000000..7bd26227f --- /dev/null +++ b/network/slinky_genesis.go @@ -0,0 +1,99 @@ +// copypasted from: https://github.com/skip-mev/slinky/blob/main/scripts/genesis.go + +package main + +import ( + "flag" + "fmt" + + "github.com/skip-mev/slinky/cmd/constants" + mmtypes "github.com/skip-mev/slinky/x/marketmap/types" +) + +var ( + useCore = flag.Bool("use-core", false, "use core markets") + useRaydium = flag.Bool("use-raydium", false, "use raydium markets") + useUniswapV3Base = flag.Bool("use-uniswapv3-base", false, "use uniswapv3 base markets") + useCoinGecko = flag.Bool("use-coingecko", false, "use coingecko markets") + tempFile = flag.String("temp-file", "markets.json", "temporary file to store the market map") +) + +func main() { + // Based on the flags, we determine what market.json to configure. By default, we use Core markets. + // If the user specifies a different market.json, we use that instead. + flag.Parse() + + marketMap := mmtypes.MarketMap{ + Markets: make(map[string]mmtypes.Market), + } + + if *useCore { + fmt.Fprintf(flag.CommandLine.Output(), "Using core markets\n") + marketMap = mergeMarketMaps(marketMap, constants.CoreMarketMap) + } + + if *useRaydium { + fmt.Fprintf(flag.CommandLine.Output(), "Using raydium markets\n") + marketMap = mergeMarketMaps(marketMap, constants.RaydiumMarketMap) + } + + if *useUniswapV3Base { + fmt.Fprintf(flag.CommandLine.Output(), "Using uniswapv3 base markets\n") + marketMap = mergeMarketMaps(marketMap, constants.UniswapV3BaseMarketMap) + } + + if *useCoinGecko { + fmt.Fprintf(flag.CommandLine.Output(), "Using coingecko markets\n") + marketMap = mergeMarketMaps(marketMap, constants.CoinGeckoMarketMap) + } + + if err := marketMap.ValidateBasic(); err != nil { + fmt.Fprintf(flag.CommandLine.Output(), "failed to validate market map: %s\n", err) + panic(err) + } + + // Write the market map to the temporary file. + if *tempFile == "" { + fmt.Fprintf(flag.CommandLine.Output(), "temp file cannot be empty\n") + panic("temp file cannot be empty") + } + + if err := mmtypes.WriteMarketMapToFile(marketMap, *tempFile); err != nil { + fmt.Fprintf(flag.CommandLine.Output(), "failed to write market map to file: %s\n", err) + panic(err) + } +} + +// mergeMarketMaps merges the two market maps together. If a market already exists in one of the maps, we +// merge based on the provider set. +func mergeMarketMaps(this, other mmtypes.MarketMap) mmtypes.MarketMap { + for name, otherMarket := range other.Markets { + // If the market does not exist in this map, we add it. + thisMarket, ok := this.Markets[name] + if !ok { + this.Markets[name] = otherMarket + continue + } + + seen := make(map[string]struct{}) + for _, provider := range thisMarket.ProviderConfigs { + key := providerConfigToKey(provider) + seen[key] = struct{}{} + } + + for _, provider := range otherMarket.ProviderConfigs { + key := providerConfigToKey(provider) + if _, ok := seen[key]; !ok { + thisMarket.ProviderConfigs = append(thisMarket.ProviderConfigs, provider) + } + } + + this.Markets[name] = thisMarket + } + + return this +} + +func providerConfigToKey(cfg mmtypes.ProviderConfig) string { + return cfg.Name + cfg.OffChainTicker +} diff --git a/proto/buf.lock b/proto/buf.lock index 1e2a4c482..78d1386c9 100644 --- a/proto/buf.lock +++ b/proto/buf.lock @@ -4,16 +4,30 @@ deps: - remote: buf.build owner: cosmos repository: cosmos-proto - commit: 1935555c206d4afb9e94615dfd0fad31 + commit: 04467658e59e44bbb22fe568206e1f70 + digest: shake256:73a640bd60e0c523b0f8237ff34eab67c45a38b64bbbde1d80224819d272dbf316ac183526bd245f994af6608b025f5130483d0133c5edd385531326b5990466 - remote: buf.build owner: cosmos repository: cosmos-sdk commit: 5a6ab7bc14314acaa912d5e53aef1c2f + digest: shake256:02c00c73493720055f9b57553a35b5550023a3c1914123b247956288a78fb913aff70e66552777ae14d759467e119079d484af081264a5dd607a94d9fbc8116b - remote: buf.build owner: cosmos repository: gogo-proto commit: 88ef6483f90f478fb938c37dde52ece3 + digest: shake256:89c45df2aa11e0cff97b0d695436713db3d993d76792e9f8dc1ae90e6ab9a9bec55503d48ceedd6b86069ab07d3041b32001b2bfe0227fa725dd515ff381e5ba + - remote: buf.build + owner: cosmos + repository: ibc + commit: 6b221c7d310545198c1dafe70287d254 + digest: shake256:c5ea4d89af1c47f4d02057892eacdcb863359178079d9599f30d853b374fe9e9bfb3d9ca6720361c3439999a885a4f87fff4cd41c6c26b1f1142d60c386f8323 + - remote: buf.build + owner: cosmos + repository: ics23 + commit: 55085f7c710a45f58fa09947208eb70b + digest: shake256:9bf0bc495b5a11c88d163d39ef521bc4b00bc1374a05758c91d82821bdc61f09e8c2c51dda8452529bf80137f34d852561eacbe9550a59015d51cecb0dacb628 - remote: buf.build owner: googleapis repository: googleapis - commit: 7e6f6e774e29406da95bd61cdcdbc8bc + commit: f0e53af8f2fc4556b94f482688b57223 + digest: shake256:de26a277fc28b8b411ecf58729d78d32fcf15090ffd998a4469225b17889bfb51442eaab04bb7a8d88d203ecdf0a9febd4ffd52c18ed1c2229160c7bd353ca95 diff --git a/proto/buf.yaml b/proto/buf.yaml index e47ac91b8..39930f27c 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -5,6 +5,7 @@ deps: - buf.build/cosmos/cosmos-sdk:v0.50.0 - buf.build/cosmos/gogo-proto - buf.build/googleapis/googleapis + - buf.build/cosmos/ibc # - buf.build/osmosis-labs/osmosis breaking: use: diff --git a/proto/neutron/dex/params.proto b/proto/neutron/dex/params.proto index f081d5128..43c20db29 100644 --- a/proto/neutron/dex/params.proto +++ b/proto/neutron/dex/params.proto @@ -9,13 +9,10 @@ option go_package = "github.com/neutron-org/neutron/v4/x/dex/types"; message Params { option (gogoproto.goproto_stringer) = false; repeated uint64 fee_tiers = 1; - string max_true_taker_spread = 2 [ - (gogoproto.moretags) = "yaml:\"max_true_taker_spread\"", - (gogoproto.customtype) = "github.com/neutron-org/neutron/v4/utils/math.PrecDec", - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "max_true_taker_spread" + bool paused = 3 [ + // Adding jsontag prevents protoc from adding `omitempty` tag + (gogoproto.jsontag) = "paused" ]; - bool paused = 3; - uint64 max_JITs_per_block = 4; + uint64 max_jits_per_block = 4; uint64 good_til_purge_allowance = 5; } diff --git a/proto/neutron/dex/tx.proto b/proto/neutron/dex/tx.proto index c784074dd..093591440 100644 --- a/proto/neutron/dex/tx.proto +++ b/proto/neutron/dex/tx.proto @@ -113,7 +113,9 @@ message MsgPlaceLimitOrder { string receiver = 2; string token_in = 3; string token_out = 4; - int64 tick_index_in_to_out = 5; + + // DEPRECATED: tick_index_in_to_out will be removed in future release; limit_sell_price should be used instead. + int64 tick_index_in_to_out = 5 [deprecated = true]; string amount_in = 7 [ (gogoproto.moretags) = "yaml:\"amount_in\"", (gogoproto.customtype) = "cosmossdk.io/math.Int", @@ -132,6 +134,12 @@ message MsgPlaceLimitOrder { (gogoproto.nullable) = true, (gogoproto.jsontag) = "max_amount_out" ]; + string limit_sell_price = 11 [ + (gogoproto.moretags) = "yaml:\"limit_sell_price\"", + (gogoproto.customtype) = "github.com/neutron-org/neutron/v4/utils/math.PrecDec", + (gogoproto.nullable) = true, + (gogoproto.jsontag) = "limit_sell_price" + ]; } message MsgPlaceLimitOrderResponse { diff --git a/proto/neutron/dynamicfees/v1/genesis.proto b/proto/neutron/dynamicfees/v1/genesis.proto new file mode 100644 index 000000000..dcdfe3d18 --- /dev/null +++ b/proto/neutron/dynamicfees/v1/genesis.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package neutron.dynamicfees.v1; + +import "gogoproto/gogo.proto"; +import "neutron/dynamicfees/v1/params.proto"; + +option go_package = "github.com/neutron-org/neutron/v4/x/dynamicfees/types"; + +// GenesisState defines the dynamicfees module's genesis state. +message GenesisState { + Params params = 1 [(gogoproto.nullable) = false]; +} diff --git a/proto/neutron/dynamicfees/v1/params.proto b/proto/neutron/dynamicfees/v1/params.proto new file mode 100644 index 000000000..1e87168e2 --- /dev/null +++ b/proto/neutron/dynamicfees/v1/params.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; +package neutron.dynamicfees.v1; + +import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/neutron-org/neutron/v4/x/dynamicfees/types"; + +// Params defines the parameters for the module. +message Params { + option (gogoproto.goproto_stringer) = false; + + // List of asset prices by the NTRN + // it's used in cooperation with feemarket module + // ntrn_prices is a data source to convert gas_price from feemarket's base_denom (untrn) + // into a given asset + repeated cosmos.base.v1beta1.DecCoin ntrn_prices = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false + ]; +} diff --git a/proto/neutron/dynamicfees/v1/query.proto b/proto/neutron/dynamicfees/v1/query.proto new file mode 100644 index 000000000..aa717bf96 --- /dev/null +++ b/proto/neutron/dynamicfees/v1/query.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package neutron.dynamicfees.v1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "neutron/dynamicfees/v1/params.proto"; + +option go_package = "github.com/neutron-org/neutron/v4/x/dynamicfees/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/neutron/dynamicfees/v1/params"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [(gogoproto.nullable) = false]; +} diff --git a/proto/neutron/dynamicfees/v1/tx.proto b/proto/neutron/dynamicfees/v1/tx.proto new file mode 100644 index 000000000..dd02203df --- /dev/null +++ b/proto/neutron/dynamicfees/v1/tx.proto @@ -0,0 +1,38 @@ +syntax = "proto3"; +package neutron.dynamicfees.v1; + +import "amino/amino.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "neutron/dynamicfees/v1/params.proto"; + +option go_package = "github.com/neutron-org/neutron/v4/x/dynamicfees/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the MsgUpdateParams request type. +message MsgUpdateParams { + option (amino.name) = "dynamicfees/MsgUpdateParams"; + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address of the governance account. + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/dynamicfees parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} diff --git a/proto/neutron/transfer/v1/tx.proto b/proto/neutron/transfer/v1/tx.proto index 6710b954b..49ff17e6f 100644 --- a/proto/neutron/transfer/v1/tx.proto +++ b/proto/neutron/transfer/v1/tx.proto @@ -5,6 +5,7 @@ package neutron.transfer; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/msg/v1/msg.proto"; import "gogoproto/gogo.proto"; +import "ibc/applications/transfer/v1/transfer.proto"; import "ibc/core/client/v1/client.proto"; import "neutron/feerefunder/fee.proto"; @@ -16,6 +17,9 @@ service Msg { // Transfer defines a rpc handler method for MsgTransfer. rpc Transfer(MsgTransfer) returns (MsgTransferResponse); + + // UpdateParams defines a rpc handler for MsgUpdateParams. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); } message MsgTransfer { @@ -56,3 +60,22 @@ message MsgTransferResponse { // channel src channel on neutron side transaction was submitted from string channel = 2; } + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + // signer address + string signer = 1; + + // params defines the transfer parameters to update. + // + // NOTE: All parameters must be supplied. + ibc.applications.transfer.v1.Params params = 2 [(gogoproto.nullable) = false]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} diff --git a/proto/osmosis/tokenfactory/params.proto b/proto/osmosis/tokenfactory/params.proto new file mode 100644 index 000000000..563a17a4f --- /dev/null +++ b/proto/osmosis/tokenfactory/params.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package osmosis.tokenfactory; + +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; + +// WhitelistedHook describes a beforeSendHook which is allowed to be added and executed +// SetBeforeSendHook can only be called on denoms where the denom creator and +// code_id for the `contract_addr` match a WhitelistedHook +message WhitelistedHook { + uint64 code_id = 1 [(gogoproto.customname) = "CodeID"]; + string denom_creator = 2; +} + +// Params defines the parameters for the tokenfactory module. +message Params { + // DenomCreationFee defines the fee to be charged on the creation of a new + // denom. The fee is drawn from the MsgCreateDenom's sender account, and + // transferred to the community pool. + repeated cosmos.base.v1beta1.Coin denom_creation_fee = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"denom_creation_fee\"", + (gogoproto.nullable) = false + ]; + + // DenomCreationGasConsume defines the gas cost for creating a new denom. + // This is intended as a spam deterrence mechanism. + // + // See: https://github.com/CosmWasm/token-factory/issues/11 + uint64 denom_creation_gas_consume = 2 [ + (gogoproto.moretags) = "yaml:\"denom_creation_gas_consume\"", + (gogoproto.nullable) = true + ]; + + // FeeCollectorAddress is the address where fees collected from denom creation + // are sent to + string fee_collector_address = 3; + // whitelisted_hooks is the list of hooks which are allowed to be added and executed + repeated WhitelistedHook whitelisted_hooks = 4; +} diff --git a/proto/osmosis/tokenfactory/v1beta1/genesis.proto b/proto/osmosis/tokenfactory/v1beta1/genesis.proto index a7d695544..82bb3c52a 100644 --- a/proto/osmosis/tokenfactory/v1beta1/genesis.proto +++ b/proto/osmosis/tokenfactory/v1beta1/genesis.proto @@ -2,8 +2,8 @@ syntax = "proto3"; package osmosis.tokenfactory.v1beta1; import "gogoproto/gogo.proto"; +import "osmosis/tokenfactory/params.proto"; import "osmosis/tokenfactory/v1beta1/authorityMetadata.proto"; -import "osmosis/tokenfactory/v1beta1/params.proto"; option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; @@ -29,4 +29,6 @@ message GenesisDenom { (gogoproto.moretags) = "yaml:\"authority_metadata\"", (gogoproto.nullable) = false ]; + + string hook_contract_address = 3 [(gogoproto.nullable) = true]; } diff --git a/proto/osmosis/tokenfactory/v1beta1/params.proto b/proto/osmosis/tokenfactory/v1beta1/params.proto index 08d702017..e7e8b1b7a 100644 --- a/proto/osmosis/tokenfactory/v1beta1/params.proto +++ b/proto/osmosis/tokenfactory/v1beta1/params.proto @@ -5,7 +5,7 @@ import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; +option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types/v1beta1"; // Params defines the parameters for the tokenfactory module. message Params { diff --git a/proto/osmosis/tokenfactory/v1beta1/query.proto b/proto/osmosis/tokenfactory/v1beta1/query.proto index b01ab2344..d7b4d6f8d 100644 --- a/proto/osmosis/tokenfactory/v1beta1/query.proto +++ b/proto/osmosis/tokenfactory/v1beta1/query.proto @@ -3,8 +3,8 @@ package osmosis.tokenfactory.v1beta1; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; +import "osmosis/tokenfactory/params.proto"; import "osmosis/tokenfactory/v1beta1/authorityMetadata.proto"; -import "osmosis/tokenfactory/v1beta1/params.proto"; option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; diff --git a/proto/osmosis/tokenfactory/v1beta1/tx.proto b/proto/osmosis/tokenfactory/v1beta1/tx.proto index 2cf3f7fb7..e122fe71f 100644 --- a/proto/osmosis/tokenfactory/v1beta1/tx.proto +++ b/proto/osmosis/tokenfactory/v1beta1/tx.proto @@ -7,7 +7,7 @@ import "cosmos/base/v1beta1/coin.proto"; import "cosmos/msg/v1/msg.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -import "osmosis/tokenfactory/v1beta1/params.proto"; +import "osmosis/tokenfactory/params.proto"; option go_package = "github.com/neutron-org/neutron/v4/x/tokenfactory/types"; diff --git a/scripts/protoc-swagger-gen.sh b/scripts/protoc-swagger-gen.sh index 32dfda70d..370812c7f 100755 --- a/scripts/protoc-swagger-gen.sh +++ b/scripts/protoc-swagger-gen.sh @@ -9,9 +9,11 @@ mkdir -p tmp_deps #copy some deps to use their proto files to generate swagger declare -a deps=("github.com/cosmos/cosmos-sdk" "github.com/CosmWasm/wasmd" - "github.com/cosmos/admin-module" + "github.com/cosmos/admin-module/v2" "github.com/cosmos/interchain-security/v5" "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8" + "github.com/skip-mev/feemarket" + "github.com/skip-mev/slinky" "github.com/skip-mev/block-sdk/v2") for dep in "${deps[@]}" diff --git a/tests/e2e/interchain_security_test.go b/tests/e2e/interchain_security_test.go index 2667325cf..81201ab12 100644 --- a/tests/e2e/interchain_security_test.go +++ b/tests/e2e/interchain_security_test.go @@ -5,13 +5,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" appProvider "github.com/cosmos/interchain-security/v5/app/provider" + e2e "github.com/cosmos/interchain-security/v5/tests/integration" icssimapp "github.com/cosmos/interchain-security/v5/testutil/ibc_testing" "github.com/stretchr/testify/suite" - e2e "github.com/cosmos/interchain-security/v5/tests/integration" - appConsumer "github.com/neutron-org/neutron/v4/app" - appparams "github.com/neutron-org/neutron/v4/app/params" "github.com/neutron-org/neutron/v4/testutil" ) diff --git a/tests/feemarket/e2e_test.go b/tests/feemarket/e2e_test.go new file mode 100644 index 000000000..a79fdbddd --- /dev/null +++ b/tests/feemarket/e2e_test.go @@ -0,0 +1,146 @@ +package feemarket_test + +import ( + "fmt" + "strconv" + "strings" + "testing" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module/testutil" + "github.com/cosmos/cosmos-sdk/x/auth" + "github.com/cosmos/cosmos-sdk/x/bank" + "github.com/cosmos/cosmos-sdk/x/gov" + "github.com/skip-mev/feemarket/tests/e2e" + feemarketmodule "github.com/skip-mev/feemarket/x/feemarket" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" + marketmapmodule "github.com/skip-mev/slinky/x/marketmap" + "github.com/skip-mev/slinky/x/oracle" + interchaintest "github.com/strangelove-ventures/interchaintest/v8" + "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/stretchr/testify/suite" +) + +func init() { + cfg := sdk.GetConfig() + cfg.SetBech32PrefixForAccount("neutron", "neutronpub") + cfg.Seal() +} + +var ( + minBaseGasPrice = sdkmath.LegacyMustNewDecFromStr("0.001") + baseGasPrice = sdkmath.LegacyMustNewDecFromStr("0.01") + + image = ibc.DockerImage{ + Repository: "neutron-node", + Version: "latest", + UidGid: "1025:1025", + } + + oracleImage = ibc.DockerImage{ + Repository: "ghcr.io/skip-mev/slinky-sidecar", + Version: "latest", + UidGid: "1000:1000", + } + + numValidators = 4 + numFullNodes = 0 + noHostMount = false + gasAdjustment = 2.0 + + encodingConfig = testutil.MakeTestEncodingConfig( + bank.AppModuleBasic{}, + oracle.AppModuleBasic{}, + gov.AppModuleBasic{}, + auth.AppModuleBasic{}, + feemarketmodule.AppModuleBasic{}, + marketmapmodule.AppModuleBasic{}, + ) + + defaultGenesisKV = []cosmos.GenesisKV{ + { + Key: "consensus.params.abci.vote_extensions_enable_height", + Value: "2", + }, + { + Key: "consensus.params.block.max_gas", + Value: strconv.Itoa(int(feemarkettypes.DefaultMaxBlockUtilization)), + }, + { + Key: "app_state.feemarket.params", + Value: feemarkettypes.Params{ + Alpha: feemarkettypes.DefaultAlpha, + Beta: feemarkettypes.DefaultBeta, + Gamma: feemarkettypes.DefaultAIMDGamma, + Delta: feemarkettypes.DefaultDelta, + MinBaseGasPrice: minBaseGasPrice, + MinLearningRate: feemarkettypes.DefaultMinLearningRate, + MaxLearningRate: feemarkettypes.DefaultMaxLearningRate, + MaxBlockUtilization: 15_000_000, + Window: feemarkettypes.DefaultWindow, + FeeDenom: denom, + Enabled: true, + DistributeFees: false, + }, + }, + { + Key: "app_state.feemarket.state", + Value: feemarkettypes.State{ + BaseGasPrice: baseGasPrice, + LearningRate: feemarkettypes.DefaultMaxLearningRate, + Window: make([]uint64, feemarkettypes.DefaultWindow), + Index: 0, + }, + }, + } + + denom = "untrn" + spec = &interchaintest.ChainSpec{ + ChainName: "feemarket", + Name: "feemarket", + NumValidators: &numValidators, + NumFullNodes: &numFullNodes, + Version: "latest", + NoHostMount: &noHostMount, + ChainConfig: ibc.ChainConfig{ + EncodingConfig: &encodingConfig, + Images: []ibc.DockerImage{ + image, + }, + Type: "cosmos", + Name: "feemarket", + Denom: denom, + ChainID: "chain-id-feemarket", + Bin: "neutrond", + Bech32Prefix: "neutron", + CoinType: "118", + GasAdjustment: gasAdjustment, + GasPrices: fmt.Sprintf("10%s", denom), + TrustingPeriod: "48h", + NoHostMount: noHostMount, + ModifyGenesis: cosmos.ModifyGenesis(defaultGenesisKV), + SkipGenTx: true, + }, + } + + txCfg = e2e.TestTxConfig{ + SmallSendsNum: 1, + LargeSendsNum: 325, + TargetIncreaseGasPrice: sdkmath.LegacyMustNewDecFromStr("0.0011"), + } +) + +func TestE2ETestSuite(t *testing.T) { + s := e2e.NewIntegrationSuite( + spec, + oracleImage, + txCfg, + e2e.WithInterchainConstructor(e2e.CCVInterchainConstructor), + e2e.WithChainConstructor(e2e.CCVChainConstructor), + e2e.WithDenom(denom), + e2e.WithGasPrices(strings.Join([]string{"0.0uatom"}, ",")), + ) + suite.Run(t, s) +} diff --git a/tests/feemarket/go.mod b/tests/feemarket/go.mod new file mode 100644 index 000000000..01f5d008d --- /dev/null +++ b/tests/feemarket/go.mod @@ -0,0 +1,273 @@ +module github.com/neutron-org/neutron/v4/tests/feemarket + +go 1.22.3 + +replace ( + cosmossdk.io/core => cosmossdk.io/core v0.11.0 + github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d + github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 + github.com/docker/distribution => github.com/docker/distribution v2.8.2+incompatible + github.com/docker/docker => github.com/docker/docker v24.0.9+incompatible + github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + github.com/strangelove-ventures/interchaintest/v8 => github.com/skip-mev/interchaintest/v8 v8.0.1-0.20240611183342-72ec508eb966 + github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 +) + +require ( + cosmossdk.io/math v1.3.0 + github.com/cosmos/cosmos-sdk v0.50.7 + github.com/skip-mev/feemarket v1.0.1 + github.com/skip-mev/feemarket/tests/e2e v1.10.0 + github.com/skip-mev/slinky v1.0.0 + github.com/strangelove-ventures/interchaintest/v8 v8.4.0 + github.com/stretchr/testify v1.9.0 +) + +require ( + cloud.google.com/go v0.114.0 // indirect + cloud.google.com/go/auth v0.5.1 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect + cloud.google.com/go/compute/metadata v0.3.0 // indirect + cloud.google.com/go/iam v1.1.8 // indirect + cloud.google.com/go/storage v1.41.0 // indirect + cosmossdk.io/api v0.7.5 // indirect + cosmossdk.io/collections v0.4.0 // indirect + cosmossdk.io/core v0.11.0 // indirect + cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/errors v1.0.1 // indirect + cosmossdk.io/log v1.3.1 // indirect + cosmossdk.io/store v1.1.0 // indirect + cosmossdk.io/x/evidence v0.1.1 // indirect + cosmossdk.io/x/feegrant v0.1.1 // indirect + cosmossdk.io/x/tx v0.13.3 // indirect + cosmossdk.io/x/upgrade v0.1.3 // 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.2 // indirect + github.com/BurntSushi/toml v1.4.0 // indirect + github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect + github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect + github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect + github.com/DataDog/datadog-go v3.2.0+incompatible // indirect + github.com/DataDog/zstd v1.5.5 // indirect + github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect + github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect + github.com/avast/retry-go/v4 v4.5.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.1.1-0.20220910012023-760eaf8b6816 // indirect + github.com/bits-and-blooms/bitset v1.13.0 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cespare/xxhash v1.1.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chzyer/readline v1.5.1 // indirect + github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble v1.1.0 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/cometbft/cometbft v0.38.7 // indirect + github.com/cometbft/cometbft-db v0.11.0 // indirect + github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/cosmos-db v1.0.2 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect + github.com/cosmos/go-bip39 v1.0.0 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/gogoproto v1.5.0 // indirect + github.com/cosmos/iavl v1.1.2 // indirect + github.com/cosmos/ibc-go/modules/capability v1.0.0 // indirect + github.com/cosmos/ibc-go/v8 v8.2.1 // indirect + github.com/cosmos/ics23/go v0.10.0 // indirect + github.com/cosmos/interchain-security/v5 v5.0.0 // indirect + github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect + github.com/danieljoos/wincred v1.2.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/deckarep/golang-set v1.8.0 // indirect + github.com/decred/base58 v1.0.4 // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect + github.com/dgraph-io/badger/v2 v2.2007.4 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/docker v24.0.9+incompatible // indirect + github.com/docker/go-connections v0.5.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dvsekhvalnov/jose2go v1.7.0 // indirect + github.com/emicklei/dot v1.6.2 // indirect + github.com/ethereum/go-ethereum v1.14.4 // indirect + github.com/fatih/color v1.17.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // 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/gobwas/httphead v0.1.0 // indirect + github.com/gobwas/pool v0.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.3 // indirect + github.com/golang/glog v1.2.1 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect + github.com/google/btree v1.1.2 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/orderedcode v0.0.1 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.12.4 // indirect + github.com/gorilla/handlers v1.5.2 // indirect + github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/websocket v1.5.1 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/gtank/merlin v0.1.1 // indirect + github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.7.4 // indirect + github.com/hashicorp/go-hclog v1.5.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-metrics v0.5.3 // indirect + github.com/hashicorp/go-plugin v1.5.2 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/yamux v0.1.1 // indirect + github.com/hdevalence/ed25519consensus v0.1.0 // indirect + github.com/holiman/uint256 v1.2.4 // indirect + github.com/huandu/skiplist v1.2.0 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect + github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 // 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.4.1 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/klauspost/compress v1.17.8 // indirect + github.com/klauspost/cpuid/v2 v2.2.7 // 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/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/libp2p/go-libp2p v0.31.0 // indirect + github.com/linxGnu/grocksdb v1.8.14 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/manifoldco/promptui v0.9.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect + github.com/minio/highwayhash v1.0.2 // indirect + github.com/minio/sha256-simd v1.0.1 // indirect + github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230913220906-b988ea7da0c2 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mr-tron/base58 v1.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.11.0 // indirect + github.com/multiformats/go-multibase v0.2.0 // indirect + github.com/multiformats/go-multicodec v0.9.0 // indirect + github.com/multiformats/go-multihash v0.2.3 // indirect + github.com/multiformats/go-varint v0.0.7 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect + github.com/oklog/run v1.1.0 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/opencontainers/runc v1.1.12 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect + github.com/pierrec/xxHash v0.1.5 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.52.2 // indirect + github.com/prometheus/procfs v0.13.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/rs/cors v1.8.3 // indirect + github.com/rs/zerolog v1.32.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/skip-mev/chaintestutil v0.0.0-20240514161515-056d7ba45610 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect + github.com/spf13/cobra v1.8.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.19.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/tyler-smith/go-bip32 v1.0.0 // indirect + github.com/tyler-smith/go-bip39 v1.1.0 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v0.14.3 // indirect + go.etcd.io/bbolt v1.3.8 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.26.0 // indirect + go.opentelemetry.io/otel/metric v1.26.0 // indirect + go.opentelemetry.io/otel/trace v1.26.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/crypto v0.24.0 // indirect + golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect + golang.org/x/mod v0.18.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/oauth2 v0.20.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect + golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.22.0 // indirect + google.golang.org/api v0.180.0 // indirect + google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect + google.golang.org/grpc v1.64.0 // indirect + google.golang.org/protobuf v1.34.1 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + gotest.tools/v3 v3.5.1 // indirect + lukechampine.com/blake3 v1.2.1 // indirect + modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect + modernc.org/libc v1.49.3 // indirect + modernc.org/mathutil v1.6.0 // indirect + modernc.org/memory v1.8.0 // indirect + modernc.org/sqlite v1.29.9 // indirect + modernc.org/strutil v1.2.0 // indirect + modernc.org/token v1.1.0 // indirect + nhooyr.io/websocket v1.8.7 // indirect + pgregory.net/rapid v1.1.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) diff --git a/tests/feemarket/go.sum b/tests/feemarket/go.sum new file mode 100644 index 000000000..331dc0e1e --- /dev/null +++ b/tests/feemarket/go.sum @@ -0,0 +1,1879 @@ +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.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.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.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.114.0 h1:OIPFAdfrFDFO2ve2U7r/H5SwSbBzEdrBdE7xkgwc+kY= +cloud.google.com/go v0.114.0/go.mod h1:ZV9La5YYxctro1HTPug5lXH/GefROyW8PPD4T8n9J8E= +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/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/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/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/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/auth v0.5.1 h1:0QNO7VThG54LUzKiQxv8C6x1YX7lUrzlAa1nVLF8CIw= +cloud.google.com/go/auth v0.5.1/go.mod h1:vbZT8GjzDf3AVqCcQmqeeM32U9HBFc32vVVAbwDsa6s= +cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= +cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= +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/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/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/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/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/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/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= +cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/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/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/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/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/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/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/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/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/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +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 v1.1.8 h1:r7umDwhj+BQyz0ScZMp4QrGXjSTI3ZINnpgU2nlB/K0= +cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE= +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/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/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/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/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/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/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/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/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/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/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/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/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/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/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +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/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +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/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/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.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.41.0 h1:RusiwatSu6lHeEXe3kglxakAmAbfV+rhtPqA6i8RBx0= +cloud.google.com/go/storage v1.41.0/go.mod h1:J1WCa/Z2FcgdEDuPUY8DxT5I+d9mFKsCepp5vR6Sq80= +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/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/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/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/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= +cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= +cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= +cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= +cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= +cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= +cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= +cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= +cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= +cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= +cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= +cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= +cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= +cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= +cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= +cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= +cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= +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.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= +cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= +cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= +cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= +cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= +cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= +cosmossdk.io/x/upgrade v0.1.3 h1:q4XpXc6zp0dX6x74uBtfN6+J7ikaQev5Bla6Q0ADLK8= +cosmossdk.io/x/upgrade v0.1.3/go.mod h1:jOdQhnaY5B8CDUoUbed23/Lre0Dk+r6BMQE40iKlVVQ= +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= +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/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/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= +github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= +github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= +github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= +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.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= +github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= +github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= +github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc= +github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U= +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 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= +github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +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/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +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/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-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/avast/retry-go/v4 v4.5.1 h1:AxIx0HGi4VZ3I02jr78j5lZ3M6x1E0Ivxa6b0pUUh7o= +github.com/avast/retry-go/v4 v4.5.1/go.mod h1:/sipNsvNB3RRuT5iNcb6h73nw3IBmXJ/H3XrCQYSOpc= +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.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= +github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= +github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= +github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= +github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= +github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= +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/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.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/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/cmars/basen v0.0.0-20150613233007-fe3947df716e h1:0XBUw73chJ1VYSsfvcPvVT7auykAJce9FpRr10L6Qhw= +github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q18lJe1rIoLUqjM+CB1zYrRg44ZqGuQSA= +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/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/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.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= +github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= +github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +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.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= +github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/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.7 h1:ULhIOJ9+LgSy6nLekhq9ae3juX3NnQUMMPyVdhZV6Hk= +github.com/cometbft/cometbft v0.38.7/go.mod h1:HIyf811dFMI73IE0F7RrnY/Fr+d1+HuJAgtkEpQjCMY= +github.com/cometbft/cometbft-db v0.11.0 h1:M3Lscmpogx5NTbb1EGyGDaFRdsoLWrUWimFEyf7jej8= +github.com/cometbft/cometbft-db v0.11.0/go.mod h1:GDPJAC/iFHNjmZZPN8V8C1yr/eyityhi2W1hz2MGKSc= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +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.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= +github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= +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.50.7 h1:LsBGKxifENR/DN4E1RZaitsyL93HU44x0p8EnMHp4V4= +github.com/cosmos/cosmos-sdk v0.50.7/go.mod h1:84xDDJEHttRT7NDGwBaUOLVOMN0JNE9x7NbsYIxXs1s= +github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= +github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= +github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= +github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= +github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= +github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/iavl v1.1.2 h1:zL9FK7C4L/P4IF1Dm5fIwz0WXCnn7Bp1M2FxH0ayM7Y= +github.com/cosmos/iavl v1.1.2/go.mod h1:jLeUvm6bGT1YutCaL2fIar/8vGUE8cPZvh/gXEWDaDM= +github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= +github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= +github.com/cosmos/ibc-go/v8 v8.2.1 h1:MTsnZZjxvGD4Fv5pYyx5UkELafSX0rlPt6IfsE2BpTQ= +github.com/cosmos/ibc-go/v8 v8.2.1/go.mod h1:wj3qx75iC/XNnsMqbPDCIGs0G6Y3E/lo3bdqCyoCy+8= +github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= +github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= +github.com/cosmos/interchain-security/v5 v5.0.0 h1:iwHu1nFbXuYfa13isEgm6hkHU+2t/t56YjcfyP3PnQA= +github.com/cosmos/interchain-security/v5 v5.0.0/go.mod h1:h/RkwOppo5AJj+1pkQyfjqU1MPdpohD/S6oEeAXpGZY= +github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= +github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +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.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= +github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= +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/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +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/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= +github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= +github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= +github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= +github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +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/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= +github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +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/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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ethereum/go-ethereum v1.14.4 h1:AI1778nnI9vb3eCcLo6XTw/lqp6ilVHQmbWmJOUHGU8= +github.com/ethereum/go-ethereum v1.14.4/go.mod h1:VEDGGhSxY7IEjn98hJRFXl/uFvpRgbIIf2PpXiyGGgc= +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.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.14.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.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +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.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +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-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-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-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= +github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= +github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk= +github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= +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/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4= +github.com/golang/glog v1.2.1/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.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 v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/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.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +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 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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.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-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/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= +github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +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.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +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.12.4 h1:9gWcmF85Wvq4ryPFvGFaOgPIs1AQX0d0bcbGw4Z96qg= +github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +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.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +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/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= +github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= +github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= +github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/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.4 h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0= +github.com/hashicorp/go-getter v1.7.4/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= +github.com/hashicorp/go-hclog v1.5.0/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.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE= +github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= +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.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= +github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= +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/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +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.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.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/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/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.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= +github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +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/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= +github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= +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/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= +github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= +github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= +github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= +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.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/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/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.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= +github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +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/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.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/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/libp2p/go-libp2p v0.31.0 h1:LFShhP8F6xthWiBBq3euxbKjZsoRajVEyBS9snfHxYg= +github.com/libp2p/go-libp2p v0.31.0/go.mod h1:W/FEK1c/t04PbRH3fA9i5oucu5YcgrG0JVoBWT1B7Eg= +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-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/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 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +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/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/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= +github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230913220906-b988ea7da0c2 h1:G/cVeTAbB9S/6FSWWqpFV0v49hiuHLbJPu9hTZ0UR2A= +github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230913220906-b988ea7da0c2/go.mod h1:Q5BxOd9FxJqYp4vCiLGVdetecPcWTmUQIu0bRigYosU= +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/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +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/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +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.11.0 h1:XqGyJ8ufbCE0HmTDwx2kPdsrQ36AGPZNZX6s6xfJH10= +github.com/multiformats/go-multiaddr v0.11.0/go.mod h1:gWUm0QLR4thQ6+ZF6SXUw8YjtwQSPapICM+NmCkxHSM= +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.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= +github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= +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-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/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/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/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.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +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/oxyno-zeta/gomock-extra-matcher v1.2.0 h1:WPEclU0y0PMwUzdDcaKZvld4aXpa3fkzjiUMQdcBEHg= +github.com/oxyno-zeta/gomock-extra-matcher v1.2.0/go.mod h1:S0r7HmKeCGsHmvIVFMjKWwswb4+30nCNWbXRMBVPkaU= +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 v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU= +github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/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/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= +github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +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/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.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +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.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.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= +github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= +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.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= +github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= +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/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/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.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= +github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= +github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +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/skip-mev/chaintestutil v0.0.0-20240514161515-056d7ba45610 h1:4JlsiRVt/YZOvrKH525T7sZXgEWUEjqSDMwE6fXNbdo= +github.com/skip-mev/chaintestutil v0.0.0-20240514161515-056d7ba45610/go.mod h1:kB8gFZX07CyJnw8q9iEZijI3qJTIe1K/Y++P5VGkrcg= +github.com/skip-mev/feemarket v1.0.1 h1:Bkn7ELhaqYppki1c9eWQw3fEYsGXXeHng9VxD4AdMBY= +github.com/skip-mev/feemarket v1.0.1/go.mod h1:52iSehc6mb98xPhRYRqg4crAIxz32RWTbK/LXOwRuf4= +github.com/skip-mev/feemarket/tests/e2e v1.10.0 h1:oKAZSo+rynd2b7+T8/U+4C+h//rrTdjLICG2Awjk8YA= +github.com/skip-mev/feemarket/tests/e2e v1.10.0/go.mod h1:57BURopGhr+L0zDkhj1E9jzP9W8rMzRb3b+MT+trlB4= +github.com/skip-mev/interchaintest/v8 v8.0.1-0.20240611183342-72ec508eb966 h1:X5BD7m4QieHlORqGho1Af8r0O1GSWBRYO330xyu2kzQ= +github.com/skip-mev/interchaintest/v8 v8.0.1-0.20240611183342-72ec508eb966/go.mod h1:nfPgRi1yjnzi+qF+0Fs9qN9kkS1Fk0oqgpKvqg5a200= +github.com/skip-mev/slinky v1.0.0 h1:4sgHF1H8yrqNn3Uhuw+B11aWIavXgaSiZBZU5/BF/fs= +github.com/skip-mev/slinky v1.0.0/go.mod h1:XRNy7m51XOLtEWN5l3TyKyYkNUL7KL2tuTsYe17LYGE= +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/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +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.1.5-0.20170601210322-f6abca593680/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +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.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.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/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +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/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= +github.com/tyler-smith/go-bip32 v1.0.0/go.mod h1:onot+eHknzV4BVPwrzqY5OoVpyCvnwD7lMawL5aQupE= +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 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.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/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +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.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +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.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +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/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= +go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +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/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= +go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= +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= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/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-20181203042331-505ab145d0a9/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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-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-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/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-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-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.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-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-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-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.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +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-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= +golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +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-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-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-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-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-20210220050731-9a76102bfb43/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-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-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-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-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-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-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +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.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +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.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +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-20190114222345-bf090417da8b/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-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-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.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.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +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= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +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.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.180.0 h1:M2D87Yo0rGBPWpo1orwfCLehUUL6E7/TYe5gvMQWDh4= +google.golang.org/api v0.180.0/go.mod h1:51AiyoEg1MJPSZ9zvklA8VnRILPXxn1iVen9v25XHAE= +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-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +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-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-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-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-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda h1:wu/KJm9KJwpfHWhkkZGohVC6KRrc1oJNr4jwtQMOQXw= +google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda/go.mod h1:g2LLCvCeCSir/JJSWosk19BR4NVxGqHUC6rxIRsd7Aw= +google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3 h1:QW9+G6Fir4VcRXVH8x3LilNAb6cxBGLa6+GM4hRwexE= +google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3/go.mod h1:kdrSS/OiLkPrNUpzD4aHgCq2rVuC/YRxok32HXZ4vRE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +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.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.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +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.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +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/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +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.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= +lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= +lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= +modernc.org/cc/v4 v4.20.0 h1:45Or8mQfbUqJOG9WaxvlFYOAQO0lQ5RvqBcFCXngjxk= +modernc.org/cc/v4 v4.20.0/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/ccgo/v4 v4.16.0 h1:ofwORa6vx2FMm0916/CkZjpFPSR70VwTjUCe2Eg5BnA= +modernc.org/ccgo/v4 v4.16.0/go.mod h1:dkNyWIjFrVIZ68DTo36vHK+6/ShBn4ysU61So6PIqCI= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= +modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.49.3 h1:j2MRCRdwJI2ls/sGbeSk0t2bypOG/uvPZUsGQFDulqg= +modernc.org/libc v1.49.3/go.mod h1:yMZuGkn7pXbKfoT/M35gFJOAEdSKdxL0q64sF7KqCDo= +modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= +modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= +modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= +modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= +modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= +modernc.org/sqlite v1.29.9 h1:9RhNMklxJs+1596GNuAX+O/6040bvOwacTxuFcRuQow= +modernc.org/sqlite v1.29.9/go.mod h1:ItX2a1OVGgNsFh6Dv60JQvGfJfTPHPVpV6DF59akYOA= +modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= +modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= +nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +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/tests/slinky/go.mod b/tests/slinky/go.mod index 58ba36617..5042c0f05 100644 --- a/tests/slinky/go.mod +++ b/tests/slinky/go.mod @@ -13,16 +13,16 @@ replace ( ) require ( - github.com/cosmos/cosmos-sdk v0.50.6 - github.com/skip-mev/slinky v0.4.3 - github.com/skip-mev/slinky/tests/integration v1.0.0 - github.com/strangelove-ventures/interchaintest/v8 v8.3.1-0.20240510203915-0559b76de4fa + github.com/cosmos/cosmos-sdk v0.50.7 + github.com/skip-mev/slinky v1.0.3 + github.com/skip-mev/slinky/tests/integration v1.1.1-0.20240614013955-8d008bc600dd + github.com/strangelove-ventures/interchaintest/v8 v8.4.0 github.com/stretchr/testify v1.9.0 ) require ( - cloud.google.com/go v0.113.0 // indirect - cloud.google.com/go/auth v0.4.1 // indirect + cloud.google.com/go v0.114.0 // indirect + cloud.google.com/go/auth v0.5.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.8 // indirect @@ -38,11 +38,11 @@ require ( cosmossdk.io/x/evidence v0.1.1 // indirect cosmossdk.io/x/feegrant v0.1.1 // indirect cosmossdk.io/x/tx v0.13.3 // indirect - cosmossdk.io/x/upgrade v0.1.2 // indirect + cosmossdk.io/x/upgrade v0.1.3 // 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.2 // indirect - github.com/BurntSushi/toml v1.3.2 // indirect + github.com/BurntSushi/toml v1.4.0 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect @@ -53,7 +53,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect github.com/avast/retry-go/v4 v4.6.0 // indirect - github.com/aws/aws-sdk-go v1.53.1 // indirect + github.com/aws/aws-sdk-go v1.53.18 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect @@ -63,7 +63,7 @@ require ( 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/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect @@ -75,10 +75,10 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.12 // indirect + github.com/cosmos/gogoproto v1.5.0 // indirect github.com/cosmos/iavl v1.2.0 // indirect github.com/cosmos/ibc-go/modules/capability v1.0.0 // indirect - github.com/cosmos/ibc-go/v8 v8.2.1 // indirect + github.com/cosmos/ibc-go/v8 v8.3.1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/interchain-security/v5 v5.0.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect @@ -99,15 +99,15 @@ require ( github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.7.0 // indirect github.com/emicklei/dot v1.6.2 // indirect - github.com/ethereum/go-ethereum v1.14.3 // indirect + github.com/ethereum/go-ethereum v1.14.5 // indirect github.com/fatih/color v1.17.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/getsentry/sentry-go v0.27.0 // indirect + github.com/getsentry/sentry-go v0.28.0 // 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.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect @@ -127,7 +127,7 @@ require ( github.com/googleapis/gax-go/v2 v2.12.4 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.1 // indirect + github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect @@ -140,7 +140,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect @@ -155,14 +155,14 @@ require ( github.com/ipfs/go-cid v0.4.1 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.8 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // 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/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-libp2p v0.33.2 // indirect - github.com/linxGnu/grocksdb v1.8.14 // indirect + github.com/libp2p/go-libp2p v0.35.0 // indirect + github.com/linxGnu/grocksdb v1.9.1 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -178,7 +178,7 @@ require ( 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.12.3 // indirect + github.com/multiformats/go-multiaddr v0.12.4 // indirect github.com/multiformats/go-multibase v0.2.0 // indirect github.com/multiformats/go-multicodec v0.9.0 // indirect github.com/multiformats/go-multihash v0.2.3 // indirect @@ -190,29 +190,29 @@ require ( github.com/opencontainers/image-spec v1.1.0 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect - github.com/petermattis/goid v0.0.0-20240503122002-4b96552b8156 // indirect + github.com/petermattis/goid v0.0.0-20240607143657-69a810704514 // indirect github.com/pierrec/xxHash v0.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.19.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.53.0 // indirect - github.com/prometheus/procfs v0.15.0 // indirect + github.com/prometheus/common v0.54.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.11.0 // indirect - github.com/rs/zerolog v1.32.0 // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/rs/zerolog v1.33.0 // indirect + github.com/sagikazarmark/locafero v0.6.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect - github.com/spf13/cobra v1.8.0 // indirect + github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.18.2 // indirect + github.com/spf13/viper v1.19.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 @@ -224,31 +224,31 @@ require ( github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.4.0-alpha.1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 // indirect - go.opentelemetry.io/otel v1.26.0 // indirect - go.opentelemetry.io/otel/metric v1.26.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 // indirect + go.opentelemetry.io/otel v1.27.0 // indirect + go.opentelemetry.io/otel/metric v1.27.0 // indirect go.opentelemetry.io/otel/sdk v1.26.0 // indirect - go.opentelemetry.io/otel/trace v1.26.0 // indirect + go.opentelemetry.io/otel/trace v1.27.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/oauth2 v0.20.0 // indirect + golang.org/x/crypto v0.24.0 // indirect + golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 // indirect + golang.org/x/mod v0.18.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/term v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.21.0 // indirect - google.golang.org/api v0.180.0 // indirect - google.golang.org/genproto v0.0.0-20240513163218-0867130af1f8 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 // indirect - google.golang.org/grpc v1.63.2 // indirect - google.golang.org/protobuf v1.34.1 // indirect + golang.org/x/tools v0.22.0 // indirect + google.golang.org/api v0.183.0 // indirect + google.golang.org/genproto v0.0.0-20240604185151-ef581f913117 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect + google.golang.org/grpc v1.64.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect @@ -256,10 +256,10 @@ require ( gotest.tools/v3 v3.5.1 // indirect lukechampine.com/blake3 v1.3.0 // indirect modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b // indirect - modernc.org/libc v1.50.5 // indirect + modernc.org/libc v1.52.1 // indirect modernc.org/mathutil v1.6.0 // indirect modernc.org/memory v1.8.0 // indirect - modernc.org/sqlite v1.29.9 // indirect + modernc.org/sqlite v1.30.0 // indirect modernc.org/strutil v1.2.0 // indirect modernc.org/token v1.1.0 // indirect nhooyr.io/websocket v1.8.11 // indirect diff --git a/tests/slinky/go.sum b/tests/slinky/go.sum index 8efc28b1c..46887e81a 100644 --- a/tests/slinky/go.sum +++ b/tests/slinky/go.sum @@ -30,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 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.113.0 h1:g3C70mn3lWfckKBiCVsAshabrDg01pQ0pnX1MNtnMkA= -cloud.google.com/go v0.113.0/go.mod h1:glEqlogERKYeePz6ZdkcLJ28Q2I6aERgDDErBg9GzO8= +cloud.google.com/go v0.114.0 h1:OIPFAdfrFDFO2ve2U7r/H5SwSbBzEdrBdE7xkgwc+kY= +cloud.google.com/go v0.114.0/go.mod h1:ZV9La5YYxctro1HTPug5lXH/GefROyW8PPD4T8n9J8E= 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/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -46,8 +46,8 @@ cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjby 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/auth v0.4.1 h1:Z7YNIhlWRtrnKlZke7z3GMqzvuYzdc2z98F9D1NV5Hg= -cloud.google.com/go/auth v0.4.1/go.mod h1:QVBuVEKpCn4Zp58hzRGvL0tjRGU0YqdRTdCHM1IHnro= +cloud.google.com/go/auth v0.5.1 h1:0QNO7VThG54LUzKiQxv8C6x1YX7lUrzlAa1nVLF8CIw= +cloud.google.com/go/auth v0.5.1/go.mod h1:vbZT8GjzDf3AVqCcQmqeeM32U9HBFc32vVVAbwDsa6s= cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -204,16 +204,16 @@ cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= -cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= -cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= +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.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4= cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc= cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8= cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ= cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= -cosmossdk.io/x/upgrade v0.1.2 h1:O2FGb0mVSXl7P6BQm9uV3hRVKom1zBLDGhd4G8jysJg= -cosmossdk.io/x/upgrade v0.1.2/go.mod h1:P+e4/ZNd8km7lTAX5hC2pXz/042YDcB7gzKTHuY53nc= +cosmossdk.io/x/upgrade v0.1.3 h1:q4XpXc6zp0dX6x74uBtfN6+J7ikaQev5Bla6Q0ADLK8= +cosmossdk.io/x/upgrade v0.1.3/go.mod h1:jOdQhnaY5B8CDUoUbed23/Lre0Dk+r6BMQE40iKlVVQ= 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= @@ -224,8 +224,8 @@ github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTB 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/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= @@ -277,8 +277,8 @@ github.com/avast/retry-go/v4 v4.6.0/go.mod h1:gvWlPhBVsvBbLkVGDg/KwvBv0bEkCOLRRS 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.53.1 h1:15/i0m9rE8r1q3P4ooHCfZTJtkxwG2Dwqp9JhPaVbs0= -github.com/aws/aws-sdk-go v1.53.1/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.53.18 h1:BeMeCK5e3bDGJj675FhnO94zRci8O35ombWXRvYomJs= +github.com/aws/aws-sdk-go v1.53.18/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= 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= @@ -353,8 +353,8 @@ github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOG 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= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +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/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.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= @@ -380,22 +380,22 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= 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.50.6 h1:efR3MsvMHX5sxS3be+hOobGk87IzlZbSpsI2x/Vw3hk= -github.com/cosmos/cosmos-sdk v0.50.6/go.mod h1:lVkRY6cdMJ0fG3gp8y4hFrsKZqF4z7y0M2UXFb9Yt40= +github.com/cosmos/cosmos-sdk v0.50.7 h1:LsBGKxifENR/DN4E1RZaitsyL93HU44x0p8EnMHp4V4= +github.com/cosmos/cosmos-sdk v0.50.7/go.mod h1:84xDDJEHttRT7NDGwBaUOLVOMN0JNE9x7NbsYIxXs1s= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= -github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= +github.com/cosmos/gogoproto v1.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= +github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= -github.com/cosmos/ibc-go/v8 v8.2.1 h1:MTsnZZjxvGD4Fv5pYyx5UkELafSX0rlPt6IfsE2BpTQ= -github.com/cosmos/ibc-go/v8 v8.2.1/go.mod h1:wj3qx75iC/XNnsMqbPDCIGs0G6Y3E/lo3bdqCyoCy+8= +github.com/cosmos/ibc-go/v8 v8.3.1 h1:cUNWvTCftKQIcpbf2y/jVzo2OY3g4GVFw6tTC/pQ+tA= +github.com/cosmos/ibc-go/v8 v8.3.1/go.mod h1:izwHZvn9lKrBn8xWj0aXWut6HKcwHMPD3uyuvOJoPSA= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/interchain-security/v5 v5.0.0 h1:iwHu1nFbXuYfa13isEgm6hkHU+2t/t56YjcfyP3PnQA= @@ -403,7 +403,7 @@ github.com/cosmos/interchain-security/v5 v5.0.0/go.mod h1:h/RkwOppo5AJj+1pkQyfjq github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= 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.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 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.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= @@ -415,8 +415,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= -github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +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/base58 v1.0.5 h1:hwcieUM3pfPnE/6p3J100zoRfGkQxBulZHo7GZfOqic= github.com/decred/base58 v1.0.5/go.mod h1:s/8lukEHFA6bUQQb/v3rjUySJ2hu+RioCzLukAVkrfw= github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= @@ -470,8 +470,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m 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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.14.3 h1:5zvnAqLtnCZrU9uod1JCvHWJbPMURzYFHfc2eHz4PHA= -github.com/ethereum/go-ethereum v1.14.3/go.mod h1:1STrq471D0BQbCX9He0hUj4bHxX2k6mt5nOQJhDNOJ8= +github.com/ethereum/go-ethereum v1.14.5 h1:szuFzO1MhJmweXjoM5nSAeDvjNUH3vIQoMzzQnfvjpw= +github.com/ethereum/go-ethereum v1.14.5/go.mod h1:VEDGGhSxY7IEjn98hJRFXl/uFvpRgbIIf2PpXiyGGgc= 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.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= @@ -489,8 +489,8 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -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/getsentry/sentry-go v0.28.0 h1:7Rqx9M3ythTKy2J6uZLHmc8Sz9OGgIlseuO1iBX/s0M= +github.com/getsentry/sentry-go v0.28.0/go.mod h1:1fQZ+7l7eeJ3wYi82q5Hg8GqAPgefRq+FP/QhafYVgg= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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= @@ -513,8 +513,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG 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.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +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-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= @@ -668,8 +668,8 @@ 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.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +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= @@ -716,8 +716,9 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= 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.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.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= @@ -787,8 +788,8 @@ github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6 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.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -806,12 +807,12 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-libp2p v0.33.2 h1:vCdwnFxoGOXMKmaGHlDSnL4bM3fQeW8pgIa9DECnb40= -github.com/libp2p/go-libp2p v0.33.2/go.mod h1:zTeppLuCvUIkT118pFVzA8xzP/p2dJYOMApCkFh0Yww= +github.com/libp2p/go-libp2p v0.35.0 h1:1xS1Bkr9X7GtdvV6ntLnDV9xB1kNjHK1lZ0eaO6gnhc= +github.com/libp2p/go-libp2p v0.35.0/go.mod h1:snyJQix4ET6Tj+LeI0VPjjxTtdWpeOhYt5lEY0KirkQ= 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/linxGnu/grocksdb v1.9.1 h1:LmwuHzsWglxJrIES9jvS2O1xTPD2nnKYhAQDx5dIyRo= +github.com/linxGnu/grocksdb v1.9.1/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= @@ -872,8 +873,8 @@ github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aG 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.12.3 h1:hVBXvPRcKG0w80VinQ23P5t7czWgg65BmIvQKjDydU8= -github.com/multiformats/go-multiaddr v0.12.3/go.mod h1:sBXrNzucqkFJhvKOiwwLyqamGa/P5EIXNPLovyhQCII= +github.com/multiformats/go-multiaddr v0.12.4 h1:rrKqpY9h+n80EwhhC/kkcunCZZ7URIF8yN1WEUt2Hvc= +github.com/multiformats/go-multiaddr v0.12.4/go.mod h1:sBXrNzucqkFJhvKOiwwLyqamGa/P5EIXNPLovyhQCII= 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.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= @@ -897,8 +898,9 @@ github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdh github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/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= @@ -951,8 +953,8 @@ github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6 github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20240503122002-4b96552b8156 h1:UOk0WKXxKXmHSlIkwQNhT5AWlMtkijU5pfj8bCOI9vQ= -github.com/petermattis/goid v0.0.0-20240503122002-4b96552b8156/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20240607143657-69a810704514 h1:EU0hN0X64NPlj0YVPM9Oqv5U6Y4NBHk2kGbzDaIdfi8= +github.com/petermattis/goid v0.0.0-20240607143657-69a810704514/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/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= @@ -991,16 +993,16 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+aLCE= -github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U= +github.com/prometheus/common v0.54.0 h1:ZlZy0BgJhTwVZUn7dLOkwCZHUkrAqd3WYtcFCWnM1D8= +github.com/prometheus/common v0.54.0/go.mod h1:/TQgMJP5CuVYveyT7n/0Ix8yLNNXy9yRSkhnLTHPDIQ= 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.15.0 h1:A82kmvXJq2jTu5YUhSGNlYoxh85zLnKgPz4bMZgI5Ek= -github.com/prometheus/procfs v0.15.0/go.mod h1:Y0RJ/Y5g5wJpkTisOtqwDSo4HwhGmLB4VQSw2sQJLHk= +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= @@ -1018,13 +1020,13 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= -github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= 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/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk= +github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= @@ -1042,10 +1044,10 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skip-mev/chaintestutil v0.0.0-20240116134208-3e49bf514803 h1:VRRVYN3wsOIOqVT3e3nDh3vyUl6RvF9QwdK4BvgPP9c= github.com/skip-mev/chaintestutil v0.0.0-20240116134208-3e49bf514803/go.mod h1:LF2koCTmygQnz11yjSfHvNP8axdyZ2lTEw0EwI+dnno= -github.com/skip-mev/slinky v0.4.3 h1:4LWqeDa2and84GXG3HgAAmDa145+TG2WQ0uRDAU7AzA= -github.com/skip-mev/slinky v0.4.3/go.mod h1:6LkqFirdIh1FfHijGyRf1MeiBgVshDseTH/jHTOVQVs= -github.com/skip-mev/slinky/tests/integration v1.0.0 h1:n2E2CkMpZajVz0+fthB/2c45sXm9kYWtjyGQ6x0RvrM= -github.com/skip-mev/slinky/tests/integration v1.0.0/go.mod h1:928go8WQCoCzIguxq9lY5SsL5/G8kb/U9zrjJpbzTM8= +github.com/skip-mev/slinky v1.0.3 h1:+7Yw+HHjYqJ7gb5nrG1k2bplNG+qEmn5wws+OesdY2M= +github.com/skip-mev/slinky v1.0.3/go.mod h1:EE3O71wIJ74OciYh62Fc5EysF07KArBEYb6lDmTIKVM= +github.com/skip-mev/slinky/tests/integration v1.1.1-0.20240614013955-8d008bc600dd h1:jqem8fOGfvzykGaAMe8daZh+SU+5GMBNaJJXOHpx/Wc= +github.com/skip-mev/slinky/tests/integration v1.1.1-0.20240614013955-8d008bc600dd/go.mod h1:N78g29Sbbr8MdUm/wVx0B9kALvDLaF9Bn2fYIAUL7sI= 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= @@ -1060,15 +1062,15 @@ github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNo github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= -github.com/strangelove-ventures/interchaintest/v8 v8.3.1-0.20240510203915-0559b76de4fa h1:4C802Vg9ADUXiw8Nb6iEDoXAmUw0XYvf3rPoSLslfqA= -github.com/strangelove-ventures/interchaintest/v8 v8.3.1-0.20240510203915-0559b76de4fa/go.mod h1:5goHQtgWO9khoUO/SfR//w3uaw/uYVriDR1OY6PyydM= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +github.com/strangelove-ventures/interchaintest/v8 v8.4.0 h1:UHLmJfmkFXuJHfSE8qmOuEy4FWZWuRw4G6XZHm9hC6w= +github.com/strangelove-ventures/interchaintest/v8 v8.4.0/go.mod h1:nfPgRi1yjnzi+qF+0Fs9qN9kkS1Fk0oqgpKvqg5a200= 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= @@ -1143,18 +1145,18 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 h1:A3SayB3rNyt+1S6qpI9mHPkeHTZbD7XILEqWnYZb2l0= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0/go.mod h1:27iA5uvhuRNmalO+iEUdVn5ZMj2qy10Mm+XRIpRmyuU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 h1:Xs2Ncz0gNihqu9iosIZ5SkBbWo5T8JhhLJFMQL1qmLI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0/go.mod h1:vy+2G/6NvVMpwGX/NyLqcC41fxepnuKHk16E6IZUcJc= -go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= -go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= -go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= -go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 h1:vS1Ao/R55RNV4O7TA2Qopok8yN+X0LIP6RVWLFkprck= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0/go.mod h1:BMsdeOxN04K0L5FNUBfjFdvwWGNe/rkmSwH4Aelu/X0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 h1:9l89oX4ba9kHbBol3Xin3leYJ+252h0zszDtBwyKe2A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0/go.mod h1:XLZfZboOJWHNKUv7eH0inh0E9VV6eWDFB/9yJyTLPp0= +go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= +go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= +go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= +go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= -go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= -go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= +go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= +go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= 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= @@ -1191,8 +1193,8 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh 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-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/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= @@ -1204,8 +1206,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM= +golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1232,8 +1234,8 @@ 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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 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= @@ -1294,8 +1296,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/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.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 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= @@ -1321,8 +1323,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= -golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= 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= @@ -1433,13 +1435,13 @@ golang.org/x/sys v0.1.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.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= 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= @@ -1450,8 +1452,8 @@ 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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= 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= @@ -1519,8 +1521,8 @@ 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.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= -golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= 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= @@ -1580,8 +1582,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ 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.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.180.0 h1:M2D87Yo0rGBPWpo1orwfCLehUUL6E7/TYe5gvMQWDh4= -google.golang.org/api v0.180.0/go.mod h1:51AiyoEg1MJPSZ9zvklA8VnRILPXxn1iVen9v25XHAE= +google.golang.org/api v0.183.0 h1:PNMeRDwo1pJdgNcFQ9GstuLe/noWKIc89pRWRLMvLwE= +google.golang.org/api v0.183.0/go.mod h1:q43adC5/pHoSZTx5h2mSmdF7NcyfW9JuDyIOJAgS9ZQ= 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= @@ -1697,12 +1699,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw 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-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20240513163218-0867130af1f8 h1:XpH03M6PDRKTo1oGfZBXu2SzwcbfxUokgobVinuUZoU= -google.golang.org/genproto v0.0.0-20240513163218-0867130af1f8/go.mod h1:OLh2Ylz+WlYAJaSBRpJIJLP8iQP+8da+fpxbwNEAV/o= -google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8 h1:W5Xj/70xIA4x60O/IFyXivR5MGqblAb8R3w26pnD6No= -google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8/go.mod h1:vPrPUTsDCYxXWjP7clS81mZ6/803D8K4iM9Ma27VKas= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 h1:mxSlqyb8ZAHsYDCfiXN1EDdNTdvjUJSLY+OnAUtYNYA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM= +google.golang.org/genproto v0.0.0-20240604185151-ef581f913117 h1:HCZ6DlkKtCDAtD8ForECsY3tKuaR+p4R3grlK80uCCc= +google.golang.org/genproto v0.0.0-20240604185151-ef581f913117/go.mod h1:lesfX/+9iA+3OdqeCpoDddJaNxVB1AB6tD7EfqMmprc= +google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU= +google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117/go.mod h1:OimBR/bc1wPO9iV4NC2bpyjy3VnAwZh5EBPQdtaE5oo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= 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= @@ -1744,8 +1746,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= 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= @@ -1762,8 +1764,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ 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.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= 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= @@ -1812,18 +1814,18 @@ launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbc launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= lukechampine.com/blake3 v1.3.0 h1:sJ3XhFINmHSrYCgl958hscfIa3bw8x4DqMP3u1YvoYE= lukechampine.com/blake3 v1.3.0/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= -modernc.org/cc/v4 v4.21.0 h1:D/gLKtcztomvWbsbvBKo3leKQv+86f+DdqEZBBXhnag= -modernc.org/cc/v4 v4.21.0/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= -modernc.org/ccgo/v4 v4.17.3 h1:t2CQci84jnxKw3GGnHvjGKjiNZeZqyQx/023spkk4hU= -modernc.org/ccgo/v4 v4.17.3/go.mod h1:1FCbAtWYJoKuc+AviS+dH+vGNtYmFJqBeRWjmnDWsIg= +modernc.org/cc/v4 v4.21.2 h1:dycHFB/jDc3IyacKipCNSDrjIC0Lm1hyoWOZTRR20Lk= +modernc.org/cc/v4 v4.21.2/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/ccgo/v4 v4.17.10 h1:6wrtRozgrhCxieCeJh85QsxkX/2FFrT9hdaWPlbn4Zo= +modernc.org/ccgo/v4 v4.17.10/go.mod h1:0NBHgsqTTpm9cA5z2ccErvGZmtntSM9qD2kFAs6pjXM= modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b h1:BnN1t+pb1cy61zbvSUV7SeI0PwosMhlAEi/vBY4qxp8= modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= -modernc.org/libc v1.50.5 h1:ZzeUd0dIc/sUtoPTCYIrgypkuzoGzNu6kbEWj2VuEmk= -modernc.org/libc v1.50.5/go.mod h1:rhzrUx5oePTSTIzBgM0mTftwWHK8tiT9aNFUt1mldl0= +modernc.org/libc v1.52.1 h1:uau0VoiT5hnR+SpoWekCKbLqm7v6dhRL3hI+NQhgN3M= +modernc.org/libc v1.52.1/go.mod h1:HR4nVzFDSDizP620zcMCgjb1/8xk2lg5p/8yjfGv1IQ= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= @@ -1832,8 +1834,8 @@ modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= -modernc.org/sqlite v1.29.9 h1:9RhNMklxJs+1596GNuAX+O/6040bvOwacTxuFcRuQow= -modernc.org/sqlite v1.29.9/go.mod h1:ItX2a1OVGgNsFh6Dv60JQvGfJfTPHPVpV6DF59akYOA= +modernc.org/sqlite v1.30.0 h1:8YhPUs/HTnlEgErn/jSYQTwHN/ex8CjHHjg+K9iG7LM= +modernc.org/sqlite v1.30.0/go.mod h1:cgkTARJ9ugeXSNaLBPK3CqbOe7Ec7ZhWPoMFGldEYEw= modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/tests/slinky/slinky_integration_test.go b/tests/slinky/slinky_integration_test.go index 6b92d1349..39ab47d1d 100644 --- a/tests/slinky/slinky_integration_test.go +++ b/tests/slinky/slinky_integration_test.go @@ -39,7 +39,7 @@ var ( oracleImage = ibc.DockerImage{ Repository: "ghcr.io/skip-mev/slinky-sidecar", - Version: "latest", + Version: "v1.0.0", UidGid: "1000:1000", } encodingConfig = testutil.MakeTestEncodingConfig( @@ -62,6 +62,10 @@ var ( Key: "consensus.params.block.max_gas", Value: "1000000000", }, + { + Key: "app_state.feemarket.params.enabled", + Value: false, + }, } denom = "untrn" diff --git a/testutil/contractmanager/keeper/contractmanager.go b/testutil/contractmanager/keeper/contractmanager.go index e32912bbc..5b537ea2c 100644 --- a/testutil/contractmanager/keeper/contractmanager.go +++ b/testutil/contractmanager/keeper/contractmanager.go @@ -5,7 +5,7 @@ import ( "cosmossdk.io/log" metrics2 "cosmossdk.io/store/metrics" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" db2 "github.com/cosmos/cosmos-db" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" diff --git a/testutil/cron/keeper/cron.go b/testutil/cron/keeper/cron.go index cb026e361..fd9e321b5 100644 --- a/testutil/cron/keeper/cron.go +++ b/testutil/cron/keeper/cron.go @@ -5,7 +5,7 @@ import ( "cosmossdk.io/log" metrics2 "cosmossdk.io/store/metrics" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" db2 "github.com/cosmos/cosmos-db" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" diff --git a/testutil/dex/keeper/dex.go b/testutil/dex/keeper/dex.go index 687754589..7c4ae1c81 100644 --- a/testutil/dex/keeper/dex.go +++ b/testutil/dex/keeper/dex.go @@ -8,7 +8,7 @@ import ( "cosmossdk.io/store/metrics" storetypes "cosmossdk.io/store/types" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" db2 "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/testutil/dynamicfees/keeper/keeper.go b/testutil/dynamicfees/keeper/keeper.go new file mode 100644 index 000000000..692fb2192 --- /dev/null +++ b/testutil/dynamicfees/keeper/keeper.go @@ -0,0 +1,48 @@ +package keeper + +import ( + "testing" + + "cosmossdk.io/log" + "cosmossdk.io/store/metrics" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" + cosmosdb "github.com/cosmos/cosmos-db" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + + "cosmossdk.io/store" + storetypes "cosmossdk.io/store/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +func DynamicFeesKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { + storeKey := storetypes.NewKVStoreKey(types.StoreKey) + + db := cosmosdb.NewMemDB() + stateStore := store.NewCommitMultiStore(db, log.NewNopLogger(), metrics.NewNoOpMetrics()) + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + + k := keeper.NewKeeper( + cdc, + storeKey, + authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + ) + + ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) + + // Initialize params + err := k.SetParams(ctx, types.DefaultParams()) + require.NoError(t, err) + + return k, ctx +} diff --git a/testutil/feeburner/keeper/feeburner.go b/testutil/feeburner/keeper/feeburner.go index f0cfd2e46..205e1a95c 100644 --- a/testutil/feeburner/keeper/feeburner.go +++ b/testutil/feeburner/keeper/feeburner.go @@ -5,7 +5,7 @@ import ( "cosmossdk.io/log" metrics2 "cosmossdk.io/store/metrics" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" db2 "github.com/cosmos/cosmos-db" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" diff --git a/testutil/feerefunder/keeper/fee.go b/testutil/feerefunder/keeper/fee.go index 9bd5df5d3..c10a94367 100644 --- a/testutil/feerefunder/keeper/fee.go +++ b/testutil/feerefunder/keeper/fee.go @@ -8,7 +8,7 @@ import ( metrics2 "cosmossdk.io/store/metrics" storetypes "cosmossdk.io/store/types" tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" db2 "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" diff --git a/testutil/globalfee/keeper/globalfee.go b/testutil/globalfee/keeper/globalfee.go index cb5cbd5e0..584b7e548 100644 --- a/testutil/globalfee/keeper/globalfee.go +++ b/testutil/globalfee/keeper/globalfee.go @@ -5,7 +5,7 @@ import ( "cosmossdk.io/log" "cosmossdk.io/store/metrics" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" db "github.com/cosmos/cosmos-db" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" diff --git a/testutil/interchainqueries/keeper/interchainqueries.go b/testutil/interchainqueries/keeper/interchainqueries.go index fd98e999b..587f7f0c7 100644 --- a/testutil/interchainqueries/keeper/interchainqueries.go +++ b/testutil/interchainqueries/keeper/interchainqueries.go @@ -5,7 +5,7 @@ import ( "cosmossdk.io/log" metrics2 "cosmossdk.io/store/metrics" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" db2 "github.com/cosmos/cosmos-db" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" diff --git a/testutil/interchaintxs/keeper/interchaintxs.go b/testutil/interchaintxs/keeper/interchaintxs.go index 908443cfa..87e6f3685 100644 --- a/testutil/interchaintxs/keeper/interchaintxs.go +++ b/testutil/interchaintxs/keeper/interchaintxs.go @@ -5,7 +5,7 @@ import ( "cosmossdk.io/log" metrics2 "cosmossdk.io/store/metrics" - adminmoduletypes "github.com/cosmos/admin-module/x/adminmodule/types" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" db2 "github.com/cosmos/cosmos-db" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" diff --git a/testutil/tokenfactory/keeper/tokenfactory.go b/testutil/tokenfactory/keeper/tokenfactory.go index 55bbabced..d122324c1 100644 --- a/testutil/tokenfactory/keeper/tokenfactory.go +++ b/testutil/tokenfactory/keeper/tokenfactory.go @@ -14,6 +14,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" + "github.com/neutron-org/neutron/v4/testutil" "github.com/neutron-org/neutron/v4/x/tokenfactory/keeper" "github.com/neutron-org/neutron/v4/x/tokenfactory/types" ) @@ -43,7 +44,7 @@ func TokenFactoryKeeper( accountKeeper, bankKeeper, contractKeeper, - "authority", + testutil.TestOwnerAddress, ) ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) diff --git a/utils/math/prec_dec.go b/utils/math/prec_dec.go index 8b59cc611..8af1eb425 100644 --- a/utils/math/prec_dec.go +++ b/utils/math/prec_dec.go @@ -13,7 +13,7 @@ import ( ) // NOTE: This file is nearly direct copy from cosmossdk.io/math/dec.go @v1.01 -// The Precesion has been changed from 18 to 26 +// The Precesion has been changed from 18 to 27 // NOTE: never use new(Dec) or else we will panic unmarshalling into the // nil embedded big.Int @@ -23,11 +23,11 @@ type PrecDec struct { const ( // number of decimal places - Precision = 26 + Precision = 27 // bits required to represent the above precision // Ceiling[Log2[10^Precision - 1]] - PrecDecimalPrecisionBits = 87 + PrecDecimalPrecisionBits = 90 // decimalTruncateBits is the minimum number of bits removed // by a truncate operation. It is equal to diff --git a/utils/slinky/slinky.go b/utils/slinky/slinky.go deleted file mode 100644 index 6dbda9295..000000000 --- a/utils/slinky/slinky.go +++ /dev/null @@ -1,33 +0,0 @@ -package slinky - -import ( - "encoding/json" - "fmt" - - marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" -) - -// ReadMarketsFromFile reads a market map configuration from a file at the given path. -func ReadMarketsFromFile(marketsBz []byte) ([]marketmaptypes.Market, error) { - // Initialize the struct to hold the configuration - var markets []marketmaptypes.Market - - // Unmarshal the JSON data into the config struct - if err := json.Unmarshal(marketsBz, &markets); err != nil { - return nil, fmt.Errorf("error unmarshalling config JSON: %w", err) - } - - return markets, nil -} - -func ToMarketMap(markets []marketmaptypes.Market) marketmaptypes.MarketMap { - mm := marketmaptypes.MarketMap{ - Markets: make(map[string]marketmaptypes.Market, len(markets)), - } - - for _, m := range markets { - mm.Markets[m.Ticker.String()] = m - } - - return mm -} diff --git a/wasmbinding/bindings/msg.go b/wasmbinding/bindings/msg.go index e6066f9c7..03fc3640b 100644 --- a/wasmbinding/bindings/msg.go +++ b/wasmbinding/bindings/msg.go @@ -239,14 +239,17 @@ type Dex struct { // MsgPlaceLimitOrder is a copy dextypes.MsgPlaceLimitOrder with altered ExpirationTime field, // it's a preferable way to pass timestamp as unixtime to contracts type MsgPlaceLimitOrder struct { - Creator string `json:"creator,omitempty"` - Receiver string `json:"receiver,omitempty"` - TokenIn string `json:"token_in,omitempty"` - TokenOut string `json:"token_out,omitempty"` + Creator string `json:"creator,omitempty"` + Receiver string `json:"receiver,omitempty"` + TokenIn string `json:"token_in,omitempty"` + TokenOut string `json:"token_out,omitempty"` + // Deprecated: tick_index_in_to_out will be removed in future release; limit_sell_price should be used instead. TickIndexInToOut int64 `json:"tick_index_in_to_out,omitempty"` AmountIn math.Int `json:"amount_in"` OrderType string `json:"order_type,omitempty"` // expirationTime is only valid iff orderType == GOOD_TIL_TIME. ExpirationTime *uint64 `json:"expiration_time,omitempty"` MaxAmountOut *math.Int `json:"max_amount_out"` + // Accepts standard decimals and decimals with scientific notation (ie. 1234.23E-7) + LimitSellPrice string `json:"limit_sell_price,omitempty"` } diff --git a/wasmbinding/message_plugin.go b/wasmbinding/message_plugin.go index 9e1c417ae..a22c5e78d 100644 --- a/wasmbinding/message_plugin.go +++ b/wasmbinding/message_plugin.go @@ -13,6 +13,7 @@ import ( dexkeeper "github.com/neutron-org/neutron/v4/x/dex/keeper" dextypes "github.com/neutron-org/neutron/v4/x/dex/types" + dexutils "github.com/neutron-org/neutron/v4/x/dex/utils" contractmanagerkeeper "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" @@ -31,8 +32,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - adminmodulekeeper "github.com/cosmos/admin-module/x/adminmodule/keeper" - admintypes "github.com/cosmos/admin-module/x/adminmodule/types" + adminmodulekeeper "github.com/cosmos/admin-module/v2/x/adminmodule/keeper" + admintypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" //nolint:staticcheck @@ -223,10 +224,11 @@ func (m *CustomMessenger) dispatchDexMsg(ctx sdk.Context, contractAddr sdk.AccAd return handleDexMsg(ctx, dex.Withdrawal, m.DexMsgServer.Withdrawal) case dex.PlaceLimitOrder != nil: msg := dextypes.MsgPlaceLimitOrder{ - Creator: contractAddr.String(), - Receiver: dex.PlaceLimitOrder.Receiver, - TokenIn: dex.PlaceLimitOrder.TokenIn, - TokenOut: dex.PlaceLimitOrder.TokenOut, + Creator: contractAddr.String(), + Receiver: dex.PlaceLimitOrder.Receiver, + TokenIn: dex.PlaceLimitOrder.TokenIn, + TokenOut: dex.PlaceLimitOrder.TokenOut, + //nolint: staticcheck // TODO: remove in next release TickIndexInToOut: dex.PlaceLimitOrder.TickIndexInToOut, AmountIn: dex.PlaceLimitOrder.AmountIn, MaxAmountOut: dex.PlaceLimitOrder.MaxAmountOut, @@ -246,6 +248,15 @@ func (m *CustomMessenger) dispatchDexMsg(ctx sdk.Context, contractAddr sdk.AccAd t := time.Unix(int64(*(dex.PlaceLimitOrder.ExpirationTime)), 0) msg.ExpirationTime = &t } + + if limitPriceStr := dex.PlaceLimitOrder.LimitSellPrice; limitPriceStr != "" { + limitPriceDec, err := dexutils.ParsePrecDecScientificNotation(limitPriceStr) + if err != nil { + return nil, nil, errors.Wrapf(err, "cannot parse string %s for limit price", limitPriceStr) + } + msg.LimitSellPrice = &limitPriceDec + } + return handleDexMsg(ctx, &msg, m.DexMsgServer.PlaceLimitOrder) case dex.CancelLimitOrder != nil: dex.CancelLimitOrder.Creator = contractAddr.String() @@ -674,14 +685,14 @@ func (m *CustomMessenger) setBeforeSendHook(ctx sdk.Context, contractAddr sdk.Ac } // PerformMint used with mintTokens to validate the mint message and mint through token factory. -func PerformMint(f *tokenfactorykeeper.Keeper, b *bankkeeper.BaseKeeper, ctx sdk.Context, contractAddr sdk.AccAddress, mint *bindings.MintTokens) error { +func PerformMint(f *tokenfactorykeeper.Keeper, _ *bankkeeper.BaseKeeper, ctx sdk.Context, contractAddr sdk.AccAddress, mint *bindings.MintTokens) error { rcpt, err := parseAddress(mint.MintToAddress) if err != nil { return err } coin := sdk.Coin{Denom: mint.Denom, Amount: mint.Amount} - sdkMsg := tokenfactorytypes.NewMsgMint(contractAddr.String(), coin) + sdkMsg := tokenfactorytypes.NewMsgMintTo(contractAddr.String(), coin, rcpt.String()) // Mint through token factory / message server msgServer := tokenfactorykeeper.NewMsgServerImpl(*f) @@ -690,11 +701,6 @@ func PerformMint(f *tokenfactorykeeper.Keeper, b *bankkeeper.BaseKeeper, ctx sdk return errors.Wrap(err, "minting coins from message") } - err = b.SendCoins(ctx, contractAddr, rcpt, sdk.NewCoins(coin)) - if err != nil { - return errors.Wrap(err, "sending newly minted coins from message") - } - return nil } diff --git a/wasmbinding/stargate_allowlist.go b/wasmbinding/stargate_allowlist.go index 6cf256429..13d8ab761 100644 --- a/wasmbinding/stargate_allowlist.go +++ b/wasmbinding/stargate_allowlist.go @@ -8,9 +8,13 @@ import ( ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" //nolint:staticcheck ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" marketmaptypes "github.com/skip-mev/slinky/x/marketmap/types" oracletypes "github.com/skip-mev/slinky/x/oracle/types" + dynamicfeestypes "github.com/neutron-org/neutron/v4/x/dynamicfees/types" + crontypes "github.com/neutron-org/neutron/v4/x/cron/types" dextypes "github.com/neutron-org/neutron/v4/x/dex/types" feeburnertypes "github.com/neutron-org/neutron/v4/x/feeburner/types" @@ -22,9 +26,10 @@ import ( func AcceptedStargateQueries() wasmkeeper.AcceptedQueries { return wasmkeeper.AcceptedQueries{ // ibc - "/ibc.core.client.v1.Query/ClientState": &ibcclienttypes.QueryClientStateResponse{}, - "/ibc.core.client.v1.Query/ConsensusState": &ibcclienttypes.QueryConsensusStateResponse{}, - "/ibc.core.connection.v1.Query/Connection": &ibcconnectiontypes.QueryConnectionResponse{}, + "/ibc.core.client.v1.Query/ClientState": &ibcclienttypes.QueryClientStateResponse{}, + "/ibc.core.client.v1.Query/ConsensusState": &ibcclienttypes.QueryConsensusStateResponse{}, + "/ibc.core.connection.v1.Query/Connection": &ibcconnectiontypes.QueryConnectionResponse{}, + "/ibc.core.channel.v1.Query/ChannelClientState": &ibcchanneltypes.QueryChannelClientStateResponse{}, // token factory "/osmosis.tokenfactory.v1beta1.Query/Params": &tokenfactorytypes.QueryParamsResponse{}, @@ -95,5 +100,14 @@ func AcceptedStargateQueries() wasmkeeper.AcceptedQueries { "/slinky.marketmap.v1.Query/MarketMap": &marketmaptypes.MarketMapResponse{}, "/slinky.marketmap.v1.Query/LastUpdated": &marketmaptypes.LastUpdatedResponse{}, "/slinky.marketmap.v1.Query/Params": &marketmaptypes.ParamsResponse{}, + + // feemarket + "feemarket.feemarket.v1.Query/Params": &feemarkettypes.ParamsResponse{}, + "feemarket.feemarket.v1.Query/State": &feemarkettypes.StateResponse{}, + "feemarket.feemarket.v1.Query/GasPrice": &feemarkettypes.GasPriceResponse{}, + "feemarket.feemarket.v1.Query/GasPrices": &feemarkettypes.GasPricesResponse{}, + + // dynamicfees + "neutron.dynamicfees.v1.Query/Params": &dynamicfeestypes.QueryParamsResponse{}, } } diff --git a/wasmbinding/test/custom_message_test.go b/wasmbinding/test/custom_message_test.go index b8c786482..760417c16 100644 --- a/wasmbinding/test/custom_message_test.go +++ b/wasmbinding/test/custom_message_test.go @@ -7,7 +7,7 @@ import ( "cosmossdk.io/math" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - admintypes "github.com/cosmos/admin-module/x/adminmodule/types" + admintypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" keeper2 "github.com/neutron-org/neutron/v4/x/contractmanager/keeper" @@ -19,7 +19,7 @@ import ( ictxtypes "github.com/neutron-org/neutron/v4/x/interchaintxs/types" - adminkeeper "github.com/cosmos/admin-module/x/adminmodule/keeper" + adminkeeper "github.com/cosmos/admin-module/v2/x/adminmodule/keeper" "github.com/neutron-org/neutron/v4/app/params" @@ -76,6 +76,7 @@ func (suite *CustomMessengerTestSuite) SetupTest() { sdk.NewCoins(sdk.NewInt64Coin(params.DefaultDenom, 10_000_000)), 0, FeeCollectorAddress, + tokenfactorytypes.DefaultWhitelistedHooks, )) suite.Require().NoError(err) diff --git a/wasmbinding/test/custom_query_test.go b/wasmbinding/test/custom_query_test.go index 8bef356d5..781151936 100644 --- a/wasmbinding/test/custom_query_test.go +++ b/wasmbinding/test/custom_query_test.go @@ -255,6 +255,7 @@ func (suite *CustomQuerierTestSuite) TestDenomAdmin() { sdk.NewCoins(sdk.NewInt64Coin(params.DefaultDenom, 10_000_000)), 0, FeeCollectorAddress, + tokenfactorytypes.DefaultWhitelistedHooks, )) suite.Require().NoError(err) diff --git a/wasmbinding/wasm.go b/wasmbinding/wasm.go index 76fbfe9d0..63559cfa1 100644 --- a/wasmbinding/wasm.go +++ b/wasmbinding/wasm.go @@ -10,7 +10,7 @@ import ( feeburnerkeeper "github.com/neutron-org/neutron/v4/x/feeburner/keeper" feerefunderkeeper "github.com/neutron-org/neutron/v4/x/feerefunder/keeper" - adminmodulekeeper "github.com/cosmos/admin-module/x/adminmodule/keeper" + adminmodulekeeper "github.com/cosmos/admin-module/v2/x/adminmodule/keeper" marketmapkeeper "github.com/skip-mev/slinky/x/marketmap/keeper" oraclekeeper "github.com/skip-mev/slinky/x/oracle/keeper" diff --git a/x/contractmanager/types/failure.pb.go b/x/contractmanager/types/failure.pb.go index 108230c3d..635899d81 100644 --- a/x/contractmanager/types/failure.pb.go +++ b/x/contractmanager/types/failure.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" io "io" math "math" math_bits "math/bits" - - proto "github.com/cosmos/gogoproto/proto" - _ "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/contractmanager/types/genesis.pb.go b/x/contractmanager/types/genesis.pb.go index 198452eec..fbf415eda 100644 --- a/x/contractmanager/types/genesis.pb.go +++ b/x/contractmanager/types/genesis.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/contractmanager/types/params.pb.go b/x/contractmanager/types/params.pb.go index 2ca0e44c5..a3294bbd0 100644 --- a/x/contractmanager/types/params.pb.go +++ b/x/contractmanager/types/params.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/contractmanager/types/query.pb.go b/x/contractmanager/types/query.pb.go index 7e3209a8c..b5b0f5543 100644 --- a/x/contractmanager/types/query.pb.go +++ b/x/contractmanager/types/query.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" @@ -18,6 +14,9 @@ import ( 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. diff --git a/x/contractmanager/types/tx.pb.go b/x/contractmanager/types/tx.pb.go index eaad796ed..3a69490ae 100644 --- a/x/contractmanager/types/tx.pb.go +++ b/x/contractmanager/types/tx.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" @@ -19,6 +15,9 @@ import ( 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. diff --git a/x/contractmanager/types/v1/failure.pb.go b/x/contractmanager/types/v1/failure.pb.go index af2f28754..597eb369b 100644 --- a/x/contractmanager/types/v1/failure.pb.go +++ b/x/contractmanager/types/v1/failure.pb.go @@ -5,11 +5,10 @@ package v1 import ( fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/cron/types/genesis.pb.go b/x/cron/types/genesis.pb.go index 6853c1bb0..2d3546994 100644 --- a/x/cron/types/genesis.pb.go +++ b/x/cron/types/genesis.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/cron/types/params.pb.go b/x/cron/types/params.pb.go index 5a10eefdc..c71904ce8 100644 --- a/x/cron/types/params.pb.go +++ b/x/cron/types/params.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/cron/types/query.pb.go b/x/cron/types/query.pb.go index 20f19b2cc..c34c6c3f9 100644 --- a/x/cron/types/query.pb.go +++ b/x/cron/types/query.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" @@ -18,6 +14,9 @@ import ( 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. diff --git a/x/cron/types/schedule.pb.go b/x/cron/types/schedule.pb.go index f9c1893cc..cda29cf72 100644 --- a/x/cron/types/schedule.pb.go +++ b/x/cron/types/schedule.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/cron/types/tx.pb.go b/x/cron/types/tx.pb.go index 68d972249..217bb879c 100644 --- a/x/cron/types/tx.pb.go +++ b/x/cron/types/tx.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" @@ -19,6 +15,9 @@ import ( 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. diff --git a/x/dex/client/cli/flags.go b/x/dex/client/cli/flags.go index c58a1e869..e7b7c1915 100644 --- a/x/dex/client/cli/flags.go +++ b/x/dex/client/cli/flags.go @@ -6,6 +6,7 @@ const ( FlagMaxAmountOut = "max-amount-out" FlagIncludePoolData = "include-pool-data" FlagCalcWithdraw = "calc-withdraw" + FlagPrice = "price" ) func FlagSetMaxAmountOut() *flag.FlagSet { @@ -14,6 +15,12 @@ func FlagSetMaxAmountOut() *flag.FlagSet { return fs } +func FlagSetPrice() *flag.FlagSet { + fs := flag.NewFlagSet("", flag.ContinueOnError) + fs.String(FlagPrice, "", "Sell price for limit order") + return fs +} + func FlagSetIncludePoolData() *flag.FlagSet { fs := flag.NewFlagSet("", flag.ContinueOnError) fs.Bool(FlagIncludePoolData, false, "Include pool data with response") diff --git a/x/dex/client/cli/tx_place_limit_order.go b/x/dex/client/cli/tx_place_limit_order.go index 89964e3a5..8c4419dbd 100644 --- a/x/dex/client/cli/tx_place_limit_order.go +++ b/x/dex/client/cli/tx_place_limit_order.go @@ -12,13 +12,14 @@ import ( "github.com/cosmos/cosmos-sdk/client/tx" "github.com/spf13/cobra" + math_utils "github.com/neutron-org/neutron/v4/utils/math" "github.com/neutron-org/neutron/v4/x/dex/types" ) func CmdPlaceLimitOrder() *cobra.Command { cmd := &cobra.Command{ //nolint:lll - Use: "place-limit-order [receiver] [token-in] [token-out] [tick-index] [amount-in] ?[order-type] ?[expirationTime] ?(--max-amout-out)", + Use: "place-limit-order [receiver] [token-in] [token-out] [tick-index] [amount-in] ?[order-type] ?[expirationTime] ?(--max-amout-out) ?(--price)", Short: "Broadcast message PlaceLimitOrder", Example: "place-limit-order alice tokenA tokenB [-10] tokenA 50 GOOD_TIL_TIME '01/02/2006 15:04:05' --max-amount-out 20 --from alice", Args: cobra.RangeArgs(5, 7), @@ -65,6 +66,7 @@ func CmdPlaceLimitOrder() *cobra.Command { if err != nil { return err } + var maxAmountOutIntP *math.Int if maxAmountOutArg != "" { maxAmountOutInt, ok := math.NewIntFromString(maxAmountOutArg) @@ -77,6 +79,20 @@ func CmdPlaceLimitOrder() *cobra.Command { maxAmountOutIntP = &maxAmountOutInt } + priceArg, err := cmd.Flags().GetString(FlagPrice) + if err != nil { + return err + } + + var priceDecP *math_utils.PrecDec + if priceArg != "" { + priceDec, err := math_utils.NewPrecDecFromStr(priceArg) + if err != nil { + return err + } + priceDecP = &priceDec + } + clientCtx, err := client.GetClientTxContext(cmd) if err != nil { return err @@ -92,6 +108,7 @@ func CmdPlaceLimitOrder() *cobra.Command { orderType, goodTil, maxAmountOutIntP, + priceDecP, ) return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) @@ -100,6 +117,7 @@ func CmdPlaceLimitOrder() *cobra.Command { flags.AddTxFlagsToCmd(cmd) cmd.Flags().AddFlagSet(FlagSetMaxAmountOut()) + cmd.Flags().AddFlagSet(FlagSetPrice()) return cmd } diff --git a/x/dex/genesis.go b/x/dex/genesis.go index 3c9d19c47..5e838a40a 100644 --- a/x/dex/genesis.go +++ b/x/dex/genesis.go @@ -17,7 +17,13 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) case *types.TickLiquidity_PoolReserves: k.SetPoolReserves(ctx, elem.GetPoolReserves()) case *types.TickLiquidity_LimitOrderTranche: - k.SetLimitOrderTranche(ctx, elem.GetLimitOrderTranche()) + tranche := elem.GetLimitOrderTranche() + k.SetLimitOrderTranche(ctx, tranche) + if tranche.HasExpiration() { + // re-create expiration record + loExpiration := keeper.NewLimitOrderExpiration(tranche) + k.SetLimitOrderExpiration(ctx, loExpiration) + } } } // Set all the inactiveLimitOrderTranche @@ -32,6 +38,8 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) // Set all the poolMetadata for _, elem := range genState.PoolMetadataList { k.SetPoolMetadata(ctx, elem) + // Store PoolID reference + k.StorePoolIDRef(ctx, elem.Id, elem.PairId, elem.Tick, elem.Fee) } // Set poolMetadata count diff --git a/x/dex/genesis_test.go b/x/dex/genesis_test.go index 2262f2562..06dae9b4e 100644 --- a/x/dex/genesis_test.go +++ b/x/dex/genesis_test.go @@ -2,6 +2,7 @@ package dex_test import ( "testing" + "time" "cosmossdk.io/math" "github.com/stretchr/testify/require" @@ -70,6 +71,47 @@ func TestGenesis(t *testing.T) { ), }, }, + { + Liquidity: &types.TickLiquidity_LimitOrderTranche{ + LimitOrderTranche: types.MustNewLimitOrderTranche( + "TokenB", + "TokenA", + "0", + 0, + math.ZeroInt(), + math.ZeroInt(), + math.ZeroInt(), + math.ZeroInt(), + time.Date(2024, 1, 1, 1, 0, 0, 0, time.UTC), + ), + }, + }, + { + Liquidity: &types.TickLiquidity_LimitOrderTranche{ + LimitOrderTranche: types.MustNewLimitOrderTranche( + "TokenB", + "TokenA", + "0", + 0, + math.ZeroInt(), + math.ZeroInt(), + math.ZeroInt(), + math.ZeroInt(), + time.Date(2024, 2, 1, 1, 0, 0, 0, time.UTC), + ), + }, + }, + { + Liquidity: &types.TickLiquidity_PoolReserves{ + PoolReserves: types.MustNewPoolReserves( + &types.PoolReservesKey{ + TradePairId: types.MustNewTradePairID("TokenA", "TokenB"), + TickIndexTakerToMaker: 0, + Fee: 1, + }, + ), + }, + }, }, InactiveLimitOrderTrancheList: []*types.LimitOrderTranche{ { @@ -95,10 +137,16 @@ func TestGenesis(t *testing.T) { }, PoolMetadataList: []types.PoolMetadata{ { - Id: 0, + PairId: types.MustNewPairID("TokenA", "TokenB"), + Tick: 0, + Fee: 1, + Id: 0, }, { - Id: 1, + PairId: types.MustNewPairID("TokenA", "TokenB"), + Tick: 1, + Fee: 1, + Id: 1, }, }, PoolCount: 2, @@ -110,6 +158,27 @@ func TestGenesis(t *testing.T) { got := dex.ExportGenesis(ctx, *k) require.NotNil(t, got) + // check that LimitorderExpirations are recreated correctly + expectedLimitOrderExpirations := []*types.LimitOrderExpiration{ + { + ExpirationTime: *genesisState.TickLiquidityList[2].GetLimitOrderTranche().ExpirationTime, + TrancheRef: genesisState.TickLiquidityList[2].GetLimitOrderTranche().Key.KeyMarshal(), + }, + { + ExpirationTime: *genesisState.TickLiquidityList[3].GetLimitOrderTranche().ExpirationTime, + TrancheRef: genesisState.TickLiquidityList[3].GetLimitOrderTranche().Key.KeyMarshal(), + }, + } + loExpirations := k.GetAllLimitOrderExpiration(ctx) + require.Equal(t, *expectedLimitOrderExpirations[0], *loExpirations[0]) + require.Equal(t, *expectedLimitOrderExpirations[1], *loExpirations[1]) + require.Equal(t, len(expectedLimitOrderExpirations), len(loExpirations)) + + // Check that poolID refs works + + _, found := k.GetPool(ctx, types.MustNewPairID("TokenA", "TokenB"), 0, 1) + require.True(t, found) + nullify.Fill(&genesisState) nullify.Fill(got) diff --git a/x/dex/keeper/cancel_limit_order.go b/x/dex/keeper/cancel_limit_order.go new file mode 100644 index 000000000..8ab4f8bfe --- /dev/null +++ b/x/dex/keeper/cancel_limit_order.go @@ -0,0 +1,92 @@ +package keeper + +import ( + "context" + + sdkerrors "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +// CancelLimitOrderCore handles the logic for MsgCancelLimitOrder including bank operations and event emissions. +func (k Keeper) CancelLimitOrderCore( + goCtx context.Context, + trancheKey string, + callerAddr sdk.AccAddress, +) error { + ctx := sdk.UnwrapSDKContext(goCtx) + + coinOut, tradePairID, err := k.ExecuteCancelLimitOrder(ctx, trancheKey, callerAddr) + if err != nil { + return err + } + + err = k.bankKeeper.SendCoinsFromModuleToAccount( + ctx, + types.ModuleName, + callerAddr, + sdk.Coins{coinOut}, + ) + if err != nil { + return err + } + + // This will never panic since TradePairID has already been successfully constructed by ExecuteCancelLimitOrder + pairID := tradePairID.MustPairID() + ctx.EventManager().EmitEvent(types.CancelLimitOrderEvent( + callerAddr, + pairID.Token0, + pairID.Token1, + tradePairID.MakerDenom, + tradePairID.TakerDenom, + coinOut.Amount, + trancheKey, + )) + + return nil +} + +// ExecuteCancelLimitOrder handles the core logic for CancelLimitOrder -- removing remaining TokenIn from the +// LimitOrderTranche and returning it to the user, updating the number of canceled shares on the LimitOrderTrancheUser. +// IT DOES NOT PERFORM ANY BANKING OPERATIONS +func (k Keeper) ExecuteCancelLimitOrder( + ctx sdk.Context, + trancheKey string, + callerAddr sdk.AccAddress, +) (coinOut sdk.Coin, tradePairID *types.TradePairID, error error) { + trancheUser, found := k.GetLimitOrderTrancheUser(ctx, callerAddr.String(), trancheKey) + if !found { + return sdk.Coin{}, nil, types.ErrActiveLimitOrderNotFound + } + + tradePairID, tickIndex := trancheUser.TradePairId, trancheUser.TickIndexTakerToMaker + tranche := k.GetLimitOrderTranche( + ctx, + &types.LimitOrderTrancheKey{ + TradePairId: tradePairID, + TickIndexTakerToMaker: tickIndex, + TrancheKey: trancheKey, + }, + ) + if tranche == nil { + return sdk.Coin{}, nil, types.ErrActiveLimitOrderNotFound + } + + amountToCancel := tranche.RemoveTokenIn(trancheUser) + trancheUser.SharesCancelled = trancheUser.SharesCancelled.Add(amountToCancel) + + if !amountToCancel.IsPositive() { + return sdk.Coin{}, nil, sdkerrors.Wrapf(types.ErrCancelEmptyLimitOrder, "%s", tranche.Key.TrancheKey) + } + + k.SaveTrancheUser(ctx, trancheUser) + k.SaveTranche(ctx, tranche) + + if trancheUser.OrderType.HasExpiration() { + k.RemoveLimitOrderExpiration(ctx, *tranche.ExpirationTime, tranche.Key.KeyMarshal()) + } + coinOut = sdk.NewCoin(tradePairID.MakerDenom, amountToCancel) + + return coinOut, tradePairID, nil +} diff --git a/x/dex/keeper/core.go b/x/dex/keeper/core.go deleted file mode 100644 index fe8c1f15f..000000000 --- a/x/dex/keeper/core.go +++ /dev/null @@ -1,626 +0,0 @@ -package keeper - -import ( - "context" - "errors" - "fmt" - "time" - - sdkerrors "cosmossdk.io/errors" - "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/neutron-org/neutron/v4/utils" - math_utils "github.com/neutron-org/neutron/v4/utils/math" - "github.com/neutron-org/neutron/v4/x/dex/types" -) - -// NOTE: Currently we are using TruncateInt in multiple places for converting Decs back into math.Ints. -// This may create some accounting anomalies but seems preferable to other alternatives. -// See full ADR here: https://www.notion.so/dualityxyz/A-Modest-Proposal-For-Truncating-696a919d59254876a617f82fb9567895 - -// Handles core logic for MsgDeposit, checking and initializing data structures (tick, pair), calculating -// shares based on amount deposited, and sending funds to moduleAddress. -func (k Keeper) DepositCore( - goCtx context.Context, - pairID *types.PairID, - callerAddr sdk.AccAddress, - receiverAddr sdk.AccAddress, - amounts0 []math.Int, - amounts1 []math.Int, - tickIndices []int64, - fees []uint64, - options []*types.DepositOptions, -) (amounts0Deposit, amounts1Deposit []math.Int, sharesIssued sdk.Coins, failedDeposits []*types.FailedDeposit, err error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - totalAmountReserve0 := math.ZeroInt() - totalAmountReserve1 := math.ZeroInt() - amounts0Deposited := make([]math.Int, len(amounts0)) - amounts1Deposited := make([]math.Int, len(amounts1)) - sharesIssued = sdk.Coins{} - - for i := 0; i < len(amounts0); i++ { - amounts0Deposited[i] = math.ZeroInt() - amounts1Deposited[i] = math.ZeroInt() - } - - for i, amount0 := range amounts0 { - amount1 := amounts1[i] - tickIndex := tickIndices[i] - fee := fees[i] - option := options[i] - if option == nil { - option = &types.DepositOptions{} - } - autoswap := !option.DisableAutoswap - - if err := k.ValidateFee(ctx, fee); err != nil { - return nil, nil, nil, failedDeposits, err - } - - if k.IsPoolBehindEnemyLines(ctx, pairID, tickIndex, fee, amount0, amount1) { - err = sdkerrors.Wrapf(types.ErrDepositBehindEnemyLines, - "deposit failed at tick %d fee %d", tickIndex, fee) - if option.FailTxOnBel { - return nil, nil, nil, failedDeposits, err - } - failedDeposits = append(failedDeposits, &types.FailedDeposit{DepositIdx: uint64(i), Error: err.Error()}) - continue - } - - pool, err := k.GetOrInitPool( - ctx, - pairID, - tickIndex, - fee, - ) - if err != nil { - return nil, nil, nil, failedDeposits, err - } - - existingShares := k.bankKeeper.GetSupply(ctx, pool.GetPoolDenom()).Amount - - inAmount0, inAmount1, outShares := pool.Deposit(amount0, amount1, existingShares, autoswap) - - k.SetPool(ctx, pool) - - if inAmount0.IsZero() && inAmount1.IsZero() { - return nil, nil, nil, failedDeposits, types.ErrZeroTrueDeposit - } - - if outShares.IsZero() { - return nil, nil, nil, failedDeposits, types.ErrDepositShareUnderflow - } - - sharesIssued = append(sharesIssued, outShares) - - amounts0Deposited[i] = inAmount0 - amounts1Deposited[i] = inAmount1 - totalAmountReserve0 = totalAmountReserve0.Add(inAmount0) - totalAmountReserve1 = totalAmountReserve1.Add(inAmount1) - - ctx.EventManager().EmitEvent(types.CreateDepositEvent( - callerAddr, - receiverAddr, - pairID.Token0, - pairID.Token1, - tickIndex, - fee, - inAmount0, - inAmount1, - outShares.Amount, - )) - } - - // At this point shares issued is not sorted and may have duplicates - // we must sanitize to convert it to a valid set of coins - sharesIssued = utils.SanitizeCoins(sharesIssued) - - if totalAmountReserve0.IsPositive() { - coin0 := sdk.NewCoin(pairID.Token0, totalAmountReserve0) - if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, callerAddr, types.ModuleName, sdk.Coins{coin0}); err != nil { - return nil, nil, nil, failedDeposits, err - } - } - - if totalAmountReserve1.IsPositive() { - coin1 := sdk.NewCoin(pairID.Token1, totalAmountReserve1) - if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, callerAddr, types.ModuleName, sdk.Coins{coin1}); err != nil { - return nil, nil, nil, failedDeposits, err - } - } - - if err := k.MintShares(ctx, receiverAddr, sharesIssued); err != nil { - return nil, nil, nil, failedDeposits, err - } - - return amounts0Deposited, amounts1Deposited, sharesIssued, failedDeposits, nil -} - -// Handles core logic for MsgWithdrawal; calculating and withdrawing reserve0,reserve1 from a specified tick -// given a specified number of shares to remove. -// Calculates the amount of reserve0, reserve1 to withdraw based on the percentage of the desired -// number of shares to remove compared to the total number of shares at the given tick. -func (k Keeper) WithdrawCore( - goCtx context.Context, - pairID *types.PairID, - callerAddr sdk.AccAddress, - receiverAddr sdk.AccAddress, - sharesToRemoveList []math.Int, - tickIndicesNormalized []int64, - fees []uint64, -) error { - ctx := sdk.UnwrapSDKContext(goCtx) - totalReserve0ToRemove := math.ZeroInt() - totalReserve1ToRemove := math.ZeroInt() - - for i, fee := range fees { - sharesToRemove := sharesToRemoveList[i] - tickIndex := tickIndicesNormalized[i] - - pool, err := k.GetOrInitPool(ctx, pairID, tickIndex, fee) - if err != nil { - return err - } - - poolDenom := pool.GetPoolDenom() - - totalShares := k.bankKeeper.GetSupply(ctx, poolDenom).Amount - if totalShares.LT(sharesToRemove) { - return sdkerrors.Wrapf( - types.ErrInsufficientShares, - "%s does not have %s shares of type %s", - callerAddr, - sharesToRemove, - poolDenom, - ) - } - - outAmount0, outAmount1 := pool.Withdraw(sharesToRemove, totalShares) - k.SetPool(ctx, pool) - - if sharesToRemove.IsPositive() { - if err := k.BurnShares(ctx, callerAddr, sharesToRemove, poolDenom); err != nil { - return err - } - } - - totalReserve0ToRemove = totalReserve0ToRemove.Add(outAmount0) - totalReserve1ToRemove = totalReserve1ToRemove.Add(outAmount1) - - ctx.EventManager().EmitEvent(types.CreateWithdrawEvent( - callerAddr, - receiverAddr, - pairID.Token0, - pairID.Token1, - tickIndex, - fee, - outAmount0, - outAmount1, - sharesToRemove, - )) - } - - if totalReserve0ToRemove.IsPositive() { - coin0 := sdk.NewCoin(pairID.Token0, totalReserve0ToRemove) - - err := k.bankKeeper.SendCoinsFromModuleToAccount( - ctx, - types.ModuleName, - receiverAddr, - sdk.Coins{coin0}, - ) - if err != nil { - return err - } - } - - // sends totalReserve1ToRemove to receiverAddr - if totalReserve1ToRemove.IsPositive() { - coin1 := sdk.NewCoin(pairID.Token1, totalReserve1ToRemove) - err := k.bankKeeper.SendCoinsFromModuleToAccount( - ctx, - types.ModuleName, - receiverAddr, - sdk.Coins{coin1}, - ) - if err != nil { - return err - } - } - - return nil -} - -func (k Keeper) MultiHopSwapCore( - goCtx context.Context, - amountIn math.Int, - routes []*types.MultiHopRoute, - exitLimitPrice math_utils.PrecDec, - pickBestRoute bool, - callerAddr sdk.AccAddress, - receiverAddr sdk.AccAddress, -) (coinOut sdk.Coin, err error) { - ctx := sdk.UnwrapSDKContext(goCtx) - var routeErrors []error - initialInCoin := sdk.NewCoin(routes[0].Hops[0], amountIn) - stepCache := make(map[multihopCacheKey]StepResult) - var bestRoute struct { - write func() - coinOut sdk.Coin - route []string - dust sdk.Coins - } - bestRoute.coinOut = sdk.Coin{Amount: math.ZeroInt()} - - for _, route := range routes { - routeDust, routeCoinOut, writeRoute, err := k.RunMultihopRoute( - ctx, - *route, - initialInCoin, - exitLimitPrice, - stepCache, - ) - if err != nil { - routeErrors = append(routeErrors, err) - continue - } - - if !pickBestRoute || bestRoute.coinOut.Amount.LT(routeCoinOut.Amount) { - bestRoute.coinOut = routeCoinOut - bestRoute.write = writeRoute - bestRoute.route = route.Hops - bestRoute.dust = routeDust - } - if !pickBestRoute { - break - } - } - - if len(routeErrors) == len(routes) { - // All routes have failed - - allErr := errors.Join(append([]error{types.ErrAllMultiHopRoutesFailed}, routeErrors...)...) - - return sdk.Coin{}, allErr - } - - bestRoute.write() - err = k.bankKeeper.SendCoinsFromAccountToModule( - ctx, - callerAddr, - types.ModuleName, - sdk.Coins{initialInCoin}, - ) - if err != nil { - return sdk.Coin{}, err - } - - // send both dust and coinOut to receiver - // note that dust can be multiple coins collected from multiple hops. - err = k.bankKeeper.SendCoinsFromModuleToAccount( - ctx, - types.ModuleName, - receiverAddr, - bestRoute.dust.Add(bestRoute.coinOut), - ) - if err != nil { - return sdk.Coin{}, fmt.Errorf("failed to send out coin and dust to the receiver: %w", err) - } - - ctx.EventManager().EmitEvent(types.CreateMultihopSwapEvent( - callerAddr, - receiverAddr, - initialInCoin.Denom, - bestRoute.coinOut.Denom, - initialInCoin.Amount, - bestRoute.coinOut.Amount, - bestRoute.route, - bestRoute.dust, - )) - - return bestRoute.coinOut, nil -} - -// PlaceLimitOrderCore handles MsgPlaceLimitOrder, initializing (tick, pair) data structures if needed, calculating and -// storing information for a new limit order at a specific tick. -func (k Keeper) PlaceLimitOrderCore( - goCtx context.Context, - tokenIn string, - tokenOut string, - amountIn math.Int, - tickIndexInToOut int64, - orderType types.LimitOrderType, - goodTil *time.Time, - maxAmountOut *math.Int, - callerAddr sdk.AccAddress, - receiverAddr sdk.AccAddress, -) (trancheKey string, totalInCoin, swapInCoin, swapOutCoin sdk.Coin, err error) { - ctx := sdk.UnwrapSDKContext(goCtx) - - var pairID *types.PairID - pairID, err = types.NewPairIDFromUnsorted(tokenIn, tokenOut) - if err != nil { - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err - } - - amountLeft := amountIn - - // This is ok because tokenOut is provided to the constructor of PairID above - takerTradePairID := pairID.MustTradePairIDFromMaker(tokenOut) - var limitPrice math_utils.PrecDec - limitPrice, err = types.CalcPrice(tickIndexInToOut) - if err != nil { - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err - } - - // Ensure that after rounding user will get at least 1 token out. - err = types.ValidateFairOutput(amountIn, limitPrice) - if err != nil { - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err - } - - var orderFilled bool - if orderType.IsTakerOnly() { - swapInCoin, swapOutCoin, err = k.TakerLimitOrderSwap(ctx, *takerTradePairID, amountIn, maxAmountOut, limitPrice, orderType) - } else { - swapInCoin, swapOutCoin, orderFilled, err = k.MakerLimitOrderSwap(ctx, *takerTradePairID, amountIn, limitPrice) - } - if err != nil { - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err - } - - totalIn := swapInCoin.Amount - amountLeft = amountLeft.Sub(swapInCoin.Amount) - - if swapOutCoin.IsPositive() { - err = k.bankKeeper.SendCoinsFromModuleToAccount( - ctx, - types.ModuleName, - receiverAddr, - sdk.Coins{swapOutCoin}, - ) - if err != nil { - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err - } - } - - // This is ok because pairID was constructed from tokenIn above. - makerTradePairID := pairID.MustTradePairIDFromMaker(tokenIn) - makerTickIndexTakerToMaker := tickIndexInToOut * -1 - var placeTranche *types.LimitOrderTranche - placeTranche, err = k.GetOrInitPlaceTranche( - ctx, - makerTradePairID, - makerTickIndexTakerToMaker, - goodTil, - orderType, - ) - if err != nil { - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err - } - - trancheKey = placeTranche.Key.TrancheKey - trancheUser := k.GetOrInitLimitOrderTrancheUser( - ctx, - makerTradePairID, - makerTickIndexTakerToMaker, - trancheKey, - orderType, - receiverAddr.String(), - ) - - sharesIssued := math.ZeroInt() - // FOR GTC, JIT & GoodTil try to place a maker limitOrder with remaining Amount - if amountLeft.IsPositive() && !orderFilled && - (orderType.IsGTC() || orderType.IsJIT() || orderType.IsGoodTil()) { - - // Ensure that the maker portion will generate at least 1 token of output - // NOTE: This does mean that a successful taker leg of the trade will be thrown away since the entire tx will fail. - // In most circumstances this seems preferable to executing the taker leg and exiting early before placing a maker - // order with the remaining liquidity. - err = types.ValidateFairOutput(amountLeft, limitPrice) - if err != nil { - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err - } - placeTranche.PlaceMakerLimitOrder(amountLeft) - trancheUser.SharesOwned = trancheUser.SharesOwned.Add(amountLeft) - - if orderType.HasExpiration() { - goodTilRecord := NewLimitOrderExpiration(placeTranche) - k.SetLimitOrderExpiration(ctx, goodTilRecord) - ctx.GasMeter().ConsumeGas(types.ExpiringLimitOrderGas, "Expiring LimitOrder Fee") - } - - k.SaveTranche(ctx, placeTranche) - - totalIn = totalIn.Add(amountLeft) - sharesIssued = amountLeft - } - - k.SaveTrancheUser(ctx, trancheUser) - - if totalIn.IsPositive() { - totalInCoin = sdk.NewCoin(tokenIn, totalIn) - - err = k.bankKeeper.SendCoinsFromAccountToModule( - ctx, - callerAddr, - types.ModuleName, - sdk.Coins{totalInCoin}, - ) - if err != nil { - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err - } - } - - if orderType.IsJIT() { - err = k.AssertCanPlaceJIT(ctx) - if err != nil { - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err - } - k.IncrementJITsInBlock(ctx) - } - - ctx.EventManager().EmitEvent(types.CreatePlaceLimitOrderEvent( - callerAddr, - receiverAddr, - pairID.Token0, - pairID.Token1, - tokenIn, - tokenOut, - totalIn, - tickIndexInToOut, - orderType.String(), - sharesIssued, - trancheKey, - )) - - return trancheKey, totalInCoin, swapInCoin, swapOutCoin, nil -} - -// CancelLimitOrderCore handles MsgCancelLimitOrder, removing a specified number of shares from a limit order -// and returning the respective amount in terms of the reserve to the user. -func (k Keeper) CancelLimitOrderCore( - goCtx context.Context, - trancheKey string, - callerAddr sdk.AccAddress, -) error { - ctx := sdk.UnwrapSDKContext(goCtx) - - trancheUser, found := k.GetLimitOrderTrancheUser(ctx, callerAddr.String(), trancheKey) - if !found { - return types.ErrActiveLimitOrderNotFound - } - - tradePairID, tickIndex := trancheUser.TradePairId, trancheUser.TickIndexTakerToMaker - tranche := k.GetLimitOrderTranche( - ctx, - &types.LimitOrderTrancheKey{ - TradePairId: tradePairID, - TickIndexTakerToMaker: tickIndex, - TrancheKey: trancheKey, - }, - ) - if tranche == nil { - return types.ErrActiveLimitOrderNotFound - } - - amountToCancel := tranche.RemoveTokenIn(trancheUser) - trancheUser.SharesCancelled = trancheUser.SharesCancelled.Add(amountToCancel) - - if amountToCancel.IsPositive() { - coinOut := sdk.NewCoin(tradePairID.MakerDenom, amountToCancel) - - err := k.bankKeeper.SendCoinsFromModuleToAccount( - ctx, - types.ModuleName, - callerAddr, - sdk.Coins{coinOut}, - ) - if err != nil { - return err - } - - k.SaveTrancheUser(ctx, trancheUser) - k.SaveTranche(ctx, tranche) - - if trancheUser.OrderType.HasExpiration() { - k.RemoveLimitOrderExpiration(ctx, *tranche.ExpirationTime, tranche.Key.KeyMarshal()) - } - } else { - return sdkerrors.Wrapf(types.ErrCancelEmptyLimitOrder, "%s", tranche.Key.TrancheKey) - } - - pairID := tradePairID.MustPairID() - ctx.EventManager().EmitEvent(types.CancelLimitOrderEvent( - callerAddr, - pairID.Token0, - pairID.Token1, - tradePairID.MakerDenom, - tradePairID.TakerDenom, - amountToCancel, - trancheKey, - )) - - return nil -} - -// WithdrawFilledLimitOrderCore handles MsgWithdrawFilledLimitOrder, calculates and sends filled liquidity from module to user -// for a limit order based on amount wished to receive. -func (k Keeper) WithdrawFilledLimitOrderCore( - goCtx context.Context, - trancheKey string, - callerAddr sdk.AccAddress, -) error { - ctx := sdk.UnwrapSDKContext(goCtx) - - trancheUser, found := k.GetLimitOrderTrancheUser( - ctx, - callerAddr.String(), - trancheKey, - ) - if !found { - return sdkerrors.Wrapf(types.ErrValidLimitOrderTrancheNotFound, "%s", trancheKey) - } - - tradePairID, tickIndex := trancheUser.TradePairId, trancheUser.TickIndexTakerToMaker - pairID := tradePairID.MustPairID() - - tranche, wasFilled, found := k.FindLimitOrderTranche( - ctx, - &types.LimitOrderTrancheKey{ - TradePairId: tradePairID, - TickIndexTakerToMaker: tickIndex, - TrancheKey: trancheKey, - }, - ) - - amountOutTokenOut := math.ZeroInt() - remainingTokenIn := math.ZeroInt() - // It's possible that a TrancheUser exists but tranche does not if LO was filled entirely through a swap - if found { - var amountOutTokenIn math.Int - amountOutTokenIn, amountOutTokenOut = tranche.Withdraw(trancheUser) - - if wasFilled { - // This is only relevant for inactive JIT and GoodTil limit orders - remainingTokenIn = tranche.RemoveTokenIn(trancheUser) - k.SaveInactiveTranche(ctx, tranche) - - // Treat the removed tokenIn as cancelled shares - trancheUser.SharesCancelled = trancheUser.SharesCancelled.Add(remainingTokenIn) - - } else { - k.SetLimitOrderTranche(ctx, tranche) - } - - trancheUser.SharesWithdrawn = trancheUser.SharesWithdrawn.Add(amountOutTokenIn) - } - - k.SaveTrancheUser(ctx, trancheUser) - - if amountOutTokenOut.IsPositive() || remainingTokenIn.IsPositive() { - coinTakerDenomOut := sdk.NewCoin(tradePairID.TakerDenom, amountOutTokenOut) - coinMakerDenomRefund := sdk.NewCoin(tradePairID.MakerDenom, remainingTokenIn) - coins := sdk.NewCoins(coinTakerDenomOut, coinMakerDenomRefund) - if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, callerAddr, coins); err != nil { - return err - } - } else { - return types.ErrWithdrawEmptyLimitOrder - } - - ctx.EventManager().EmitEvent(types.WithdrawFilledLimitOrderEvent( - callerAddr, - pairID.Token0, - pairID.Token1, - tradePairID.MakerDenom, - tradePairID.TakerDenom, - amountOutTokenOut, - trancheKey, - )) - - return nil -} diff --git a/x/dex/keeper/core_helper.go b/x/dex/keeper/core_helper.go index b38abe185..e608f3c25 100644 --- a/x/dex/keeper/core_helper.go +++ b/x/dex/keeper/core_helper.go @@ -76,7 +76,7 @@ func (k Keeper) ValidateFee(ctx sdk.Context, fee uint64) error { } func (k Keeper) GetMaxJITsPerBlock(ctx sdk.Context) uint64 { - return k.GetParams(ctx).Max_JITsPerBlock + return k.GetParams(ctx).MaxJitsPerBlock } func (k Keeper) AssertCanPlaceJIT(ctx sdk.Context) error { @@ -142,16 +142,14 @@ func (k Keeper) MintShares(ctx sdk.Context, addr sdk.AccAddress, sharesCoins sdk func (k Keeper) BurnShares( ctx sdk.Context, addr sdk.AccAddress, - amount math.Int, - sharesID string, + coins sdk.Coins, ) error { - sharesCoins := sdk.Coins{sdk.NewCoin(sharesID, amount)} // transfer tokens to module - if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, addr, types.ModuleName, sharesCoins); err != nil { + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, addr, types.ModuleName, coins); err != nil { return err } // burn tokens - err := k.bankKeeper.BurnCoins(ctx, types.ModuleName, sharesCoins) + err := k.bankKeeper.BurnCoins(ctx, types.ModuleName, coins) return err } diff --git a/x/dex/keeper/deposit.go b/x/dex/keeper/deposit.go new file mode 100644 index 000000000..6bb9bcf1e --- /dev/null +++ b/x/dex/keeper/deposit.go @@ -0,0 +1,166 @@ +package keeper + +import ( + "context" + + sdkerrors "cosmossdk.io/errors" + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/utils" + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +// DepositCore handles core logic for MsgDeposit including bank operations and event emissions +func (k Keeper) DepositCore( + goCtx context.Context, + pairID *types.PairID, + callerAddr sdk.AccAddress, + receiverAddr sdk.AccAddress, + amounts0 []math.Int, + amounts1 []math.Int, + tickIndices []int64, + fees []uint64, + options []*types.DepositOptions, +) (amounts0Deposit, amounts1Deposit []math.Int, sharesIssued sdk.Coins, failedDeposits []*types.FailedDeposit, err error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + amounts0Deposited, + amounts1Deposited, + totalAmountReserve0, + totalAmountReserve1, + sharesIssued, + events, + failedDeposits, + err := k.ExecuteDeposit(ctx, pairID, callerAddr, receiverAddr, amounts0, amounts1, tickIndices, fees, options) + if err != nil { + return nil, nil, nil, failedDeposits, err + } + + ctx.EventManager().EmitEvents(events) + + if totalAmountReserve0.IsPositive() { + coin0 := sdk.NewCoin(pairID.Token0, totalAmountReserve0) + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, callerAddr, types.ModuleName, sdk.Coins{coin0}); err != nil { + return nil, nil, nil, nil, err + } + } + + if totalAmountReserve1.IsPositive() { + coin1 := sdk.NewCoin(pairID.Token1, totalAmountReserve1) + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, callerAddr, types.ModuleName, sdk.Coins{coin1}); err != nil { + return nil, nil, nil, nil, err + } + } + + if err := k.MintShares(ctx, receiverAddr, sharesIssued); err != nil { + return nil, nil, nil, nil, err + } + + return amounts0Deposited, amounts1Deposited, sharesIssued, failedDeposits, nil +} + +// ExecuteDeposit handles core logic for deposits -- checking and initializing data structures (tick, pair), calculating +// shares based on amount deposited. IT DOES NOT PERFORM ANY BANKING OPERATIONS. +func (k Keeper) ExecuteDeposit( + ctx sdk.Context, + pairID *types.PairID, + callerAddr sdk.AccAddress, + receiverAddr sdk.AccAddress, + amounts0 []math.Int, + amounts1 []math.Int, + tickIndices []int64, + fees []uint64, + options []*types.DepositOptions) ( + amounts0Deposit, amounts1Deposit []math.Int, + totalAmountReserve0, totalAmountReserve1 math.Int, + sharesIssued sdk.Coins, + events sdk.Events, + failedDeposits []*types.FailedDeposit, + err error, +) { + totalAmountReserve0 = math.ZeroInt() + totalAmountReserve1 = math.ZeroInt() + amounts0Deposited := make([]math.Int, len(amounts0)) + amounts1Deposited := make([]math.Int, len(amounts1)) + sharesIssued = sdk.Coins{} + + for i := 0; i < len(amounts0); i++ { + amounts0Deposited[i] = math.ZeroInt() + amounts1Deposited[i] = math.ZeroInt() + } + + for i, amount0 := range amounts0 { + amount1 := amounts1[i] + tickIndex := tickIndices[i] + fee := fees[i] + option := options[i] + if option == nil { + option = &types.DepositOptions{} + } + autoswap := !option.DisableAutoswap + + if err := k.ValidateFee(ctx, fee); err != nil { + return nil, nil, math.ZeroInt(), math.ZeroInt(), nil, nil, nil, err + } + + if k.IsPoolBehindEnemyLines(ctx, pairID, tickIndex, fee, amount0, amount1) { + err = sdkerrors.Wrapf(types.ErrDepositBehindEnemyLines, + "deposit failed at tick %d fee %d", tickIndex, fee) + if option.FailTxOnBel { + return nil, nil, math.ZeroInt(), math.ZeroInt(), nil, nil, nil, err + } + failedDeposits = append(failedDeposits, &types.FailedDeposit{DepositIdx: uint64(i), Error: err.Error()}) + continue + } + + pool, err := k.GetOrInitPool( + ctx, + pairID, + tickIndex, + fee, + ) + if err != nil { + return nil, nil, math.ZeroInt(), math.ZeroInt(), nil, nil, nil, err + } + + existingShares := k.bankKeeper.GetSupply(ctx, pool.GetPoolDenom()).Amount + + inAmount0, inAmount1, outShares := pool.Deposit(amount0, amount1, existingShares, autoswap) + + k.SetPool(ctx, pool) + + if inAmount0.IsZero() && inAmount1.IsZero() { + return nil, nil, math.ZeroInt(), math.ZeroInt(), nil, nil, nil, types.ErrZeroTrueDeposit + } + + if outShares.IsZero() { + return nil, nil, math.ZeroInt(), math.ZeroInt(), nil, nil, nil, types.ErrDepositShareUnderflow + } + + sharesIssued = append(sharesIssued, outShares) + + amounts0Deposited[i] = inAmount0 + amounts1Deposited[i] = inAmount1 + totalAmountReserve0 = totalAmountReserve0.Add(inAmount0) + totalAmountReserve1 = totalAmountReserve1.Add(inAmount1) + + depositEvent := types.CreateDepositEvent( + callerAddr, + receiverAddr, + pairID.Token0, + pairID.Token1, + tickIndex, + fee, + inAmount0, + inAmount1, + outShares.Amount, + ) + events = append(events, depositEvent) + } + + // At this point shares issued is not sorted and may have duplicates + // we must sanitize to convert it to a valid set of coins + sharesIssued = utils.SanitizeCoins(sharesIssued) + return amounts0Deposit, amounts1Deposit, totalAmountReserve0, totalAmountReserve1, sharesIssued, events, failedDeposits, nil +} diff --git a/x/dex/keeper/integration_placelimitorder_test.go b/x/dex/keeper/integration_placelimitorder_test.go index f03af09db..fcd074bdc 100644 --- a/x/dex/keeper/integration_placelimitorder_test.go +++ b/x/dex/keeper/integration_placelimitorder_test.go @@ -7,6 +7,7 @@ import ( sdkmath "cosmossdk.io/math" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + math_utils "github.com/neutron-org/neutron/v4/utils/math" "github.com/neutron-org/neutron/v4/x/dex/types" ) @@ -346,6 +347,41 @@ func (s *DexTestSuite) TestPlaceLimitOrderTooSmallAfterSwapFails() { s.assertAliceLimitSellFails(types.ErrTradeTooSmall, "TokenA", 149_149, 5) } +func (s *DexTestSuite) TestPlaceLimitOrderWithPrice0To1() { + s.fundAliceBalances(10, 0) + s.fundBobBalances(0, 100) + + // GIVEN + // Alice place LO at price ~10.0 + trancheKey0 := s.limitSellsWithPrice(s.alice, "TokenA", math_utils.NewPrecDec(10), 10) + + // WHEN bob swaps through all of Alice's LO + s.bobLimitSells("TokenB", -23078, 100, types.LimitOrderType_IMMEDIATE_OR_CANCEL) + s.aliceWithdrawsLimitSell(trancheKey0) + + // THEN alice gets out ~100 TOKENB and bob gets ~10 TOKENA + s.assertAliceBalancesInt(sdkmath.ZeroInt(), sdkmath.NewInt(99_999_977)) + s.assertBobBalancesInt(sdkmath.NewInt(10000000), sdkmath.NewInt(22)) +} + +func (s *DexTestSuite) TestPlaceLimitOrderWithPrice1To0() { + s.fundAliceBalances(0, 200) + s.fundBobBalances(10, 0) + makerPrice := math_utils.MustNewPrecDecFromStr("0.25") + takerPrice := math_utils.MustNewPrecDecFromStr("3.99") + // GIVEN + // Alice place LO at price ~.25 + trancheKey0 := s.limitSellsWithPrice(s.alice, "TokenB", makerPrice, 200) + + // WHEN bob swaps through Alice's LO + s.limitSellsWithPrice(s.bob, "TokenA", takerPrice, 10) + s.aliceWithdrawsLimitSell(trancheKey0) + + // THEN alice gets out ~10 TOKENA and bob gets ~40 TOKENB + s.assertAliceBalancesInt(sdkmath.NewInt(9999999), sdkmath.ZeroInt()) + s.assertBobBalancesInt(sdkmath.ZeroInt(), sdkmath.NewInt(39997453)) +} + // Fill Or Kill limit orders /////////////////////////////////////////////////////////// func (s *DexTestSuite) TestPlaceLimitOrderFoKNoLiq() { s.fundAliceBalances(10, 0) diff --git a/x/dex/keeper/limit_order_expiration.go b/x/dex/keeper/limit_order_expiration.go index cb53f7e6d..f9127a38f 100644 --- a/x/dex/keeper/limit_order_expiration.go +++ b/x/dex/keeper/limit_order_expiration.go @@ -140,7 +140,7 @@ func (k Keeper) PurgeExpiredLimitOrders(ctx sdk.Context, curTime time.Time) { return } - + var pairID types.TradePairID if _, ok := archivedTranches[string(val.TrancheRef)]; !ok { tranche, found := k.GetLimitOrderTrancheByKey(ctx, val.TrancheRef) if found { @@ -149,10 +149,12 @@ func (k Keeper) PurgeExpiredLimitOrders(ctx sdk.Context, curTime time.Time) { k.RemoveLimitOrderTranche(ctx, tranche.Key) archivedTranches[string(val.TrancheRef)] = true + pairID = *tranche.Key.TradePairId ctx.EventManager().EmitEvent(types.CreateTickUpdateLimitOrderTranchePurge(tranche)) } } k.RemoveLimitOrderExpirationByKey(ctx, iterator.Key()) + ctx.EventManager().EmitEvents(types.GetEventsDecExpiringOrders(&pairID)) } } diff --git a/x/dex/keeper/limit_order_tranche.go b/x/dex/keeper/limit_order_tranche.go index fba22b3f2..5ffaee303 100644 --- a/x/dex/keeper/limit_order_tranche.go +++ b/x/dex/keeper/limit_order_tranche.go @@ -57,6 +57,7 @@ func (k Keeper) SaveTranche(ctx sdk.Context, tranche *types.LimitOrderTranche) { } else { k.SetInactiveLimitOrderTranche(ctx, tranche) k.RemoveLimitOrderTranche(ctx, tranche.Key) + ctx.EventManager().EmitEvents(types.GetEventsDecTotalOrders(tranche.Key.TradePairId)) } ctx.EventManager().EmitEvent(types.CreateTickUpdateLimitOrderTranche(tranche)) @@ -221,6 +222,7 @@ func (k Keeper) GetOrInitPlaceTranche(ctx sdk.Context, TrancheKey: NewTrancheKey(ctx), } placeTranche, err = NewLimitOrderTranche(limitOrderTrancheKey, &JITGoodTilTime) + ctx.EventManager().EmitEvents(types.GetEventsIncTotalOrders(tradePairID)) case types.LimitOrderType_GOOD_TIL_TIME: limitOrderTrancheKey := &types.LimitOrderTrancheKey{ TradePairId: tradePairID, @@ -228,6 +230,7 @@ func (k Keeper) GetOrInitPlaceTranche(ctx sdk.Context, TrancheKey: NewTrancheKey(ctx), } placeTranche, err = NewLimitOrderTranche(limitOrderTrancheKey, goodTil) + ctx.EventManager().EmitEvents(types.GetEventsIncExpiringOrders(tradePairID)) default: placeTranche = k.GetGTCPlaceTranche(ctx, tradePairID, tickIndexTakerToMaker) if placeTranche == nil { @@ -237,6 +240,7 @@ func (k Keeper) GetOrInitPlaceTranche(ctx sdk.Context, TrancheKey: NewTrancheKey(ctx), } placeTranche, err = NewLimitOrderTranche(limitOrderTrancheKey, nil) + ctx.EventManager().EmitEvents(types.GetEventsIncTotalOrders(tradePairID)) if err != nil { return nil, err } diff --git a/x/dex/keeper/liquidity.go b/x/dex/keeper/liquidity.go index af9ec980c..145657505 100644 --- a/x/dex/keeper/liquidity.go +++ b/x/dex/keeper/liquidity.go @@ -15,6 +15,7 @@ func (k Keeper) Swap( maxAmountMakerDenom *math.Int, limitPrice *math_utils.PrecDec, ) (totalTakerCoin, totalMakerCoin sdk.Coin, orderFilled bool, err error) { + gasBefore := ctx.GasMeter().GasConsumed() useMaxOut := maxAmountMakerDenom != nil var remainingMakerDenom *math.Int if useMaxOut { @@ -73,6 +74,9 @@ func (k Keeper) Swap( } totalTakerDenom := maxAmountTakerDenom.Sub(remainingTakerDenom) + gasAfter := ctx.GasMeter().GasConsumed() + ctx.EventManager().EmitEvents(types.GetEventsGasConsumed(gasBefore, gasAfter)) + return sdk.NewCoin( tradePairID.TakerDenom, totalTakerDenom, diff --git a/x/dex/keeper/migrations.go b/x/dex/keeper/migrations.go index f08b14797..ef9a8c2bb 100644 --- a/x/dex/keeper/migrations.go +++ b/x/dex/keeper/migrations.go @@ -4,6 +4,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" v3 "github.com/neutron-org/neutron/v4/x/dex/migrations/v3" + v4 "github.com/neutron-org/neutron/v4/x/dex/migrations/v4" ) // Migrator is a struct for handling in-place store migrations. @@ -20,3 +21,8 @@ func NewMigrator(keeper Keeper) Migrator { func (m Migrator) Migrate2to3(ctx sdk.Context) error { return v3.MigrateStore(ctx, m.keeper.cdc, m.keeper.storeKey) } + +// Migrate2to3 migrates from version 3 to 4. +func (m Migrator) Migrate3to4(ctx sdk.Context) error { + return v4.MigrateStore(ctx, m.keeper.cdc, m.keeper.storeKey) +} diff --git a/x/dex/keeper/msg_server.go b/x/dex/keeper/msg_server.go index 4c653ee62..1211cc57b 100644 --- a/x/dex/keeper/msg_server.go +++ b/x/dex/keeper/msg_server.go @@ -129,12 +129,19 @@ func (k MsgServer) PlaceLimitOrder( if err != nil { return &types.MsgPlaceLimitOrderResponse{}, err } + tickIndex := msg.TickIndexInToOut + if msg.LimitSellPrice != nil { + tickIndex, err = types.CalcTickIndexFromPrice(*msg.LimitSellPrice) + if err != nil { + return &types.MsgPlaceLimitOrderResponse{}, errors.Wrapf(err, "invalid LimitSellPrice %s", msg.LimitSellPrice.String()) + } + } trancheKey, coinIn, _, coinOutSwap, err := k.PlaceLimitOrderCore( goCtx, msg.TokenIn, msg.TokenOut, msg.AmountIn, - msg.TickIndexInToOut, + tickIndex, msg.OrderType, msg.ExpirationTime, msg.MaxAmountOut, @@ -231,7 +238,6 @@ func (k MsgServer) MultiHopSwap( if err != nil { return &types.MsgMultiHopSwapResponse{}, err } - return &types.MsgMultiHopSwapResponse{CoinOut: coinOut}, nil } diff --git a/x/dex/keeper/msg_server_test.go b/x/dex/keeper/msg_server_test.go index da77ce164..1dfe3f487 100644 --- a/x/dex/keeper/msg_server_test.go +++ b/x/dex/keeper/msg_server_test.go @@ -398,6 +398,29 @@ func (s *DexTestSuite) limitSellsWithMaxOut( return msg.TrancheKey } +func (s *DexTestSuite) limitSellsWithPrice( + account sdk.AccAddress, + tokenIn string, + price math_utils.PrecDec, + amountIn int, +) string { + tokenIn, tokenOut := dexkeeper.GetInOutTokens(tokenIn, "TokenA", "TokenB") + + msg, err := s.msgServer.PlaceLimitOrder(s.Ctx, &types.MsgPlaceLimitOrder{ + Creator: account.String(), + Receiver: account.String(), + TokenIn: tokenIn, + TokenOut: tokenOut, + LimitSellPrice: &price, + AmountIn: sdkmath.NewInt(int64(amountIn)).Mul(denomMultiple), + OrderType: types.LimitOrderType_GOOD_TIL_CANCELLED, + }) + + s.Assert().NoError(err) + + return msg.TrancheKey +} + func (s *DexTestSuite) limitSellsInt( account sdk.AccAddress, tokenIn string, @@ -1548,6 +1571,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: "invalid_address", Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{0}, TickIndexesAToB: []int64{0}, AmountsA: []sdkmath.Int{sdkmath.OneInt()}, @@ -1561,6 +1586,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: "invalid address", + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{0}, TickIndexesAToB: []int64{0}, AmountsA: []sdkmath.Int{sdkmath.OneInt()}, @@ -1569,11 +1596,58 @@ func TestMsgDepositValidate(t *testing.T) { }, types.ErrInvalidAddress, }, + { + "invalid denom A", + types.MsgDeposit{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenA: "er", + TokenB: "factory/neutron1rxel5kdhu089fdk4xugmryx0y2wzjx8rqsa6hu/validDenom2", + Fees: []uint64{1}, + TickIndexesAToB: []int64{1}, + AmountsA: []sdkmath.Int{sdkmath.OneInt()}, + AmountsB: []sdkmath.Int{sdkmath.OneInt()}, + Options: []*types.DepositOptions{{DisableAutoswap: false}}, + }, + types.ErrInvalidDenom, + }, + { + "invalid denom B", + types.MsgDeposit{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "er", + Fees: []uint64{1}, + TickIndexesAToB: []int64{1}, + AmountsA: []sdkmath.Int{sdkmath.OneInt()}, + AmountsB: []sdkmath.Int{sdkmath.OneInt()}, + Options: []*types.DepositOptions{{DisableAutoswap: false}}, + }, + types.ErrInvalidDenom, + }, + { + "denoms match", + types.MsgDeposit{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenA", + Fees: []uint64{1}, + TickIndexesAToB: []int64{1}, + AmountsA: []sdkmath.Int{sdkmath.OneInt()}, + AmountsB: []sdkmath.Int{sdkmath.OneInt()}, + Options: []*types.DepositOptions{{DisableAutoswap: false}}, + }, + types.ErrInvalidDenom, + }, { "invalid fee indexes length", types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "factory/neutron1rxel5kdhu089fdk4xugmryx0y2wzjx8rqsa6hu/validDenom2", Fees: []uint64{0}, TickIndexesAToB: []int64{}, AmountsA: []sdkmath.Int{}, @@ -1587,6 +1661,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{}, TickIndexesAToB: []int64{0}, AmountsA: []sdkmath.Int{}, @@ -1600,6 +1676,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{}, TickIndexesAToB: []int64{}, AmountsA: []sdkmath.Int{sdkmath.OneInt()}, @@ -1613,6 +1691,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{}, TickIndexesAToB: []int64{}, AmountsA: []sdkmath.Int{}, @@ -1626,6 +1706,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{1}, TickIndexesAToB: []int64{1}, AmountsA: []sdkmath.Int{sdkmath.OneInt()}, @@ -1639,6 +1721,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{}, TickIndexesAToB: []int64{}, AmountsA: []sdkmath.Int{}, @@ -1652,6 +1736,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{1, 2, 1}, TickIndexesAToB: []int64{0, 0, 0}, AmountsA: []sdkmath.Int{sdkmath.OneInt(), sdkmath.OneInt(), sdkmath.OneInt()}, @@ -1665,6 +1751,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{0}, TickIndexesAToB: []int64{0}, AmountsA: []sdkmath.Int{sdkmath.ZeroInt()}, @@ -1678,6 +1766,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{3}, TickIndexesAToB: []int64{559678}, AmountsA: []sdkmath.Int{sdkmath.OneInt()}, @@ -1691,6 +1781,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{50}, TickIndexesAToB: []int64{-559631}, AmountsA: []sdkmath.Int{sdkmath.OneInt()}, @@ -1704,6 +1796,8 @@ func TestMsgDepositValidate(t *testing.T) { types.MsgDeposit{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{559681}, TickIndexesAToB: []int64{0}, AmountsA: []sdkmath.Int{sdkmath.OneInt()}, @@ -1738,6 +1832,8 @@ func TestMsgWithdrawalValidate(t *testing.T) { types.MsgWithdrawal{ Creator: "invalid_address", Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{0}, TickIndexesAToB: []int64{0}, SharesToRemove: []sdkmath.Int{sdkmath.OneInt()}, @@ -1749,17 +1845,47 @@ func TestMsgWithdrawalValidate(t *testing.T) { types.MsgWithdrawal{ Creator: sample.AccAddress(), Receiver: "invalid_address", + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{0}, TickIndexesAToB: []int64{0}, SharesToRemove: []sdkmath.Int{sdkmath.OneInt()}, }, types.ErrInvalidAddress, }, + { + "invalid TokenA", + types.MsgWithdrawal{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenA: "er", + TokenB: "TokenB", + Fees: []uint64{0}, + TickIndexesAToB: []int64{0}, + SharesToRemove: []sdkmath.Int{sdkmath.OneInt()}, + }, + types.ErrInvalidDenom, + }, + { + "invalid TokenB", + types.MsgWithdrawal{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "er", + Fees: []uint64{0}, + TickIndexesAToB: []int64{0}, + SharesToRemove: []sdkmath.Int{sdkmath.OneInt()}, + }, + types.ErrInvalidDenom, + }, { "invalid fee indexes length", types.MsgWithdrawal{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{}, TickIndexesAToB: []int64{0}, SharesToRemove: []sdkmath.Int{sdkmath.OneInt()}, @@ -1771,6 +1897,8 @@ func TestMsgWithdrawalValidate(t *testing.T) { types.MsgWithdrawal{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{0}, TickIndexesAToB: []int64{}, SharesToRemove: []sdkmath.Int{sdkmath.OneInt()}, @@ -1782,6 +1910,8 @@ func TestMsgWithdrawalValidate(t *testing.T) { types.MsgWithdrawal{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{0}, TickIndexesAToB: []int64{0}, SharesToRemove: []sdkmath.Int{}, @@ -1793,6 +1923,8 @@ func TestMsgWithdrawalValidate(t *testing.T) { types.MsgWithdrawal{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{}, TickIndexesAToB: []int64{}, SharesToRemove: []sdkmath.Int{}, @@ -1804,6 +1936,8 @@ func TestMsgWithdrawalValidate(t *testing.T) { types.MsgWithdrawal{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{0}, TickIndexesAToB: []int64{0}, SharesToRemove: []sdkmath.Int{sdkmath.ZeroInt()}, @@ -1815,6 +1949,8 @@ func TestMsgWithdrawalValidate(t *testing.T) { types.MsgWithdrawal{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{3}, TickIndexesAToB: []int64{559678}, SharesToRemove: []sdkmath.Int{sdkmath.OneInt()}, @@ -1826,6 +1962,8 @@ func TestMsgWithdrawalValidate(t *testing.T) { types.MsgWithdrawal{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{50}, TickIndexesAToB: []int64{-559631}, SharesToRemove: []sdkmath.Int{sdkmath.OneInt()}, @@ -1837,6 +1975,8 @@ func TestMsgWithdrawalValidate(t *testing.T) { types.MsgWithdrawal{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), + TokenA: "TokenA", + TokenB: "TokenB", Fees: []uint64{559681}, TickIndexesAToB: []int64{0}, SharesToRemove: []sdkmath.Int{sdkmath.OneInt()}, @@ -1861,6 +2001,9 @@ func TestMsgPlaceLimitOrderValidate(t *testing.T) { ZEROINT := sdkmath.ZeroInt() ONEINT := sdkmath.OneInt() + TINYDEC := math_utils.MustNewPrecDecFromStr("0.000000000000000000000000494") + HUGEDEC := math_utils.MustNewPrecDecFromStr("2020125331305056766452345.127500016657360222036663652") + FIVEDEC := math_utils.NewPrecDec(5) tests := []struct { name string msg types.MsgPlaceLimitOrder @@ -1890,6 +2033,42 @@ func TestMsgPlaceLimitOrderValidate(t *testing.T) { }, types.ErrInvalidAddress, }, + { + "invalid TokenIn", + types.MsgPlaceLimitOrder{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenIn: "er", + TokenOut: "TokenB", + TickIndexInToOut: 0, + AmountIn: sdkmath.OneInt(), + }, + types.ErrInvalidDenom, + }, + { + "invalid TokenOut", + types.MsgPlaceLimitOrder{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenIn: "TokenA", + TokenOut: "er", + TickIndexInToOut: 0, + AmountIn: sdkmath.OneInt(), + }, + types.ErrInvalidDenom, + }, + { + "denoms match", + types.MsgPlaceLimitOrder{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenIn: "TokenA", + TokenOut: "TokenA", + TickIndexInToOut: 0, + AmountIn: sdkmath.OneInt(), + }, + types.ErrInvalidDenom, + }, { "invalid zero limit order", types.MsgPlaceLimitOrder{ @@ -1956,6 +2135,43 @@ func TestMsgPlaceLimitOrderValidate(t *testing.T) { }, types.ErrTickOutsideRange, }, + { + "price < minPrice", + types.MsgPlaceLimitOrder{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenIn: "TokenA", + TokenOut: "TokenB", + LimitSellPrice: &TINYDEC, + AmountIn: sdkmath.OneInt(), + }, + types.ErrPriceOutsideRange, + }, + { + "price > maxPrice", + types.MsgPlaceLimitOrder{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenIn: "TokenA", + TokenOut: "TokenB", + LimitSellPrice: &HUGEDEC, + AmountIn: sdkmath.OneInt(), + }, + types.ErrPriceOutsideRange, + }, + { + "invalid tickIndexInToOut & LimitSellPrice", + types.MsgPlaceLimitOrder{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + TokenIn: "TokenA", + TokenOut: "TokenB", + LimitSellPrice: &FIVEDEC, + TickIndexInToOut: 6, + AmountIn: sdkmath.OneInt(), + }, + types.ErrInvalidPriceAndTick, + }, } for _, tt := range tests { @@ -2041,7 +2257,7 @@ func TestMsgMultiHopSwapValidate(t *testing.T) { Creator: "invalid_address", Receiver: sample.AccAddress(), Routes: []*types.MultiHopRoute{ - {Hops: []string{"A", "B", "C"}}, + {Hops: []string{"TokenA", "TokenB", "TokenC"}}, }, ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0.9"), }, @@ -2053,7 +2269,7 @@ func TestMsgMultiHopSwapValidate(t *testing.T) { Creator: sample.AccAddress(), Receiver: "invalid_address", Routes: []*types.MultiHopRoute{ - {Hops: []string{"A", "B", "C"}}, + {Hops: []string{"TokenA", "TokenB", "TokenC"}}, }, ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0.9"), }, @@ -2075,8 +2291,8 @@ func TestMsgMultiHopSwapValidate(t *testing.T) { Creator: sample.AccAddress(), Receiver: sample.AccAddress(), Routes: []*types.MultiHopRoute{ - {Hops: []string{"A", "B", "C"}}, - {Hops: []string{"A", "B", "Z"}}, + {Hops: []string{"TokenA", "TokenB", "TokenC"}}, + {Hops: []string{"TokenA", "TokenB", "TokenZ"}}, }, ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0.9"), }, @@ -2087,7 +2303,7 @@ func TestMsgMultiHopSwapValidate(t *testing.T) { types.MsgMultiHopSwap{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), - Routes: []*types.MultiHopRoute{{Hops: []string{"A", "B", "C"}}}, + Routes: []*types.MultiHopRoute{{Hops: []string{"TokenA", "TokenB", "TokenC"}}}, AmountIn: sdkmath.NewInt(-1), ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0.9"), }, @@ -2099,20 +2315,48 @@ func TestMsgMultiHopSwapValidate(t *testing.T) { Creator: sample.AccAddress(), Receiver: sample.AccAddress(), Routes: []*types.MultiHopRoute{ - {Hops: []string{"A", "B", "C"}}, // normal - {Hops: []string{"A", "B", "D", "E", "B", "C"}}, // has cycle + {Hops: []string{"TokenA", "TokenB", "TokenC"}}, // normal + {Hops: []string{"TokenA", "TokenB", "TokenD", "TokenE", "TokenB", "TokenC"}}, // has cycle }, AmountIn: sdkmath.OneInt(), ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0.9"), }, types.ErrCycleInHops, }, + { + "invalid denom in route", + types.MsgMultiHopSwap{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + Routes: []*types.MultiHopRoute{ + {Hops: []string{"TokenA", "TokenB", "TokenC"}}, + {Hops: []string{"TokenA", "TokenB", "TokenD", "TokenE", "er", "TokenC"}}, + }, + AmountIn: sdkmath.OneInt(), + ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0.9"), + }, + types.ErrInvalidDenom, + }, + { + "entry token denom mismatch in route", + types.MsgMultiHopSwap{ + Creator: sample.AccAddress(), + Receiver: sample.AccAddress(), + Routes: []*types.MultiHopRoute{ + {Hops: []string{"TokenA", "TokenB", "TokenC"}}, + {Hops: []string{"TokenD", "TokenB", "TokenC"}}, + }, + AmountIn: sdkmath.OneInt(), + ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0.9"), + }, + types.ErrMultihopEntryTokensMismatch, + }, { "zero exit limit price", types.MsgMultiHopSwap{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), - Routes: []*types.MultiHopRoute{{Hops: []string{"A", "B", "C"}}}, + Routes: []*types.MultiHopRoute{{Hops: []string{"TokenA", "TokenB", "TokenC"}}}, AmountIn: sdkmath.OneInt(), ExitLimitPrice: math_utils.MustNewPrecDecFromStr("0"), }, @@ -2123,7 +2367,7 @@ func TestMsgMultiHopSwapValidate(t *testing.T) { types.MsgMultiHopSwap{ Creator: sample.AccAddress(), Receiver: sample.AccAddress(), - Routes: []*types.MultiHopRoute{{Hops: []string{"A", "B", "C"}}}, + Routes: []*types.MultiHopRoute{{Hops: []string{"TokenA", "TokenB", "TokenC"}}}, AmountIn: sdkmath.OneInt(), ExitLimitPrice: math_utils.MustNewPrecDecFromStr("-0.5"), }, diff --git a/x/dex/keeper/multihop_swap.go b/x/dex/keeper/multihop_swap.go index 54bc23d34..ab1ad4798 100644 --- a/x/dex/keeper/multihop_swap.go +++ b/x/dex/keeper/multihop_swap.go @@ -1,6 +1,8 @@ package keeper import ( + "context" + "errors" "fmt" sdkerrors "cosmossdk.io/errors" @@ -17,6 +19,117 @@ type MultihopStep struct { tradePairID *types.TradePairID } +type MultiHopRouteOutput struct { + write func() + coinOut sdk.Coin + route []string + dust sdk.Coins +} + +// MultiHopSwapCore handles logic for MsgMultihopSwap including bank operations and event emissions. +func (k Keeper) MultiHopSwapCore( + goCtx context.Context, + amountIn math.Int, + routes []*types.MultiHopRoute, + exitLimitPrice math_utils.PrecDec, + pickBestRoute bool, + callerAddr sdk.AccAddress, + receiverAddr sdk.AccAddress, +) (coinOut sdk.Coin, err error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + bestRoute, initialInCoin, err := k.CalulateMultiHopSwap(ctx, amountIn, routes, exitLimitPrice, pickBestRoute) + if err != nil { + return sdk.Coin{}, err + } + + bestRoute.write() + err = k.bankKeeper.SendCoinsFromAccountToModule( + ctx, + callerAddr, + types.ModuleName, + sdk.Coins{initialInCoin}, + ) + if err != nil { + return sdk.Coin{}, err + } + + // send both dust and coinOut to receiver + // note that dust can be multiple coins collected from multiple hops. + err = k.bankKeeper.SendCoinsFromModuleToAccount( + ctx, + types.ModuleName, + receiverAddr, + bestRoute.dust.Add(bestRoute.coinOut), + ) + if err != nil { + return sdk.Coin{}, fmt.Errorf("failed to send out coin and dust to the receiver: %w", err) + } + + ctx.EventManager().EmitEvent(types.CreateMultihopSwapEvent( + callerAddr, + receiverAddr, + initialInCoin.Denom, + bestRoute.coinOut.Denom, + initialInCoin.Amount, + bestRoute.coinOut.Amount, + bestRoute.route, + bestRoute.dust, + )) + + return bestRoute.coinOut, nil +} + +// CalulateMultiHopSwap handles the core logic for MultiHopSwap -- simulating swap operations across all routes (when applicable) +// and picking the best route to execute. It uses a cache and does not modify state. +func (k Keeper) CalulateMultiHopSwap( + ctx sdk.Context, + amountIn math.Int, + routes []*types.MultiHopRoute, + exitLimitPrice math_utils.PrecDec, + pickBestRoute bool, +) (bestRoute MultiHopRouteOutput, initialInCoin sdk.Coin, err error) { + var routeErrors []error + initialInCoin = sdk.NewCoin(routes[0].Hops[0], amountIn) + stepCache := make(map[multihopCacheKey]StepResult) + + bestRoute.coinOut = sdk.Coin{Amount: math.ZeroInt()} + + for _, route := range routes { + routeDust, routeCoinOut, writeRoute, err := k.RunMultihopRoute( + ctx, + *route, + initialInCoin, + exitLimitPrice, + stepCache, + ) + if err != nil { + routeErrors = append(routeErrors, err) + continue + } + + if !pickBestRoute || bestRoute.coinOut.Amount.LT(routeCoinOut.Amount) { + bestRoute.coinOut = routeCoinOut + bestRoute.write = writeRoute + bestRoute.route = route.Hops + bestRoute.dust = routeDust + } + if !pickBestRoute { + break + } + } + + if len(routeErrors) == len(routes) { + // All routes have failed + + allErr := errors.Join(append([]error{types.ErrAllMultiHopRoutesFailed}, routeErrors...)...) + + return MultiHopRouteOutput{}, sdk.Coin{}, allErr + } + + return bestRoute, initialInCoin, nil +} + func (k Keeper) HopsToRouteData( ctx sdk.Context, hops []string, diff --git a/x/dex/keeper/params_test.go b/x/dex/keeper/params_test.go index 8ad077ea9..1e4b112f3 100644 --- a/x/dex/keeper/params_test.go +++ b/x/dex/keeper/params_test.go @@ -22,8 +22,7 @@ func TestSetParams(t *testing.T) { newParams := types.Params{ FeeTiers: []uint64{0, 1}, - MaxTrueTakerSpread: math_utils.MustNewPrecDecFromStr("0.111"), - Max_JITsPerBlock: 0, + MaxJitsPerBlock: 0, GoodTilPurgeAllowance: 0, } err := k.SetParams(ctx, newParams) diff --git a/x/dex/keeper/place_limit_order.go b/x/dex/keeper/place_limit_order.go new file mode 100644 index 000000000..161707765 --- /dev/null +++ b/x/dex/keeper/place_limit_order.go @@ -0,0 +1,194 @@ +package keeper + +import ( + "context" + "time" + + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + math_utils "github.com/neutron-org/neutron/v4/utils/math" + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +// PlaceLimitOrderCore handles the logic for MsgPlaceLimitOrder including bank operations and event emissions. +func (k Keeper) PlaceLimitOrderCore( + goCtx context.Context, + tokenIn string, + tokenOut string, + amountIn math.Int, + tickIndexInToOut int64, + orderType types.LimitOrderType, + goodTil *time.Time, + maxAmountOut *math.Int, + callerAddr sdk.AccAddress, + receiverAddr sdk.AccAddress, +) (trancheKey string, totalInCoin, swapInCoin, swapOutCoin sdk.Coin, err error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + takerTradePairID, err := types.NewTradePairID(tokenIn, tokenOut) + if err != nil { + return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err + } + trancheKey, totalIn, swapInCoin, swapOutCoin, sharesIssued, err := k.ExecutePlaceLimitOrder( + ctx, + takerTradePairID, + amountIn, + tickIndexInToOut, + orderType, + goodTil, + maxAmountOut, + receiverAddr, + ) + if err != nil { + return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err + } + + if swapOutCoin.IsPositive() { + err = k.bankKeeper.SendCoinsFromModuleToAccount( + ctx, + types.ModuleName, + receiverAddr, + sdk.Coins{swapOutCoin}, + ) + if err != nil { + return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err + } + } + + if totalIn.IsPositive() { + totalInCoin = sdk.NewCoin(tokenIn, totalIn) + + err = k.bankKeeper.SendCoinsFromAccountToModule( + ctx, + callerAddr, + types.ModuleName, + sdk.Coins{totalInCoin}, + ) + if err != nil { + return trancheKey, totalInCoin, swapInCoin, swapOutCoin, err + } + } + + // This will never panic because we've already successfully constructed a TradePairID above + pairID := takerTradePairID.MustPairID() + ctx.EventManager().EmitEvent(types.CreatePlaceLimitOrderEvent( + callerAddr, + receiverAddr, + pairID.Token0, + pairID.Token1, + tokenIn, + tokenOut, + totalIn, + tickIndexInToOut, + orderType.String(), + sharesIssued, + trancheKey, + )) + + return trancheKey, totalInCoin, swapInCoin, swapOutCoin, nil +} + +// ExecutePlaceLimitOrder handles the core logic for PlaceLimitOrder -- performing taker a swap +// and (when applicable) adding a maker limit order to the orderbook. +// IT DOES NOT PERFORM ANY BANKING OPERATIONS +func (k Keeper) ExecutePlaceLimitOrder( + ctx sdk.Context, + takerTradePairID *types.TradePairID, + amountIn math.Int, + tickIndexInToOut int64, + orderType types.LimitOrderType, + goodTil *time.Time, + maxAmountOut *math.Int, + receiverAddr sdk.AccAddress, +) (trancheKey string, totalIn math.Int, swapInCoin, swapOutCoin sdk.Coin, sharesIssued math.Int, err error) { + amountLeft := amountIn + + var limitPrice math_utils.PrecDec + limitPrice, err = types.CalcPrice(tickIndexInToOut) + if err != nil { + return trancheKey, totalIn, swapInCoin, swapOutCoin, math.ZeroInt(), err + } + + // Ensure that after rounding user will get at least 1 token out. + err = types.ValidateFairOutput(amountIn, limitPrice) + if err != nil { + return trancheKey, totalIn, swapInCoin, swapOutCoin, math.ZeroInt(), err + } + + var orderFilled bool + if orderType.IsTakerOnly() { + swapInCoin, swapOutCoin, err = k.TakerLimitOrderSwap(ctx, *takerTradePairID, amountIn, maxAmountOut, limitPrice, orderType) + } else { + swapInCoin, swapOutCoin, orderFilled, err = k.MakerLimitOrderSwap(ctx, *takerTradePairID, amountIn, limitPrice) + } + if err != nil { + return trancheKey, totalIn, swapInCoin, swapOutCoin, math.ZeroInt(), err + } + + totalIn = swapInCoin.Amount + amountLeft = amountLeft.Sub(swapInCoin.Amount) + + makerTradePairID := takerTradePairID.Reversed() + makerTickIndexTakerToMaker := tickIndexInToOut * -1 + var placeTranche *types.LimitOrderTranche + placeTranche, err = k.GetOrInitPlaceTranche( + ctx, + makerTradePairID, + makerTickIndexTakerToMaker, + goodTil, + orderType, + ) + if err != nil { + return trancheKey, totalIn, swapInCoin, swapOutCoin, math.ZeroInt(), err + } + + trancheKey = placeTranche.Key.TrancheKey + trancheUser := k.GetOrInitLimitOrderTrancheUser( + ctx, + makerTradePairID, + makerTickIndexTakerToMaker, + trancheKey, + orderType, + receiverAddr.String(), + ) + + // FOR GTC, JIT & GoodTil try to place a maker limitOrder with remaining Amount + if amountLeft.IsPositive() && !orderFilled && + (orderType.IsGTC() || orderType.IsJIT() || orderType.IsGoodTil()) { + + // Ensure that the maker portion will generate at least 1 token of output + // NOTE: This does mean that a successful taker leg of the trade will be thrown away since the entire tx will fail. + // In most circumstances this seems preferable to executing the taker leg and exiting early before placing a maker + // order with the remaining liquidity. + err = types.ValidateFairOutput(amountLeft, limitPrice) + if err != nil { + return trancheKey, totalIn, swapInCoin, swapOutCoin, math.ZeroInt(), err + } + placeTranche.PlaceMakerLimitOrder(amountLeft) + trancheUser.SharesOwned = trancheUser.SharesOwned.Add(amountLeft) + + if orderType.HasExpiration() { + goodTilRecord := NewLimitOrderExpiration(placeTranche) + k.SetLimitOrderExpiration(ctx, goodTilRecord) + ctx.GasMeter().ConsumeGas(types.ExpiringLimitOrderGas, "Expiring LimitOrder Fee") + } + + k.SaveTranche(ctx, placeTranche) + + totalIn = totalIn.Add(amountLeft) + sharesIssued = amountLeft + } + + k.SaveTrancheUser(ctx, trancheUser) + + if orderType.IsJIT() { + err = k.AssertCanPlaceJIT(ctx) + if err != nil { + return trancheKey, totalIn, swapInCoin, swapOutCoin, math.ZeroInt(), err + } + k.IncrementJITsInBlock(ctx) + } + + return trancheKey, totalIn, swapInCoin, swapOutCoin, sharesIssued, nil +} diff --git a/x/dex/keeper/pool.go b/x/dex/keeper/pool.go index f94d280ac..611dbee68 100644 --- a/x/dex/keeper/pool.go +++ b/x/dex/keeper/pool.go @@ -20,7 +20,7 @@ func (k Keeper) GetOrInitPool( if found { return pool, nil } - + ctx.EventManager().EmitEvents(types.GetEventsIncTotalPoolReserves(*pairID)) return k.InitPool(ctx, pairID, centerTickIndexNormalized, fee) } @@ -32,12 +32,12 @@ func (k Keeper) InitPool( ) (pool *types.Pool, err error) { poolID := k.initializePoolMetadata(ctx, pairID, centerTickIndexNormalized, fee) - k.storePoolIDRef(ctx, poolID, pairID, centerTickIndexNormalized, fee) + k.StorePoolIDRef(ctx, poolID, pairID, centerTickIndexNormalized, fee) return types.NewPool(pairID, centerTickIndexNormalized, fee, poolID) } -func (k Keeper) storePoolIDRef( +func (k Keeper) StorePoolIDRef( ctx sdk.Context, poolID uint64, pairID *types.PairID, @@ -149,6 +149,7 @@ func (k Keeper) updatePoolReserves(ctx sdk.Context, reserves *types.PoolReserves if reserves.HasToken() { k.SetPoolReserves(ctx, reserves) } else { + ctx.EventManager().EmitEvents(types.GetEventsDecTotalPoolReserves(*reserves.Key.TradePairId.MustPairID())) k.RemovePoolReserves(ctx, reserves.Key) } } diff --git a/x/dex/keeper/withdraw.go b/x/dex/keeper/withdraw.go new file mode 100644 index 000000000..ff81dd3f1 --- /dev/null +++ b/x/dex/keeper/withdraw.go @@ -0,0 +1,140 @@ +package keeper + +import ( + "context" + + sdkerrors "cosmossdk.io/errors" + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +// WithdrawCore handles logic for MsgWithdrawal including bank operations and event emissions. +func (k Keeper) WithdrawCore( + goCtx context.Context, + pairID *types.PairID, + callerAddr sdk.AccAddress, + receiverAddr sdk.AccAddress, + sharesToRemoveList []math.Int, + tickIndicesNormalized []int64, + fees []uint64, +) error { + ctx := sdk.UnwrapSDKContext(goCtx) + + totalReserve0ToRemove, totalReserve1ToRemove, coinsToBurn, events, err := k.ExecuteWithdraw( + ctx, + pairID, + callerAddr, + receiverAddr, + sharesToRemoveList, + tickIndicesNormalized, + fees, + ) + if err != nil { + return err + } + + ctx.EventManager().EmitEvents(events) + + if err := k.BurnShares(ctx, callerAddr, coinsToBurn); err != nil { + return err + } + + if totalReserve0ToRemove.IsPositive() { + coin0 := sdk.NewCoin(pairID.Token0, totalReserve0ToRemove) + + err := k.bankKeeper.SendCoinsFromModuleToAccount( + ctx, + types.ModuleName, + receiverAddr, + sdk.Coins{coin0}, + ) + ctx.EventManager().EmitEvents(types.GetEventsWithdrawnAmount(sdk.Coins{coin0})) + if err != nil { + return err + } + } + + if totalReserve1ToRemove.IsPositive() { + coin1 := sdk.NewCoin(pairID.Token1, totalReserve1ToRemove) + err := k.bankKeeper.SendCoinsFromModuleToAccount( + ctx, + types.ModuleName, + receiverAddr, + sdk.Coins{coin1}, + ) + ctx.EventManager().EmitEvents(types.GetEventsWithdrawnAmount(sdk.Coins{coin1})) + if err != nil { + return err + } + } + + return nil +} + +// ExecuteWithdraw handles the core Withdraw logic including calculating and withdrawing reserve0,reserve1 from a specified tick +// given a specified number of shares to remove. +// Calculates the amount of reserve0, reserve1 to withdraw based on the percentage of the desired +// number of shares to remove compared to the total number of shares at the given tick. +// IT DOES NOT PERFORM ANY BANKING OPERATIONS. +func (k Keeper) ExecuteWithdraw( + ctx sdk.Context, + pairID *types.PairID, + callerAddr sdk.AccAddress, + receiverAddr sdk.AccAddress, + sharesToRemoveList []math.Int, + tickIndicesNormalized []int64, + fees []uint64, +) (totalReserves0ToRemove, totalReserves1ToRemove math.Int, coinsToBurn sdk.Coins, events sdk.Events, err error) { + totalReserve0ToRemove := math.ZeroInt() + totalReserve1ToRemove := math.ZeroInt() + + for i, fee := range fees { + sharesToRemove := sharesToRemoveList[i] + tickIndex := tickIndicesNormalized[i] + + pool, err := k.GetOrInitPool(ctx, pairID, tickIndex, fee) + if err != nil { + return math.ZeroInt(), math.ZeroInt(), nil, nil, err + } + + poolDenom := pool.GetPoolDenom() + + // TODO: this is a bit hacky. Since it is possible to have multiple withdrawals from the same pool we have to artificially update the bank balance + // In the future we should enforce only one withdraw operation per pool in the message validation + alreadyWithdrawnOfDenom := coinsToBurn.AmountOf(poolDenom) + totalShares := k.bankKeeper.GetSupply(ctx, poolDenom).Amount.Sub(alreadyWithdrawnOfDenom) + if totalShares.LT(sharesToRemove) { + return math.ZeroInt(), math.ZeroInt(), nil, nil, sdkerrors.Wrapf( + types.ErrInsufficientShares, + "%s does not have %s shares of type %s", + callerAddr, + sharesToRemove, + poolDenom, + ) + } + + outAmount0, outAmount1 := pool.Withdraw(sharesToRemove, totalShares) + k.SetPool(ctx, pool) + + totalReserve0ToRemove = totalReserve0ToRemove.Add(outAmount0) + totalReserve1ToRemove = totalReserve1ToRemove.Add(outAmount1) + + coinsToBurn = coinsToBurn.Add(sdk.NewCoin(poolDenom, sharesToRemove)) + + withdrawEvent := types.CreateWithdrawEvent( + callerAddr, + receiverAddr, + pairID.Token0, + pairID.Token1, + tickIndex, + fee, + outAmount0, + outAmount1, + sharesToRemove, + ) + events = append(events, withdrawEvent) + } + return totalReserve0ToRemove, totalReserve1ToRemove, coinsToBurn, events, nil +} diff --git a/x/dex/keeper/withdraw_filled_limit_order.go b/x/dex/keeper/withdraw_filled_limit_order.go new file mode 100644 index 000000000..bce7910d8 --- /dev/null +++ b/x/dex/keeper/withdraw_filled_limit_order.go @@ -0,0 +1,108 @@ +package keeper + +import ( + "context" + + sdkerrors "cosmossdk.io/errors" + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +// WithdrawFilledLimitOrderCore handles MsgWithdrawFilledLimitOrder including bank operations and event emissions. +func (k Keeper) WithdrawFilledLimitOrderCore( + goCtx context.Context, + trancheKey string, + callerAddr sdk.AccAddress, +) error { + ctx := sdk.UnwrapSDKContext(goCtx) + + amountOutTokenOut, remainingTokenIn, tradePairID, err := k.ExecuteWithdrawFilledLimitOrder(ctx, trancheKey, callerAddr) + if err != nil { + return err + } + + coinTakerDenomOut := sdk.NewCoin(tradePairID.TakerDenom, amountOutTokenOut) + coinMakerDenomRefund := sdk.NewCoin(tradePairID.MakerDenom, remainingTokenIn) + // NOTE: it is possible for coinTakerDenomOut xor coinMakerDenomOut to be zero. These are removed by the sanitize call in sdk.NewCoins + // ExecuteWithdrawFilledLimitOrder ensures that at least one of these has am amount > 0. + coins := sdk.NewCoins(coinTakerDenomOut, coinMakerDenomRefund) + ctx.EventManager().EmitEvents(types.GetEventsWithdrawnAmount(sdk.NewCoins(coinTakerDenomOut))) + if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, callerAddr, coins); err != nil { + return err + } + + // This will never panic since TradePairID has already been successfully constructed by ExecuteWithdrawFilledLimitOrder + pairID := tradePairID.MustPairID() + ctx.EventManager().EmitEvent(types.WithdrawFilledLimitOrderEvent( + callerAddr, + pairID.Token0, + pairID.Token1, + tradePairID.MakerDenom, + tradePairID.TakerDenom, + amountOutTokenOut, + trancheKey, + )) + + return nil +} + +// ExecuteWithdrawFilledLimitOrder handles the for logic for WithdrawFilledLimitOrder -- calculates and sends filled liquidity from module to user, +// returns any remaining TokenIn from inactive limit orders, and updates the LimitOrderTranche and LimitOrderTrancheUser. +// IT DOES NOT PERFORM ANY BANKING OPERATIONS +func (k Keeper) ExecuteWithdrawFilledLimitOrder( + ctx sdk.Context, + trancheKey string, + callerAddr sdk.AccAddress, +) (amountOutTokenOut, remainingTokenIn math.Int, tradePairID *types.TradePairID, err error) { + trancheUser, found := k.GetLimitOrderTrancheUser( + ctx, + callerAddr.String(), + trancheKey, + ) + if !found { + return math.ZeroInt(), math.ZeroInt(), nil, sdkerrors.Wrapf(types.ErrValidLimitOrderTrancheNotFound, "%s", trancheKey) + } + + tradePairID, tickIndex := trancheUser.TradePairId, trancheUser.TickIndexTakerToMaker + + tranche, wasFilled, found := k.FindLimitOrderTranche( + ctx, + &types.LimitOrderTrancheKey{ + TradePairId: tradePairID, + TickIndexTakerToMaker: tickIndex, + TrancheKey: trancheKey, + }, + ) + + amountOutTokenOut = math.ZeroInt() + remainingTokenIn = math.ZeroInt() + // It's possible that a TrancheUser exists but tranche does not if LO was filled entirely through a swap + if found { + var amountOutTokenIn math.Int + amountOutTokenIn, amountOutTokenOut = tranche.Withdraw(trancheUser) + + if wasFilled { + // This is only relevant for inactive JIT and GoodTil limit orders + remainingTokenIn = tranche.RemoveTokenIn(trancheUser) + k.SaveInactiveTranche(ctx, tranche) + + // Treat the removed tokenIn as cancelled shares + trancheUser.SharesCancelled = trancheUser.SharesCancelled.Add(remainingTokenIn) + + } else { + k.SetLimitOrderTranche(ctx, tranche) + } + + trancheUser.SharesWithdrawn = trancheUser.SharesWithdrawn.Add(amountOutTokenIn) + } + + k.SaveTrancheUser(ctx, trancheUser) + + if !amountOutTokenOut.IsPositive() && !remainingTokenIn.IsPositive() { + return math.ZeroInt(), math.ZeroInt(), tradePairID, types.ErrWithdrawEmptyLimitOrder + } + + return amountOutTokenOut, remainingTokenIn, tradePairID, nil +} diff --git a/x/dex/migrations/v3/store.go b/x/dex/migrations/v3/store.go index 47f221dd5..bb26392f1 100644 --- a/x/dex/migrations/v3/store.go +++ b/x/dex/migrations/v3/store.go @@ -3,6 +3,7 @@ package v3 import ( "errors" + errorsmod "cosmossdk.io/errors" "cosmossdk.io/store/prefix" storetypes "cosmossdk.io/store/types" "github.com/cosmos/cosmos-sdk/codec" @@ -15,11 +16,14 @@ import ( // MigrateStore performs in-place store migrations. // The migration adds new dex params -- GoodTilPurgeAllowance & MaxJITsPerBlock// for handling JIT orders. func MigrateStore(ctx sdk.Context, cdc codec.BinaryCodec, storeKey storetypes.StoreKey) error { - err := migrateParams(ctx, cdc, storeKey) - if err != nil { + if err := migrateParams(ctx, cdc, storeKey); err != nil { + return err + } + + if err := migrateLimitOrderExpirations(ctx, cdc, storeKey); err != nil { return err } - return migrateLimitOrderExpirations(ctx, cdc, storeKey) + return nil } func migrateParams(ctx sdk.Context, cdc codec.BinaryCodec, storeKey storetypes.StoreKey) error { @@ -38,9 +42,8 @@ func migrateParams(ctx sdk.Context, cdc codec.BinaryCodec, storeKey storetypes.S newParams := types.Params{ Paused: types.DefaultPaused, FeeTiers: oldParams.FeeTiers, - MaxTrueTakerSpread: oldParams.MaxTrueTakerSpread, GoodTilPurgeAllowance: types.DefaultGoodTilPurgeAllowance, - Max_JITsPerBlock: types.DefaultMaxJITsPerBlock, + MaxJitsPerBlock: types.DefaultMaxJITsPerBlock, } // set params @@ -73,7 +76,7 @@ func migrateLimitOrderExpirations(ctx sdk.Context, cdc codec.BinaryCodec, storeK err := iterator.Close() if err != nil { - return err + return errorsmod.Wrap(err, "iterator failed to close during migration") } for i, key := range expirationKeys { diff --git a/x/dex/migrations/v3/store_test.go b/x/dex/migrations/v3/store_test.go index 9350a5ee4..7dc44dc37 100644 --- a/x/dex/migrations/v3/store_test.go +++ b/x/dex/migrations/v3/store_test.go @@ -51,7 +51,7 @@ func (suite *V3DexMigrationTestSuite) TestParamsUpgrade() { suite.Require().EqualValues(oldParams.FeeTiers, newParams.FeeTiers) suite.Require().EqualValues(newParams.Paused, types.DefaultPaused) suite.Require().EqualValues(newParams.GoodTilPurgeAllowance, types.DefaultGoodTilPurgeAllowance) - suite.Require().EqualValues(newParams.Max_JITsPerBlock, types.DefaultMaxJITsPerBlock) + suite.Require().EqualValues(newParams.MaxJitsPerBlock, types.DefaultMaxJITsPerBlock) } func v2TimeBytes(timestamp time.Time) []byte { diff --git a/x/dex/migrations/v4/store.go b/x/dex/migrations/v4/store.go new file mode 100644 index 000000000..61dd9a922 --- /dev/null +++ b/x/dex/migrations/v4/store.go @@ -0,0 +1,112 @@ +package v4 + +import ( + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +// MigrateStore performs in-place store migrations. +// Due to change in precision of PrecDec between v3 and v4 we need to recompute all PrecDecs in the kvstore +func MigrateStore(ctx sdk.Context, cdc codec.BinaryCodec, storeKey storetypes.StoreKey) error { + if err := migrateTickLiquidityPrices(ctx, cdc, storeKey); err != nil { + return err + } + + if err := migrateInactiveTranchePrices(ctx, cdc, storeKey); err != nil { + return err + } + + return nil +} + +type migrationUpdate struct { + key []byte + val []byte +} + +func migrateTickLiquidityPrices(ctx sdk.Context, cdc codec.BinaryCodec, storeKey storetypes.StoreKey) error { + // Due to change in precision of PrecDec between v2 and v3 we need to recompute all PrecDecs in the kvstore + ctx.Logger().Info("Migrating TickLiquidity Prices...") + + // Iterate through all tickLiquidity + store := prefix.NewStore(ctx.KVStore(storeKey), types.KeyPrefix(types.TickLiquidityKeyPrefix)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + ticksToUpdate := make([]migrationUpdate, 0) + + for ; iterator.Valid(); iterator.Next() { + var tickLiq types.TickLiquidity + var updatedTickLiq types.TickLiquidity + cdc.MustUnmarshal(iterator.Value(), &tickLiq) + // Recalculate all prices + switch liquidity := tickLiq.Liquidity.(type) { + case *types.TickLiquidity_LimitOrderTranche: + liquidity.LimitOrderTranche.PriceTakerToMaker = types.MustCalcPrice(liquidity.LimitOrderTranche.Key.TickIndexTakerToMaker) + updatedTickLiq = types.TickLiquidity{Liquidity: liquidity} + case *types.TickLiquidity_PoolReserves: + poolReservesKey := liquidity.PoolReserves.Key + liquidity.PoolReserves.PriceTakerToMaker = types.MustCalcPrice(poolReservesKey.TickIndexTakerToMaker) + liquidity.PoolReserves.PriceOppositeTakerToMaker = poolReservesKey.Counterpart().MustPriceTakerToMaker() + updatedTickLiq = types.TickLiquidity{Liquidity: liquidity} + + default: + panic("Tick does not contain valid liqudityType") + } + + bz := cdc.MustMarshal(&updatedTickLiq) + ticksToUpdate = append(ticksToUpdate, migrationUpdate{key: iterator.Key(), val: bz}) + + } + + err := iterator.Close() + if err != nil { + return errorsmod.Wrap(err, "iterator failed to close during migration") + } + + // Store the updated TickLiquidity + for _, v := range ticksToUpdate { + store.Set(v.key, v.val) + } + + ctx.Logger().Info("Finished migrating TickLiquidity Prices...") + + return nil +} + +func migrateInactiveTranchePrices(ctx sdk.Context, cdc codec.BinaryCodec, storeKey storetypes.StoreKey) error { + // Due to change in precision of PrecDec between v2 and v3 we need to recompute all PrecDecs in the kvstore + ctx.Logger().Info("Migrating InactiveLimitOrderTranche Prices...") + + // Iterate through all InactiveTranches + store := prefix.NewStore(ctx.KVStore(storeKey), types.KeyPrefix(types.InactiveLimitOrderTrancheKeyPrefix)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + ticksToUpdate := make([]migrationUpdate, 0) + + for ; iterator.Valid(); iterator.Next() { + var tranche types.LimitOrderTranche + cdc.MustUnmarshal(iterator.Value(), &tranche) + // Recalculate price + tranche.PriceTakerToMaker = types.MustCalcPrice(tranche.Key.TickIndexTakerToMaker) + + bz := cdc.MustMarshal(&tranche) + ticksToUpdate = append(ticksToUpdate, migrationUpdate{key: iterator.Key(), val: bz}) + } + + err := iterator.Close() + if err != nil { + return errorsmod.Wrap(err, "iterator failed to close during migration") + } + + // Store the updated InactiveTranches + for _, v := range ticksToUpdate { + store.Set(v.key, v.val) + } + + ctx.Logger().Info("Finished migrating InactiveLimitOrderTranche Prices...") + + return nil +} diff --git a/x/dex/migrations/v4/store_test.go b/x/dex/migrations/v4/store_test.go new file mode 100644 index 000000000..10aa1bded --- /dev/null +++ b/x/dex/migrations/v4/store_test.go @@ -0,0 +1,73 @@ +package v4_test + +import ( + "testing" + + "github.com/stretchr/testify/suite" + + "github.com/neutron-org/neutron/v4/testutil" + "github.com/neutron-org/neutron/v4/utils/math" + v4 "github.com/neutron-org/neutron/v4/x/dex/migrations/v4" + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +type V4DexMigrationTestSuite struct { + testutil.IBCConnectionTestSuite +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(V4DexMigrationTestSuite)) +} + +func (suite *V4DexMigrationTestSuite) TestPriceUpdates() { + var ( + app = suite.GetNeutronZoneApp(suite.ChainA) + storeKey = app.GetKey(types.StoreKey) + ctx = suite.ChainA.GetContext() + cdc = app.AppCodec() + ) + + // Write tranche with incorrect price + trancheKey := &types.LimitOrderTrancheKey{ + TradePairId: types.MustNewTradePairID("TokenA", "TokenB"), + TickIndexTakerToMaker: -50, + TrancheKey: "123", + } + tranche := &types.LimitOrderTranche{ + Key: trancheKey, + PriceTakerToMaker: math.ZeroPrecDec(), + } + app.DexKeeper.SetLimitOrderTranche(ctx, tranche) + + // also create inactive tranche + app.DexKeeper.SetInactiveLimitOrderTranche(ctx, tranche) + + // Write poolReserves with incorrect prices + poolKey := &types.PoolReservesKey{ + TradePairId: types.MustNewTradePairID("TokenA", "TokenB"), + TickIndexTakerToMaker: 60000, + Fee: 1, + } + poolReserves := &types.PoolReserves{ + Key: poolKey, + PriceTakerToMaker: math.ZeroPrecDec(), + PriceOppositeTakerToMaker: math.ZeroPrecDec(), + } + app.DexKeeper.SetPoolReserves(ctx, poolReserves) + + // Run migration + suite.NoError(v4.MigrateStore(ctx, cdc, storeKey)) + + // Check LimitOrderTranche has correct price + newTranche := app.DexKeeper.GetLimitOrderTranche(ctx, trancheKey) + suite.True(newTranche.PriceTakerToMaker.Equal(math.MustNewPrecDecFromStr("1.005012269623051203500693815"))) + + // check InactiveLimitOrderTranche has correct price + inactiveTranche, _ := app.DexKeeper.GetInactiveLimitOrderTranche(ctx, trancheKey) + suite.True(inactiveTranche.PriceTakerToMaker.Equal(math.MustNewPrecDecFromStr("1.005012269623051203500693815"))) + + // Check PoolReserves has the correct prices + newPool, _ := app.DexKeeper.GetPoolReserves(ctx, poolKey) + suite.True(newPool.PriceTakerToMaker.Equal(math.MustNewPrecDecFromStr("0.002479495864288162666675923"))) + suite.True(newPool.PriceOppositeTakerToMaker.Equal(math.MustNewPrecDecFromStr("403.227141612124702272520931931"))) +} diff --git a/x/dex/module.go b/x/dex/module.go index 3e1e31136..f2fa6cb52 100644 --- a/x/dex/module.go +++ b/x/dex/module.go @@ -158,6 +158,10 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { if err := cfg.RegisterMigration(types.ModuleName, 2, m.Migrate2to3); err != nil { panic(fmt.Sprintf("failed to migrate x/dex from version 2 to 3: %v", err)) } + + if err := cfg.RegisterMigration(types.ModuleName, 3, m.Migrate3to4); err != nil { + panic(fmt.Sprintf("failed to migrate x/dex from version 3 to 4: %v", err)) + } } // RegisterInvariants registers the capability module's invariants. diff --git a/x/dex/types/constants.go b/x/dex/types/constants.go index fef80f236..119d6c47e 100644 --- a/x/dex/types/constants.go +++ b/x/dex/types/constants.go @@ -1,3 +1,3 @@ package types -const ConsensusVersion = 3 +const ConsensusVersion = 4 diff --git a/x/dex/types/deposit_record.pb.go b/x/dex/types/deposit_record.pb.go index 0941327f6..8d3ca7286 100644 --- a/x/dex/types/deposit_record.pb.go +++ b/x/dex/types/deposit_record.pb.go @@ -4,14 +4,13 @@ package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - cosmossdk_io_math "cosmossdk.io/math" - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/errors.go b/x/dex/types/errors.go index 4c382a74c..69211ca8f 100644 --- a/x/dex/types/errors.go +++ b/x/dex/types/errors.go @@ -189,14 +189,39 @@ var ( 1156, "Maximum JIT LimitOrders per block has already been reached", ) - ErrTradeTooSmall = sdkerrors.Register( + ErrInvalidDenom = sdkerrors.Register( ModuleName, 1157, + "Invalid token denom", + ) + ErrMultihopEntryTokensMismatch = sdkerrors.Register( + ModuleName, + 1158, + "MultihopSwap starting tokens for each route must be the same", + ) + ErrTradeTooSmall = sdkerrors.Register( + ModuleName, + 1159, "Specified trade will result in a rounded output of 0", ) + ErrPriceOutsideRange = sdkerrors.Register( + ModuleName, + 1160, + "Invalid price; 0.00000000000000000000000050 < PRICE > 2020125331305056766451886.728", + ) + ErrInvalidPriceAndTick = sdkerrors.Register( + ModuleName, + 1161, + "Only LimitSellPrice or TickIndexInToOut should be specified", + ) ErrDepositBehindEnemyLines = sdkerrors.Register( ModuleName, - 1158, + 1162, "Cannot deposit at a price below the opposing token's current price", ) + ErrCalcTickFromPrice = sdkerrors.Register( + ModuleName, + 1163, + "Cannot convert price to int64 tick value", + ) ) diff --git a/x/dex/types/events.go b/x/dex/types/events.go index 4307eb304..bf3670855 100644 --- a/x/dex/types/events.go +++ b/x/dex/types/events.go @@ -244,3 +244,105 @@ func GoodTilPurgeHitLimitEvent(gas types.Gas) sdk.Event { return sdk.NewEvent(EventTypeGoodTilPurgeHitGasLimit, attrs...) } + +func GetEventsWithdrawnAmount(coins sdk.Coins) sdk.Events { + events := sdk.Events{} + for _, coin := range coins { + event := sdk.NewEvent( + EventTypeNeutronMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName), + sdk.NewAttribute(AttributeDenom, coin.Denom), + sdk.NewAttribute(AttributeWithdrawn, coin.Amount.String()), + ) + events = append(events, event) + } + return events +} + +func GetEventsGasConsumed(gasBefore, gasAfter types.Gas) sdk.Events { + return sdk.Events{ + sdk.NewEvent( + EventTypeNeutronMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName), + sdk.NewAttribute(AttributeGasConsumed, strconv.FormatUint(gasAfter-gasBefore, 10)), + ), + } +} + +func GetEventsIncExpiringOrders(pairID *TradePairID) sdk.Events { + return sdk.Events{ + sdk.NewEvent( + EventTypeNeutronMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName), + sdk.NewAttribute(sdk.AttributeKeyAction, AttributeInc), + sdk.NewAttribute(AttributeLiquidityTickType, AttributeLimitOrder), + sdk.NewAttribute(AttributeIsExpiringLimitOrder, strconv.FormatBool(true)), + sdk.NewAttribute(AttributePairID, pairID.String()), + ), + } +} + +func GetEventsDecExpiringOrders(pairID *TradePairID) sdk.Events { + return sdk.Events{ + sdk.NewEvent( + EventTypeNeutronMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName), + sdk.NewAttribute(sdk.AttributeKeyAction, AttributeDec), + sdk.NewAttribute(AttributeLiquidityTickType, AttributeLimitOrder), + sdk.NewAttribute(AttributeIsExpiringLimitOrder, strconv.FormatBool(true)), + sdk.NewAttribute(AttributePairID, pairID.String()), + ), + } +} + +func GetEventsIncTotalOrders(pairID *TradePairID) sdk.Events { + return sdk.Events{ + sdk.NewEvent( + EventTypeNeutronMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName), + sdk.NewAttribute(sdk.AttributeKeyAction, AttributeInc), + sdk.NewAttribute(AttributeLiquidityTickType, AttributeLimitOrder), + sdk.NewAttribute(AttributeIsExpiringLimitOrder, strconv.FormatBool(false)), + sdk.NewAttribute(AttributePairID, pairID.String()), + ), + } +} + +func GetEventsDecTotalOrders(pairID *TradePairID) sdk.Events { + return sdk.Events{ + sdk.NewEvent( + EventTypeNeutronMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName), + sdk.NewAttribute(sdk.AttributeKeyAction, AttributeDec), + sdk.NewAttribute(AttributeLiquidityTickType, AttributeLimitOrder), + sdk.NewAttribute(AttributeIsExpiringLimitOrder, strconv.FormatBool(false)), + sdk.NewAttribute(AttributePairID, pairID.String()), + ), + } +} + +func GetEventsIncTotalPoolReserves(pairID PairID) sdk.Events { + return sdk.Events{ + sdk.NewEvent( + EventTypeNeutronMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName), + sdk.NewAttribute(sdk.AttributeKeyAction, AttributeInc), + sdk.NewAttribute(AttributeLiquidityTickType, AttributeLp), + sdk.NewAttribute(AttributeIsExpiringLimitOrder, strconv.FormatBool(false)), + sdk.NewAttribute(AttributePairID, pairID.String()), + ), + } +} + +func GetEventsDecTotalPoolReserves(pairID PairID) sdk.Events { + return sdk.Events{ + sdk.NewEvent( + EventTypeNeutronMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName), + sdk.NewAttribute(sdk.AttributeKeyAction, AttributeDec), + sdk.NewAttribute(AttributeLiquidityTickType, AttributeLp), + sdk.NewAttribute(AttributeIsExpiringLimitOrder, strconv.FormatBool(false)), + sdk.NewAttribute(AttributePairID, pairID.String()), + ), + } +} diff --git a/x/dex/types/genesis.pb.go b/x/dex/types/genesis.pb.go index 474636568..167877ac6 100644 --- a/x/dex/types/genesis.pb.go +++ b/x/dex/types/genesis.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/limit_order_expiration.pb.go b/x/dex/types/limit_order_expiration.pb.go index 27544964d..c983de898 100644 --- a/x/dex/types/limit_order_expiration.pb.go +++ b/x/dex/types/limit_order_expiration.pb.go @@ -5,15 +5,14 @@ package types import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - time "time" - _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "google.golang.org/protobuf/types/known/timestamppb" + io "io" + math "math" + math_bits "math/bits" + time "time" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/limit_order_tranche.go b/x/dex/types/limit_order_tranche.go index 55dbee63e..8f6a6cb20 100644 --- a/x/dex/types/limit_order_tranche.go +++ b/x/dex/types/limit_order_tranche.go @@ -1,6 +1,8 @@ package types import ( + "time" + "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" @@ -50,6 +52,7 @@ func MustNewLimitOrderTranche( reservesTakerDenom math.Int, totalMakerDenom math.Int, totalTakerDenom math.Int, + expirationTime ...time.Time, ) *LimitOrderTranche { limitOrderTranche, err := NewLimitOrderTranche( makerDenom, @@ -64,6 +67,14 @@ func MustNewLimitOrderTranche( if err != nil { panic(err) } + switch len(expirationTime) { + case 0: + break + case 1: + limitOrderTranche.ExpirationTime = &expirationTime[0] + default: + panic("can only supply one expiration time") + } return limitOrderTranche } diff --git a/x/dex/types/limit_order_tranche.pb.go b/x/dex/types/limit_order_tranche.pb.go index 79df59140..e35ecd9cc 100644 --- a/x/dex/types/limit_order_tranche.pb.go +++ b/x/dex/types/limit_order_tranche.pb.go @@ -4,19 +4,17 @@ package types import ( - fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - time "time" - cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/timestamppb" - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + _ "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. diff --git a/x/dex/types/limit_order_tranche_user.pb.go b/x/dex/types/limit_order_tranche_user.pb.go index 75737b1c2..b0e65087b 100644 --- a/x/dex/types/limit_order_tranche_user.pb.go +++ b/x/dex/types/limit_order_tranche_user.pb.go @@ -4,14 +4,13 @@ package types import ( + cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - cosmossdk_io_math "cosmossdk.io/math" - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/message_deposit.go b/x/dex/types/message_deposit.go index a7aef15b9..668b48d30 100644 --- a/x/dex/types/message_deposit.go +++ b/x/dex/types/message_deposit.go @@ -69,6 +69,21 @@ func (msg *MsgDeposit) Validate() error { return sdkerrors.Wrapf(ErrInvalidAddress, "invalid receiver address (%s)", err) } + // Verify tokenA and tokenB are valid denoms + err = sdk.ValidateDenom(msg.TokenA) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidDenom, "TokenA denom (%s)", err) + } + + err = sdk.ValidateDenom(msg.TokenB) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidDenom, "TokenB denom (%s)", err) + } + + if msg.TokenA == msg.TokenB { + return sdkerrors.Wrapf(ErrInvalidDenom, "tokenA cannot equal tokenB") + } + // Verify that the lengths of TickIndexes, Fees, AmountsA, AmountsB are all equal numDeposits := len(msg.AmountsA) if numDeposits != len(msg.Fees) || diff --git a/x/dex/types/message_multi_hop_swap.go b/x/dex/types/message_multi_hop_swap.go index 5928731b3..416260d5c 100644 --- a/x/dex/types/message_multi_hop_swap.go +++ b/x/dex/types/message_multi_hop_swap.go @@ -58,48 +58,93 @@ func (msg *MsgMultiHopSwap) GetSignBytes() []byte { } func (msg *MsgMultiHopSwap) Validate() error { - _, err := sdk.AccAddressFromBech32(msg.Creator) - if err != nil { - return sdkerrors.Wrapf(ErrInvalidAddress, "invalid creator address (%s)", err) + if err := validateAddress(msg.Creator, "creator"); err != nil { + return err + } + if err := validateAddress(msg.Receiver, "receiver"); err != nil { + return err + } + if err := validateRoutes(msg.Routes); err != nil { + return err + } + if err := validateAmountIn(msg.AmountIn); err != nil { + return err } - _, err = sdk.AccAddressFromBech32(msg.Receiver) + if err := validateExitLimitPrice(msg.ExitLimitPrice); err != nil { + return err + } + return nil +} + +func validateAddress(address, field string) error { + _, err := sdk.AccAddressFromBech32(address) if err != nil { - return sdkerrors.Wrapf(ErrInvalidAddress, "invalid receiver address (%s)", err) + return sdkerrors.Wrapf(ErrInvalidAddress, "invalid %s address (%s)", field, err) } + return nil +} - if len(msg.Routes) == 0 { +func validateRoutes(routes []*MultiHopRoute) error { + if len(routes) == 0 { return ErrMissingMultihopRoute } + expectedExitToken := "" + expectedEntryToken := "" - for _, route := range msg.Routes { - if len(route.Hops) < 2 { - return ErrRouteWithoutExitToken + for i, route := range routes { + if err := validateHops(route.Hops); err != nil { + return err } - existingHops := make(map[string]bool, len(route.Hops)) - for _, hop := range route.Hops { - if _, ok := existingHops[hop]; ok { - return ErrCycleInHops - } - existingHops[hop] = true + // validateHops ensures hops[] is at least length 2 + exitToken := route.Hops[len(route.Hops)-1] + entryToken := route.Hops[0] + + switch { + case i == 0: + expectedExitToken = exitToken + expectedEntryToken = entryToken + case exitToken != expectedExitToken: + return ErrMultihopExitTokensMismatch + case entryToken != expectedEntryToken: + return ErrMultihopEntryTokensMismatch } } + return nil +} - expectedExitToken := msg.Routes[0].Hops[len(msg.Routes[0].Hops)-1] - for _, route := range msg.Routes[1:] { - hops := route.Hops - if expectedExitToken != hops[len(hops)-1] { - return ErrMultihopExitTokensMismatch +func validateHops(hops []string) error { + existingHops := make(map[string]bool, len(hops)) + for _, hop := range hops { + // check that route has at least entry and exit token + if len(hop) < 2 { + return ErrRouteWithoutExitToken + } + // check if we find cycles in the route + if existingHops[hop] { + return ErrCycleInHops + } + existingHops[hop] = true + + // check if the denom is valid + err := sdk.ValidateDenom(hop) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidDenom, "invalid denom in route: (%s)", err) } } + return nil +} - if msg.AmountIn.LTE(math.ZeroInt()) { +func validateAmountIn(amount math.Int) error { + if amount.LTE(math.ZeroInt()) { return ErrZeroSwap } + return nil +} - if !msg.ExitLimitPrice.IsPositive() { +func validateExitLimitPrice(price math_utils.PrecDec) error { + if !price.IsPositive() { return ErrZeroExitPrice } - return nil } diff --git a/x/dex/types/message_place_limit_order.go b/x/dex/types/message_place_limit_order.go index 4ffef0d2b..47206d49c 100644 --- a/x/dex/types/message_place_limit_order.go +++ b/x/dex/types/message_place_limit_order.go @@ -6,6 +6,8 @@ import ( sdkerrors "cosmossdk.io/errors" "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + + math_utils "github.com/neutron-org/neutron/v4/utils/math" ) const TypeMsgPlaceLimitOrder = "place_limit_order" @@ -22,6 +24,7 @@ func NewMsgPlaceLimitOrder( orderType LimitOrderType, goodTil *time.Time, maxAmountOut *math.Int, + price *math_utils.PrecDec, ) *MsgPlaceLimitOrder { return &MsgPlaceLimitOrder{ Creator: creator, @@ -33,6 +36,7 @@ func NewMsgPlaceLimitOrder( OrderType: orderType, ExpirationTime: goodTil, MaxAmountOut: maxAmountOut, + LimitSellPrice: price, } } @@ -69,6 +73,21 @@ func (msg *MsgPlaceLimitOrder) Validate() error { return sdkerrors.Wrapf(ErrInvalidAddress, "invalid receiver address (%s)", err) } + // Verify tokenIn and tokenOut are valid denoms + err = sdk.ValidateDenom(msg.TokenIn) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidDenom, "Error TokenIn denom (%s)", err) + } + + err = sdk.ValidateDenom(msg.TokenOut) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidDenom, "Error TokenOut denom (%s)", err) + } + + if msg.TokenIn == msg.TokenOut { + return sdkerrors.Wrapf(ErrInvalidDenom, "tokenIn cannot equal tokenOut") + } + if msg.AmountIn.LTE(math.ZeroInt()) { return ErrZeroLimitOrder } @@ -94,6 +113,14 @@ func (msg *MsgPlaceLimitOrder) Validate() error { return ErrTickOutsideRange } + if msg.LimitSellPrice != nil && IsPriceOutOfRange(*msg.LimitSellPrice) { + return ErrPriceOutsideRange + } + + if msg.LimitSellPrice != nil && msg.TickIndexInToOut != 0 { + return ErrInvalidPriceAndTick + } + return nil } diff --git a/x/dex/types/message_withdrawal.go b/x/dex/types/message_withdrawal.go index 8689c07a2..f7f1f2e73 100644 --- a/x/dex/types/message_withdrawal.go +++ b/x/dex/types/message_withdrawal.go @@ -62,6 +62,21 @@ func (msg *MsgWithdrawal) Validate() error { return sdkerrors.Wrapf(ErrInvalidAddress, "invalid receiver address (%s)", err) } + // Verify tokenA and tokenB are valid denoms + err = sdk.ValidateDenom(msg.TokenA) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidDenom, "TokenA denom (%s)", err) + } + + err = sdk.ValidateDenom(msg.TokenB) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidDenom, "TokenB denom (%s)", err) + } + + if msg.TokenA == msg.TokenB { + return sdkerrors.Wrapf(ErrInvalidDenom, "tokenA cannot equal tokenB") + } + // Verify that the lengths of TickIndexes, Fees, SharesToRemove are all equal if len(msg.Fees) != len(msg.TickIndexesAToB) || len(msg.SharesToRemove) != len(msg.TickIndexesAToB) { diff --git a/x/dex/types/pair_id.pb.go b/x/dex/types/pair_id.pb.go index 5d72b9f75..1b97bd856 100644 --- a/x/dex/types/pair_id.pb.go +++ b/x/dex/types/pair_id.pb.go @@ -5,11 +5,10 @@ package types import ( fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/params.go b/x/dex/types/params.go index 2e9913d8d..ce219d815 100644 --- a/x/dex/types/params.go +++ b/x/dex/types/params.go @@ -5,8 +5,6 @@ import ( paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "gopkg.in/yaml.v2" - - math_utils "github.com/neutron-org/neutron/v4/utils/math" ) var _ paramtypes.ParamSet = (*Params)(nil) @@ -14,7 +12,6 @@ var _ paramtypes.ParamSet = (*Params)(nil) var ( KeyFeeTiers = []byte("FeeTiers") DefaultFeeTiers = []uint64{0, 1, 2, 3, 4, 5, 10, 20, 50, 100, 150, 200} - DefaultMaxTrueTakerSpread = math_utils.MustNewPrecDecFromStr("0.005") KeyPaused = []byte("Paused") DefaultPaused = false KeyMaxJITsPerBlock = []byte("MaxJITs") @@ -29,19 +26,18 @@ func ParamKeyTable() paramtypes.KeyTable { } // NewParams creates a new Params instance -func NewParams(feeTiers []uint64, maxTrueTakerSpread math_utils.PrecDec, paused bool, maxJITsPerBlock, goodTilPurgeAllowance uint64) Params { +func NewParams(feeTiers []uint64, paused bool, maxJITsPerBlock, goodTilPurgeAllowance uint64) Params { return Params{ FeeTiers: feeTiers, - MaxTrueTakerSpread: maxTrueTakerSpread, Paused: paused, - Max_JITsPerBlock: maxJITsPerBlock, + MaxJitsPerBlock: maxJITsPerBlock, GoodTilPurgeAllowance: goodTilPurgeAllowance, } } // DefaultParams returns a default set of parameters func DefaultParams() Params { - return NewParams(DefaultFeeTiers, DefaultMaxTrueTakerSpread, DefaultPaused, DefaultMaxJITsPerBlock, DefaultGoodTilPurgeAllowance) + return NewParams(DefaultFeeTiers, DefaultPaused, DefaultMaxJITsPerBlock, DefaultGoodTilPurgeAllowance) } // ParamSetPairs get the params.ParamSet @@ -49,7 +45,7 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { return paramtypes.ParamSetPairs{ paramtypes.NewParamSetPair(KeyFeeTiers, &p.FeeTiers, validateFeeTiers), paramtypes.NewParamSetPair(KeyPaused, &p.Paused, validatePaused), - paramtypes.NewParamSetPair(KeyMaxJITsPerBlock, &p.Max_JITsPerBlock, validateMaxJITsPerBlock), + paramtypes.NewParamSetPair(KeyMaxJITsPerBlock, &p.MaxJitsPerBlock, validateMaxJITsPerBlock), paramtypes.NewParamSetPair(KeyGoodTilPurgeAllowance, &p.GoodTilPurgeAllowance, validatePurgeAllowance), } } @@ -71,7 +67,7 @@ func (p Params) Validate() error { if err != nil { return fmt.Errorf("invalid paused: %w", err) } - if err := validateMaxJITsPerBlock(p.Max_JITsPerBlock); err != nil { + if err := validateMaxJITsPerBlock(p.MaxJitsPerBlock); err != nil { return err } if err := validatePurgeAllowance(p.GoodTilPurgeAllowance); err != nil { diff --git a/x/dex/types/params.pb.go b/x/dex/types/params.pb.go index 4d26f5d77..ca28efd3e 100644 --- a/x/dex/types/params.pb.go +++ b/x/dex/types/params.pb.go @@ -5,14 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" - - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -28,11 +25,10 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Params defines the parameters for the module. type Params struct { - FeeTiers []uint64 `protobuf:"varint,1,rep,packed,name=fee_tiers,json=feeTiers,proto3" json:"fee_tiers,omitempty"` - MaxTrueTakerSpread github_com_neutron_org_neutron_v4_utils_math.PrecDec `protobuf:"bytes,2,opt,name=max_true_taker_spread,json=maxTrueTakerSpread,proto3,customtype=github.com/neutron-org/neutron/v4/utils/math.PrecDec" json:"max_true_taker_spread" yaml:"max_true_taker_spread"` - Paused bool `protobuf:"varint,3,opt,name=paused,proto3" json:"paused,omitempty"` - Max_JITsPerBlock uint64 `protobuf:"varint,4,opt,name=max_JITs_per_block,json=maxJITsPerBlock,proto3" json:"max_JITs_per_block,omitempty"` - GoodTilPurgeAllowance uint64 `protobuf:"varint,5,opt,name=good_til_purge_allowance,json=goodTilPurgeAllowance,proto3" json:"good_til_purge_allowance,omitempty"` + FeeTiers []uint64 `protobuf:"varint,1,rep,packed,name=fee_tiers,json=feeTiers,proto3" json:"fee_tiers,omitempty"` + Paused bool `protobuf:"varint,3,opt,name=paused,proto3" json:"paused"` + MaxJitsPerBlock uint64 `protobuf:"varint,4,opt,name=max_jits_per_block,json=maxJitsPerBlock,proto3" json:"max_jits_per_block,omitempty"` + GoodTilPurgeAllowance uint64 `protobuf:"varint,5,opt,name=good_til_purge_allowance,json=goodTilPurgeAllowance,proto3" json:"good_til_purge_allowance,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -81,9 +77,9 @@ func (m *Params) GetPaused() bool { return false } -func (m *Params) GetMax_JITsPerBlock() uint64 { +func (m *Params) GetMaxJitsPerBlock() uint64 { if m != nil { - return m.Max_JITsPerBlock + return m.MaxJitsPerBlock } return 0 } @@ -102,30 +98,26 @@ func init() { func init() { proto.RegisterFile("neutron/dex/params.proto", fileDescriptor_84a6bffcfc21009c) } var fileDescriptor_84a6bffcfc21009c = []byte{ - // 366 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xb1, 0x6a, 0xe3, 0x40, - 0x10, 0x86, 0xb5, 0xb6, 0xce, 0xd8, 0xba, 0xe2, 0x40, 0x9c, 0x0f, 0x71, 0x77, 0x48, 0xc2, 0x95, - 0xe0, 0xb0, 0x54, 0x9c, 0x21, 0xe0, 0x2e, 0x26, 0x10, 0x92, 0x4a, 0x28, 0xaa, 0xd2, 0x2c, 0x6b, - 0x69, 0x2c, 0x0b, 0x4b, 0x5e, 0xb1, 0xda, 0x4d, 0xe4, 0xb7, 0x48, 0x99, 0x32, 0x65, 0x1e, 0xc5, - 0xa5, 0x8b, 0x14, 0x21, 0x85, 0x08, 0x76, 0x97, 0x32, 0x4f, 0x10, 0x56, 0xb1, 0x3b, 0x43, 0xba, - 0x99, 0xef, 0x9b, 0xd9, 0x85, 0xf9, 0x35, 0x63, 0x09, 0x82, 0x33, 0xba, 0xf4, 0x62, 0xa8, 0xbc, - 0x82, 0x30, 0x92, 0x97, 0x6e, 0xc1, 0x28, 0xa7, 0xfa, 0xf7, 0xbd, 0x71, 0x63, 0xa8, 0x7e, 0xff, - 0x4c, 0x68, 0x42, 0x1b, 0xee, 0xc9, 0xea, 0x73, 0x64, 0xf0, 0xd4, 0xd2, 0x3a, 0x7e, 0xb3, 0xa3, - 0xff, 0xd1, 0x7a, 0x33, 0x00, 0xcc, 0x53, 0x60, 0xa5, 0x81, 0xec, 0xb6, 0xa3, 0x06, 0xdd, 0x19, - 0x40, 0x28, 0x7b, 0xfd, 0x11, 0x69, 0xfd, 0x9c, 0x54, 0x98, 0x33, 0x01, 0x98, 0x93, 0x05, 0x30, - 0x5c, 0x16, 0x0c, 0x48, 0x6c, 0xb4, 0x6c, 0xe4, 0xf4, 0x26, 0x62, 0x5d, 0x5b, 0xca, 0x4b, 0x6d, - 0x8d, 0x92, 0x94, 0xcf, 0xc5, 0xd4, 0x8d, 0x68, 0xee, 0xed, 0x7f, 0x1f, 0x52, 0x96, 0x1c, 0x6a, - 0xef, 0x66, 0xe4, 0x09, 0x9e, 0x66, 0xa5, 0x97, 0x13, 0x3e, 0x77, 0x7d, 0x06, 0xd1, 0x19, 0x44, - 0x6f, 0xb5, 0x75, 0xfc, 0xf1, 0xf7, 0xda, 0xfa, 0xbb, 0x22, 0x79, 0x36, 0x1e, 0x1c, 0xd5, 0x83, - 0x40, 0xcf, 0x49, 0x15, 0x32, 0x01, 0xa1, 0xa4, 0x57, 0x0d, 0xd4, 0x7f, 0x69, 0x9d, 0x82, 0x88, - 0x12, 0x62, 0xa3, 0x6d, 0x23, 0xa7, 0x1b, 0xec, 0x3b, 0xfd, 0x9f, 0x26, 0xa7, 0xf1, 0xe5, 0x45, - 0x58, 0xe2, 0x02, 0x18, 0x9e, 0x66, 0x34, 0x5a, 0x18, 0xaa, 0x8d, 0x1c, 0x35, 0xf8, 0x91, 0x93, - 0x4a, 0x0a, 0x1f, 0xd8, 0x44, 0x62, 0xfd, 0x44, 0x33, 0x12, 0x4a, 0x63, 0xcc, 0xd3, 0x0c, 0x17, - 0x82, 0x25, 0x80, 0x49, 0x96, 0xd1, 0x5b, 0xb2, 0x8c, 0xc0, 0xf8, 0xd6, 0xac, 0xf4, 0xa5, 0x0f, - 0xd3, 0xcc, 0x97, 0xf6, 0xf4, 0x20, 0xc7, 0xea, 0xfd, 0x83, 0xa5, 0x4c, 0xce, 0xd7, 0x5b, 0x13, - 0x6d, 0xb6, 0x26, 0x7a, 0xdd, 0x9a, 0xe8, 0x6e, 0x67, 0x2a, 0x9b, 0x9d, 0xa9, 0x3c, 0xef, 0x4c, - 0xe5, 0x7a, 0xf8, 0xf5, 0x81, 0xaa, 0x26, 0x49, 0xbe, 0x2a, 0xa0, 0x9c, 0x76, 0x9a, 0x98, 0xfe, - 0x7f, 0x04, 0x00, 0x00, 0xff, 0xff, 0x76, 0x2b, 0xe3, 0x42, 0xe5, 0x01, 0x00, 0x00, + // 290 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x90, 0x31, 0x4b, 0x03, 0x31, + 0x14, 0xc7, 0x2f, 0xf4, 0x2c, 0x35, 0x0e, 0x42, 0x50, 0x08, 0x0a, 0x69, 0xe9, 0x54, 0x90, 0x36, + 0x83, 0x82, 0xe0, 0x66, 0x17, 0xc1, 0xa9, 0x94, 0x4e, 0x2e, 0x21, 0xed, 0xbd, 0xc6, 0xe8, 0x5d, + 0x13, 0x92, 0x9c, 0x9e, 0xdf, 0xc2, 0xd1, 0xd1, 0x2f, 0xe1, 0x77, 0x70, 0xec, 0xe8, 0x24, 0x72, + 0xb7, 0xf9, 0x29, 0xe4, 0xce, 0xeb, 0xf4, 0xfe, 0xef, 0xff, 0x7b, 0xff, 0xe1, 0xfd, 0x31, 0xdd, + 0x40, 0x1e, 0x9c, 0xd9, 0xf0, 0x04, 0x0a, 0x6e, 0xa5, 0x93, 0x99, 0x9f, 0x58, 0x67, 0x82, 0x21, + 0x07, 0x2d, 0x99, 0x24, 0x50, 0x9c, 0x1c, 0x29, 0xa3, 0x4c, 0xe3, 0xf3, 0x5a, 0xfd, 0x9f, 0x0c, + 0x3f, 0x10, 0xee, 0xce, 0x9a, 0x0c, 0x39, 0xc5, 0xfb, 0x6b, 0x00, 0x11, 0x34, 0x38, 0x4f, 0xd1, + 0xa0, 0x33, 0x8a, 0xe7, 0xbd, 0x35, 0xc0, 0xa2, 0xde, 0xc9, 0x10, 0x77, 0xad, 0xcc, 0x3d, 0x24, + 0xb4, 0x33, 0x40, 0xa3, 0xde, 0x14, 0xff, 0x7e, 0xf7, 0x5b, 0x67, 0xde, 0x4e, 0x72, 0x86, 0x49, + 0x26, 0x0b, 0xf1, 0xa0, 0x83, 0x17, 0x16, 0x9c, 0x58, 0xa6, 0x66, 0xf5, 0x48, 0xe3, 0x01, 0x1a, + 0xc5, 0xf3, 0xc3, 0x4c, 0x16, 0xb7, 0x3a, 0xf8, 0x19, 0xb8, 0x69, 0x6d, 0x93, 0x4b, 0x4c, 0x95, + 0x31, 0x89, 0x08, 0x3a, 0x15, 0x36, 0x77, 0x0a, 0x84, 0x4c, 0x53, 0xf3, 0x2c, 0x37, 0x2b, 0xa0, + 0x7b, 0x4d, 0xe4, 0xb8, 0xe6, 0x0b, 0x9d, 0xce, 0x6a, 0x7a, 0xbd, 0x83, 0x57, 0xf1, 0xdb, 0x7b, + 0x3f, 0x9a, 0xde, 0x7c, 0x96, 0x0c, 0x6d, 0x4b, 0x86, 0x7e, 0x4a, 0x86, 0x5e, 0x2b, 0x16, 0x6d, + 0x2b, 0x16, 0x7d, 0x55, 0x2c, 0xba, 0x1b, 0x2b, 0x1d, 0xee, 0xf3, 0xe5, 0x64, 0x65, 0x32, 0xde, + 0xfe, 0x3f, 0x36, 0x4e, 0xed, 0x34, 0x7f, 0xba, 0xe0, 0x45, 0x53, 0x55, 0x78, 0xb1, 0xe0, 0x97, + 0xdd, 0xa6, 0x87, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0x59, 0xc8, 0x6a, 0x46, 0x01, + 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -153,8 +145,8 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - if m.Max_JITsPerBlock != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.Max_JITsPerBlock)) + if m.MaxJitsPerBlock != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MaxJitsPerBlock)) i-- dAtA[i] = 0x20 } @@ -168,16 +160,6 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x18 } - { - size := m.MaxTrueTakerSpread.Size() - i -= size - if _, err := m.MaxTrueTakerSpread.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintParams(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 if len(m.FeeTiers) > 0 { dAtA2 := make([]byte, len(m.FeeTiers)*10) var j1 int @@ -223,13 +205,11 @@ func (m *Params) Size() (n int) { } n += 1 + sovParams(uint64(l)) + l } - l = m.MaxTrueTakerSpread.Size() - n += 1 + l + sovParams(uint64(l)) if m.Paused { n += 2 } - if m.Max_JITsPerBlock != 0 { - n += 1 + sovParams(uint64(m.Max_JITsPerBlock)) + if m.MaxJitsPerBlock != 0 { + n += 1 + sovParams(uint64(m.MaxJitsPerBlock)) } if m.GoodTilPurgeAllowance != 0 { n += 1 + sovParams(uint64(m.GoodTilPurgeAllowance)) @@ -348,40 +328,6 @@ func (m *Params) Unmarshal(dAtA []byte) error { } else { return fmt.Errorf("proto: wrong wireType = %d for field FeeTiers", wireType) } - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxTrueTakerSpread", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthParams - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthParams - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.MaxTrueTakerSpread.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex case 3: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Paused", wireType) @@ -404,9 +350,9 @@ func (m *Params) Unmarshal(dAtA []byte) error { m.Paused = bool(v != 0) case 4: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Max_JITsPerBlock", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MaxJitsPerBlock", wireType) } - m.Max_JITsPerBlock = 0 + m.MaxJitsPerBlock = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -416,7 +362,7 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Max_JITsPerBlock |= uint64(b&0x7F) << shift + m.MaxJitsPerBlock |= uint64(b&0x7F) << shift if b < 0x80 { break } diff --git a/x/dex/types/pool.go b/x/dex/types/pool.go index 6e6ba1d07..3a167f5b4 100644 --- a/x/dex/types/pool.go +++ b/x/dex/types/pool.go @@ -248,7 +248,6 @@ func CalcGreatestMatchingRatio( targetAmount0Dec := math.LegacyNewDecFromInt(targetAmount0) targetAmount1Dec := math.LegacyNewDecFromInt(targetAmount1) - // See spec: https://www.notion.so/dualityxyz/Autoswap-Spec-e856fa7b2438403c95147010d479b98c if targetAmount1.GT(math.ZeroInt()) { resultAmount0 = math.MinInt( amount0, diff --git a/x/dex/types/pool.pb.go b/x/dex/types/pool.pb.go index c33507555..7468d843b 100644 --- a/x/dex/types/pool.pb.go +++ b/x/dex/types/pool.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/pool_metadata.pb.go b/x/dex/types/pool_metadata.pb.go index 03aaaed20..47c15c2ae 100644 --- a/x/dex/types/pool_metadata.pb.go +++ b/x/dex/types/pool_metadata.pb.go @@ -5,11 +5,10 @@ package types import ( fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/pool_reserves.pb.go b/x/dex/types/pool_reserves.pb.go index c889d1e69..10e0f6d50 100644 --- a/x/dex/types/pool_reserves.pb.go +++ b/x/dex/types/pool_reserves.pb.go @@ -4,16 +4,14 @@ package types import ( - fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/precomputed_prices.gob b/x/dex/types/precomputed_prices.gob new file mode 100644 index 000000000..fa2bbfad0 Binary files /dev/null and b/x/dex/types/precomputed_prices.gob differ diff --git a/x/dex/types/price.go b/x/dex/types/price.go index 481598650..72686a6a1 100644 --- a/x/dex/types/price.go +++ b/x/dex/types/price.go @@ -1,6 +1,11 @@ package types import ( + "bytes" + _ "embed" + "encoding/gob" + fmt "fmt" + "cosmossdk.io/errors" "cosmossdk.io/math" @@ -8,10 +13,45 @@ import ( "github.com/neutron-org/neutron/v4/x/dex/utils" ) -// NOTE: 559_680 is the highest possible tick at which price can be calculated with a < 1% error -// when using 26 digit decimal precision (via prec_dec). -// The error rate for very negative ticks approaches zero, so there is no concern there -const MaxTickExp uint64 = 559_680 +const ( + // NOTE: 559_680 is the highest possible tick at which price can be calculated with a < 1% error + // when using 27 digit decimal precision (via prec_dec). + // The error rate for very negative ticks approaches zero, so there is no concern there + MaxTickExp uint64 = 559_680 + MinPrice string = "0.000000000000000000000000495" + MaxPrice string = "2020125331305056766452345.127500016657360222036663651" +) + +//go:embed precomputed_prices.gob +var precomputedPricesBz []byte + +var PrecomputedPrices []math_utils.PrecDec + +func init() { + err := loadPrecomputedPricesFromFile() + if err != nil { + panic(fmt.Sprintf("Failed to load precomputed powers: %v", err)) + } +} + +func loadPrecomputedPricesFromFile() error { + var stringPrices []string + decoder := gob.NewDecoder(bytes.NewBuffer(precomputedPricesBz)) + err := decoder.Decode(&stringPrices) + if err != nil { + return err + } + + // Convert the slice of strings back to math_utils.PrecDec + PrecomputedPrices = make([]math_utils.PrecDec, len(stringPrices)) + for i, s := range stringPrices { + PrecomputedPrices[i] = math_utils.MustNewPrecDecFromStr(s) + } + + // Release precomputedPricesBz from memory + precomputedPricesBz = []byte{} + return nil +} // Calculates the price for a swap from token 0 to token 1 given a relative tick // tickIndex refers to the index of a specified tick such that x * 1.0001 ^(-1 * t) = y @@ -27,6 +67,49 @@ func CalcPrice(relativeTickIndex int64) (math_utils.PrecDec, error) { return math_utils.OnePrecDec().Quo(utils.BasePrice().Power(uint64(relativeTickIndex))), nil } +func BinarySearchPriceToTick(price math_utils.PrecDec) uint64 { + if price.GT(math_utils.OnePrecDec()) { + panic("Can only lookup prices <= 1") + } + var left uint64 // = 0 + right := MaxTickExp + + // Binary search to find the closest precomputed value + for left < right { + switch mid := (left + right) / 2; { + case PrecomputedPrices[mid].Equal(price): + return mid + case PrecomputedPrices[mid].LT(price): + right = mid - 1 + default: + left = mid + 1 + + } + } + + // If exact match is not found, return the upper bound + return right +} + +func CalcTickIndexFromPrice(price math_utils.PrecDec) (int64, error) { + if IsPriceOutOfRange(price) { + return 0, ErrPriceOutsideRange + } + + if price.GT(math_utils.OnePrecDec()) { + // We only have a lookup table for prices <= 1 + // So we invert the price for the lookup + invPrice := math_utils.OnePrecDec().Quo(price) + tick := BinarySearchPriceToTick(invPrice) + // flip the sign back the other direction + return int64(tick) * -1, nil + } + + tick := BinarySearchPriceToTick(price) + + return int64(tick), nil +} + func MustCalcPrice(relativeTickIndex int64) math_utils.PrecDec { price, err := CalcPrice(relativeTickIndex) if err != nil { @@ -39,6 +122,11 @@ func IsTickOutOfRange(tickIndex int64) bool { return utils.Abs(tickIndex) > MaxTickExp } +func IsPriceOutOfRange(price math_utils.PrecDec) bool { + return price.GT(math_utils.MustNewPrecDecFromStr(MaxPrice)) || + price.LT(math_utils.MustNewPrecDecFromStr(MinPrice)) +} + func ValidateTickFee(tick int64, fee uint64) error { // Ensure we do not overflow/wrap Uint if fee >= MaxTickExp { @@ -59,3 +147,34 @@ func ValidateFairOutput(amountIn math.Int, price math_utils.PrecDec) error { } return nil } + +// Used for generating the precomputedPrice.gob file + +// func generatePrecomputedPrices() []math_utils.PrecDec { +// precomputedPowers := make([]math_utils.PrecDec, MaxTickExp+1) +// precomputedPowers[0] = math_utils.OnePrecDec() // 1.0001^0 = 1 +// for i := 1; i <= int(MaxTickExp); i++ { +// precomputedPowers[i] = precomputedPowers[i-1].Quo(utils.BasePrice()) +// } +// return precomputedPowers +// } + +// func WritePrecomputedPricesToFile() error { +// computedPrices := generatePrecomputedPrices() +// file, err := os.Create(PrecomputedPricesFile) +// if err != nil { +// panic(fmt.Sprintf("Error creating precomputed power file: %v", err.Error())) +// } +// defer file.Close() +// stringPowers := make([]string, len(computedPrices)) +// for i, power := range computedPrices { +// stringPowers[i] = power.String() +// } + +// encoder := gob.NewEncoder(file) +// err = encoder.Encode(stringPowers) +// if err != nil { +// panic(fmt.Sprintf("Error writing precomputed powers to file: %v", err.Error())) +// } +// return nil +// } diff --git a/x/dex/types/price_test.go b/x/dex/types/price_test.go index b2f350cbf..63145bf72 100644 --- a/x/dex/types/price_test.go +++ b/x/dex/types/price_test.go @@ -1,11 +1,75 @@ package types_test -// This will continue to fail until we upgrade away from sdk.Dec -// func TestPriceMath(t *testing.T) { -// tick := 352437 -// amount := sdk.MustNewDecFromStr("1000000000000000000000") -// basePrice := utils.BasePrice() -// expected := amount.Quo(basePrice.Power(uint64(tick))).TruncateInt() -// result := types.MustCalcPrice(int64(tick)).Mul(amount).TruncateInt() -// assert.Equal(t, expected.Int64(), result.Int64()) -// } +import ( + "errors" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/neutron-org/neutron/v4/x/dex/types" +) + +func TestCalcTickIndexFromPrice(t *testing.T) { + for _, tc := range []struct { + desc string + tick int64 + }{ + { + desc: "0", + tick: 0, + }, + { + desc: "10", + tick: 10, + }, + { + desc: "-10", + tick: -10, + }, + { + desc: "100000", + tick: 100000, + }, + { + desc: "-100000", + tick: -100000, + }, + { + desc: "-100000", + tick: -100000, + }, + { + desc: "-100000", + tick: -100000, + }, + { + desc: "MaxTickExp", + tick: int64(types.MaxTickExp), + }, + { + desc: "MinTickExp", + tick: int64(types.MaxTickExp) * -1, + }, + { + desc: "GT MaxTickExp", + tick: int64(types.MaxTickExp) + 1, + }, + { + desc: "LT MinTickExp", + tick: -1*int64(types.MaxTickExp) - 1, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + price, err1 := types.CalcPrice(tc.tick) + val, err2 := types.CalcTickIndexFromPrice(price) + if errors.Is(err1, types.ErrTickOutsideRange) { + require.ErrorIs(t, err2, types.ErrPriceOutsideRange) + } else { + // Only expected error is ErrTickOutsideRange. + // If we are not outside the tick range we should TestCalcTickIndexFromPrice to never throw + require.NoError(t, err2) + require.Equal(t, tc.tick, val) + } + }) + } +} diff --git a/x/dex/types/query.pb.go b/x/dex/types/query.pb.go index a29eb9aca..9053beb5b 100644 --- a/x/dex/types/query.pb.go +++ b/x/dex/types/query.pb.go @@ -5,13 +5,8 @@ package types import ( context "context" - fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - time "time" - cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" query "github.com/cosmos/cosmos-sdk/types/query" @@ -19,13 +14,16 @@ import ( grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" _ "google.golang.org/protobuf/types/known/timestamppb" - - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + io "io" + math "math" + math_bits "math/bits" + time "time" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/tick_liquidity.pb.go b/x/dex/types/tick_liquidity.pb.go index 0f2443566..c35f64b63 100644 --- a/x/dex/types/tick_liquidity.pb.go +++ b/x/dex/types/tick_liquidity.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/trade_pair_id.pb.go b/x/dex/types/trade_pair_id.pb.go index 3c4f1980e..d2d64ef4e 100644 --- a/x/dex/types/trade_pair_id.pb.go +++ b/x/dex/types/trade_pair_id.pb.go @@ -5,11 +5,10 @@ package types import ( fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/types/tx.pb.go b/x/dex/types/tx.pb.go index 22d89cac6..433e795c2 100644 --- a/x/dex/types/tx.pb.go +++ b/x/dex/types/tx.pb.go @@ -5,13 +5,8 @@ package types import ( context "context" - fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - time "time" - cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" @@ -21,12 +16,15 @@ import ( grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" _ "google.golang.org/protobuf/types/known/timestamppb" - - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + io "io" + math "math" + math_bits "math/bits" + time "time" ) // Reference imports to suppress errors if they are not otherwise used. @@ -441,16 +439,18 @@ func (m *MsgWithdrawalResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgWithdrawalResponse proto.InternalMessageInfo type MsgPlaceLimitOrder struct { - Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` - Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` - TokenIn string `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in,omitempty"` - TokenOut string `protobuf:"bytes,4,opt,name=token_out,json=tokenOut,proto3" json:"token_out,omitempty"` - TickIndexInToOut int64 `protobuf:"varint,5,opt,name=tick_index_in_to_out,json=tickIndexInToOut,proto3" json:"tick_index_in_to_out,omitempty"` + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` + TokenIn string `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in,omitempty"` + TokenOut string `protobuf:"bytes,4,opt,name=token_out,json=tokenOut,proto3" json:"token_out,omitempty"` + // DEPRECATED: tick_index_in_to_out will be removed in future release; limit_sell_price should be used instead. + TickIndexInToOut int64 `protobuf:"varint,5,opt,name=tick_index_in_to_out,json=tickIndexInToOut,proto3" json:"tick_index_in_to_out,omitempty"` // Deprecated: Do not use. AmountIn cosmossdk_io_math.Int `protobuf:"bytes,7,opt,name=amount_in,json=amountIn,proto3,customtype=cosmossdk.io/math.Int" json:"amount_in" yaml:"amount_in"` OrderType LimitOrderType `protobuf:"varint,8,opt,name=order_type,json=orderType,proto3,enum=neutron.dex.LimitOrderType" json:"order_type,omitempty"` // expirationTime is only valid iff orderType == GOOD_TIL_TIME. - ExpirationTime *time.Time `protobuf:"bytes,9,opt,name=expiration_time,json=expirationTime,proto3,stdtime" json:"expiration_time,omitempty"` - MaxAmountOut *cosmossdk_io_math.Int `protobuf:"bytes,10,opt,name=max_amount_out,json=maxAmountOut,proto3,customtype=cosmossdk.io/math.Int" json:"max_amount_out" yaml:"max_amount_out"` + ExpirationTime *time.Time `protobuf:"bytes,9,opt,name=expiration_time,json=expirationTime,proto3,stdtime" json:"expiration_time,omitempty"` + MaxAmountOut *cosmossdk_io_math.Int `protobuf:"bytes,10,opt,name=max_amount_out,json=maxAmountOut,proto3,customtype=cosmossdk.io/math.Int" json:"max_amount_out" yaml:"max_amount_out"` + LimitSellPrice *github_com_neutron_org_neutron_v4_utils_math.PrecDec `protobuf:"bytes,11,opt,name=limit_sell_price,json=limitSellPrice,proto3,customtype=github.com/neutron-org/neutron/v4/utils/math.PrecDec" json:"limit_sell_price" yaml:"limit_sell_price"` } func (m *MsgPlaceLimitOrder) Reset() { *m = MsgPlaceLimitOrder{} } @@ -514,6 +514,7 @@ func (m *MsgPlaceLimitOrder) GetTokenOut() string { return "" } +// Deprecated: Do not use. func (m *MsgPlaceLimitOrder) GetTickIndexInToOut() int64 { if m != nil { return m.TickIndexInToOut @@ -1033,110 +1034,113 @@ func init() { func init() { proto.RegisterFile("neutron/dex/tx.proto", fileDescriptor_a489f6e187d5e074) } var fileDescriptor_a489f6e187d5e074 = []byte{ - // 1645 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6f, 0x1b, 0x4d, - 0x19, 0xcf, 0xc6, 0x8e, 0x3f, 0x26, 0x89, 0xe3, 0x6c, 0xd2, 0xd7, 0x1b, 0x17, 0xbc, 0xd6, 0xf6, - 0xa5, 0x35, 0x11, 0xb1, 0x9b, 0x52, 0x7a, 0x30, 0x12, 0x92, 0x9d, 0x8f, 0xd6, 0xd4, 0xae, 0xa3, - 0xad, 0x2b, 0xa4, 0x56, 0x62, 0x59, 0x7b, 0x27, 0xce, 0x2a, 0xf6, 0x8e, 0xd9, 0x19, 0xbb, 0x0e, - 0x17, 0x2a, 0x8e, 0x15, 0x87, 0x5e, 0x38, 0xf1, 0x0f, 0xc0, 0xad, 0x12, 0x9c, 0x39, 0xe7, 0x58, - 0x21, 0x21, 0x21, 0x10, 0x06, 0xb5, 0x87, 0x4a, 0x3d, 0xe6, 0xcc, 0x01, 0xcd, 0xec, 0xec, 0x87, - 0xd7, 0xf9, 0x68, 0xaa, 0x8a, 0x4b, 0x33, 0xf3, 0x7b, 0x9e, 0x79, 0xe6, 0xd9, 0xdf, 0xf3, 0x31, - 0x8f, 0x0b, 0xd6, 0x2d, 0x38, 0x24, 0x36, 0xb2, 0x4a, 0x06, 0x1c, 0x97, 0xc8, 0xb8, 0x38, 0xb0, - 0x11, 0x41, 0xe2, 0x22, 0x47, 0x8b, 0x06, 0x1c, 0x67, 0x57, 0xf5, 0xbe, 0x69, 0xa1, 0x12, 0xfb, - 0xd7, 0x91, 0x67, 0x73, 0x1d, 0x84, 0xfb, 0x08, 0x97, 0xda, 0x3a, 0x86, 0xa5, 0xd1, 0x76, 0x1b, - 0x12, 0x7d, 0xbb, 0xd4, 0x41, 0xa6, 0xc5, 0xe5, 0x19, 0x2e, 0xef, 0xe3, 0x6e, 0x69, 0xb4, 0x4d, - 0xff, 0x70, 0xc1, 0x86, 0x23, 0xd0, 0xd8, 0xae, 0xe4, 0x6c, 0xb8, 0x68, 0xbd, 0x8b, 0xba, 0xc8, - 0xc1, 0xe9, 0x8a, 0xa3, 0x72, 0x17, 0xa1, 0x6e, 0x0f, 0x96, 0xd8, 0xae, 0x3d, 0x3c, 0x2c, 0x11, - 0xb3, 0x0f, 0x31, 0xd1, 0xfb, 0x03, 0xae, 0x20, 0x05, 0x3f, 0x60, 0xa0, 0xdb, 0x7a, 0x9f, 0x1b, - 0x54, 0x7e, 0x01, 0x52, 0xbb, 0x70, 0x80, 0xb0, 0x49, 0x9a, 0x03, 0x62, 0x22, 0x0b, 0x8b, 0xdf, - 0x07, 0x69, 0xc3, 0xc4, 0x7a, 0xbb, 0x07, 0x35, 0x7d, 0x48, 0x10, 0x7e, 0xa9, 0x0f, 0x24, 0x21, - 0x2f, 0x14, 0x12, 0xea, 0x0a, 0xc7, 0x2b, 0x1c, 0x16, 0x6f, 0x81, 0xd4, 0xa1, 0x6e, 0xf6, 0x34, - 0x32, 0xd6, 0x90, 0xa5, 0xb5, 0x61, 0x4f, 0x9a, 0x67, 0x8a, 0x8b, 0x14, 0x6d, 0x8d, 0x9b, 0x56, - 0x15, 0xf6, 0x94, 0xd3, 0x08, 0x00, 0x0d, 0xdc, 0xe5, 0xb7, 0x88, 0x12, 0x88, 0x77, 0x6c, 0xa8, - 0x13, 0x64, 0x33, 0xab, 0x49, 0xd5, 0xdd, 0x8a, 0x59, 0x90, 0xb0, 0x61, 0x07, 0x9a, 0x23, 0x68, - 0x33, 0x3b, 0x49, 0xd5, 0xdb, 0x8b, 0x19, 0x10, 0x27, 0xe8, 0x18, 0x5a, 0x9a, 0x2e, 0x45, 0x98, - 0x28, 0xc6, 0xb6, 0x15, 0x5f, 0xd0, 0x96, 0xa2, 0x01, 0x41, 0x55, 0x7c, 0x01, 0x92, 0x7a, 0x1f, - 0x0d, 0x2d, 0x82, 0x35, 0x5d, 0x5a, 0xc8, 0x47, 0x0a, 0xc9, 0xea, 0x4f, 0x4e, 0x27, 0xf2, 0xdc, - 0x3f, 0x26, 0xf2, 0x0d, 0x87, 0x52, 0x6c, 0x1c, 0x17, 0x4d, 0x54, 0xea, 0xeb, 0xe4, 0xa8, 0x58, - 0xb3, 0xc8, 0xa7, 0x89, 0xec, 0x9f, 0x38, 0x9b, 0xc8, 0xe9, 0x13, 0xbd, 0xdf, 0x2b, 0x2b, 0x1e, - 0xa4, 0xa8, 0x09, 0xbe, 0xae, 0x04, 0x8d, 0xb7, 0xa5, 0xd8, 0x35, 0x8d, 0xb7, 0x67, 0x8d, 0xb7, - 0x7d, 0xe3, 0x55, 0xf1, 0x07, 0x60, 0x8d, 0x98, 0x9d, 0x63, 0xcd, 0xb4, 0x0c, 0x38, 0x86, 0x58, - 0xd3, 0x35, 0x82, 0xb4, 0xb6, 0x14, 0xcf, 0x47, 0x0a, 0x11, 0x75, 0x85, 0x8a, 0x6a, 0x8e, 0xa4, - 0xd2, 0x42, 0x55, 0x51, 0x04, 0xd1, 0x43, 0x08, 0xb1, 0x94, 0xc8, 0x47, 0x0a, 0x51, 0x95, 0xad, - 0xc5, 0x1f, 0x81, 0x38, 0x72, 0xa2, 0x29, 0x25, 0xf3, 0x91, 0xc2, 0xe2, 0xbd, 0x9b, 0xc5, 0x40, - 0xae, 0x16, 0xa7, 0x03, 0xae, 0xba, 0xba, 0x65, 0xf9, 0x37, 0x1f, 0xdf, 0x6e, 0xba, 0xe1, 0x78, - 0xfd, 0xf1, 0xed, 0x66, 0x8a, 0xa6, 0x8b, 0x1f, 0x3b, 0x65, 0x1f, 0x2c, 0xef, 0xeb, 0x66, 0x0f, - 0x1a, 0x6e, 0x30, 0x65, 0xb0, 0x68, 0x38, 0x4b, 0xcd, 0x34, 0xc6, 0x2c, 0xa0, 0x51, 0x15, 0x70, - 0xa8, 0x66, 0x8c, 0xc5, 0x75, 0xb0, 0x00, 0x6d, 0x1b, 0xb9, 0x01, 0x75, 0x36, 0xca, 0x3f, 0xe7, - 0x81, 0xe8, 0x9b, 0x55, 0x21, 0x1e, 0x20, 0x0b, 0x43, 0xf1, 0xd7, 0x40, 0xb4, 0x21, 0x86, 0xf6, - 0x08, 0xde, 0xd5, 0xb8, 0x0d, 0x68, 0x48, 0x02, 0xa3, 0xf7, 0xe0, 0x2a, 0x7a, 0xcf, 0x39, 0x7a, - 0x36, 0x91, 0x37, 0x1c, 0x9e, 0x67, 0x65, 0x8a, 0xba, 0xea, 0x82, 0xbb, 0x2e, 0x16, 0x70, 0x60, - 0x3b, 0xe0, 0xc0, 0xfc, 0xf5, 0x1c, 0xd8, 0xbe, 0xc4, 0x81, 0xed, 0xf3, 0x1c, 0xd8, 0xf6, 0x1d, - 0xd8, 0x01, 0x2b, 0x87, 0x8c, 0x60, 0x57, 0x0f, 0x4b, 0x11, 0x16, 0xc0, 0xec, 0x54, 0x00, 0xa7, - 0x82, 0xa0, 0xa6, 0x0e, 0x83, 0x5b, 0xac, 0xfc, 0x6d, 0x1e, 0x2c, 0x37, 0x70, 0xf7, 0x67, 0x26, - 0x39, 0x32, 0x6c, 0xfd, 0xa5, 0xde, 0xfb, 0xbf, 0xd5, 0xdc, 0x08, 0xa4, 0xf1, 0x91, 0x6e, 0x43, - 0x4c, 0x33, 0xd6, 0x86, 0x7d, 0x34, 0x82, 0xbc, 0xf4, 0xea, 0x57, 0xb1, 0x37, 0x73, 0xf0, 0x6c, - 0x22, 0x67, 0x1c, 0xee, 0xc2, 0x12, 0x45, 0x4d, 0x39, 0x50, 0x0b, 0xa9, 0x0c, 0xb8, 0xa8, 0x62, - 0x62, 0x97, 0x57, 0x4c, 0xdc, 0xaf, 0x98, 0xb2, 0x12, 0x4e, 0xfd, 0x55, 0x9e, 0xfa, 0x3e, 0x8b, - 0x4a, 0x06, 0xdc, 0x98, 0x02, 0xdc, 0xbc, 0x55, 0xfe, 0x14, 0x65, 0xe9, 0x7c, 0xd0, 0xd3, 0x3b, - 0xb0, 0x6e, 0xf6, 0x4d, 0xd2, 0xb4, 0x0d, 0x68, 0x7f, 0x21, 0xeb, 0x1b, 0x20, 0xe1, 0x90, 0x6b, - 0x5a, 0x9c, 0x76, 0x87, 0xec, 0x9a, 0x25, 0xde, 0x04, 0x49, 0x47, 0x84, 0x86, 0x84, 0x33, 0xef, - 0xe8, 0x36, 0x87, 0x44, 0x2c, 0x82, 0x75, 0x9f, 0x03, 0xcd, 0xb4, 0x28, 0x05, 0x54, 0x6f, 0x21, - 0x2f, 0x14, 0x22, 0x6a, 0xda, 0x23, 0xa1, 0x66, 0xb5, 0x10, 0xd5, 0xf7, 0x5a, 0x18, 0xbd, 0x28, - 0x4e, 0x8d, 0x7d, 0x76, 0x0b, 0xd3, 0x4c, 0x2b, 0xdc, 0xc2, 0x34, 0xd3, 0xf2, 0x5a, 0x58, 0xcd, - 0x12, 0xcb, 0x00, 0x20, 0xca, 0x81, 0x46, 0x4e, 0x06, 0x50, 0x4a, 0xe4, 0x85, 0x42, 0x2a, 0xd4, - 0x83, 0x7c, 0x9e, 0x5a, 0x27, 0x03, 0xa8, 0x26, 0x91, 0xbb, 0x14, 0x1b, 0x60, 0x05, 0x8e, 0x07, - 0xa6, 0xad, 0xd3, 0xa6, 0xa4, 0xd1, 0x97, 0x4c, 0x4a, 0xe6, 0x05, 0x56, 0x03, 0xce, 0x33, 0x57, - 0x74, 0x9f, 0xb9, 0x62, 0xcb, 0x7d, 0xe6, 0xaa, 0x89, 0xd3, 0x89, 0x2c, 0xbc, 0xf9, 0xb7, 0x2c, - 0xa8, 0x29, 0xff, 0x30, 0x15, 0x8b, 0x16, 0x48, 0xf5, 0xf5, 0xb1, 0xc6, 0xdd, 0xa4, 0x8c, 0x00, - 0xf6, 0xb1, 0x8f, 0xe8, 0x89, 0xcb, 0x3e, 0x36, 0x74, 0xec, 0x6c, 0x22, 0xdf, 0x70, 0xbe, 0x78, - 0x1a, 0x57, 0xd4, 0xa5, 0xbe, 0x3e, 0xae, 0xb0, 0x7d, 0x73, 0x48, 0xca, 0x77, 0xc2, 0x99, 0xf4, - 0x0d, 0xcf, 0xa4, 0x50, 0x7a, 0x28, 0xff, 0x9a, 0x07, 0xd9, 0x59, 0xd8, 0x6b, 0x86, 0x39, 0x00, - 0x88, 0xad, 0x5b, 0x9d, 0x23, 0xf8, 0x18, 0x9e, 0xf0, 0x04, 0x0a, 0x20, 0xe2, 0x2b, 0x01, 0xc4, - 0xe9, 0x30, 0x41, 0xc3, 0x37, 0xcf, 0xf8, 0xd9, 0x28, 0xf2, 0x51, 0x81, 0x0e, 0x1c, 0x45, 0x3e, - 0x70, 0x14, 0x77, 0x90, 0x69, 0x79, 0xe5, 0x77, 0xa7, 0x6b, 0x92, 0xa3, 0x61, 0xbb, 0xd8, 0x41, - 0x7d, 0x3e, 0x57, 0xf0, 0x3f, 0x5b, 0xd8, 0x38, 0x2e, 0xd1, 0x60, 0x61, 0x76, 0xe0, 0xd3, 0x44, - 0x76, 0x8d, 0x9f, 0x4d, 0xe4, 0x94, 0xf3, 0xdd, 0x1c, 0x50, 0xd4, 0x18, 0x5d, 0xd5, 0x2c, 0xf1, - 0xf7, 0x02, 0x48, 0x11, 0xfd, 0x18, 0xda, 0x1a, 0x13, 0x51, 0x6e, 0x23, 0x57, 0x79, 0xf2, 0xfc, - 0xfa, 0x9e, 0x84, 0xee, 0xf0, 0x03, 0x31, 0x8d, 0x2b, 0xea, 0x12, 0x03, 0xe8, 0xa9, 0xe6, 0x90, - 0x28, 0xaf, 0x05, 0x70, 0x33, 0x50, 0xaf, 0xfb, 0x66, 0xaf, 0x07, 0x8d, 0xcf, 0x2a, 0x4f, 0x19, - 0x2c, 0x72, 0xa2, 0xb5, 0x63, 0x78, 0xc2, 0x2b, 0x34, 0xc0, 0x7d, 0xf9, 0x6e, 0x38, 0xc6, 0x72, - 0xa8, 0x5b, 0x84, 0x2f, 0x53, 0xbe, 0x07, 0x6e, 0x5d, 0x22, 0xf6, 0x3a, 0xc9, 0xaf, 0xc0, 0x5a, - 0x03, 0x77, 0x77, 0x74, 0xab, 0x03, 0x7b, 0x5f, 0xc7, 0xd5, 0x42, 0xd8, 0xd5, 0x0c, 0x77, 0x35, - 0x7c, 0x89, 0xf2, 0x5d, 0x46, 0x57, 0x18, 0xf6, 0x5c, 0xbb, 0x05, 0x96, 0x1b, 0xc3, 0x1e, 0x31, - 0x1f, 0xa1, 0x81, 0x8a, 0x86, 0x04, 0xd2, 0x36, 0x7a, 0x84, 0x06, 0xd8, 0x79, 0x9f, 0x55, 0xb6, - 0x56, 0xfe, 0x12, 0x01, 0x2b, 0x0d, 0xdc, 0x75, 0x15, 0x9f, 0xd2, 0x21, 0xf1, 0xcb, 0xda, 0xe0, - 0x3d, 0x10, 0xb3, 0xe9, 0x35, 0xe7, 0x3f, 0x80, 0x53, 0x9e, 0xa8, 0x5c, 0x73, 0xba, 0xa5, 0x45, - 0xbf, 0x72, 0x4b, 0xfb, 0x9d, 0x00, 0xd2, 0x70, 0x6c, 0x12, 0xad, 0x47, 0xb9, 0xd1, 0x06, 0xb6, - 0xd9, 0x81, 0xac, 0xb9, 0x26, 0xab, 0xc7, 0xfc, 0x92, 0xfb, 0x81, 0x9c, 0xe6, 0xde, 0x6e, 0x21, - 0xbb, 0xeb, 0xae, 0x4b, 0xa3, 0xfb, 0xa5, 0x21, 0x31, 0x7b, 0xd8, 0xb9, 0xff, 0xc0, 0x86, 0x9d, - 0x5d, 0xd8, 0xa1, 0x6f, 0x5f, 0xd8, 0xae, 0xff, 0xf6, 0x85, 0x25, 0x0a, 0xed, 0x6f, 0x26, 0x61, - 0xf1, 0x39, 0xa0, 0x80, 0x78, 0x1b, 0xac, 0x0c, 0x68, 0xdf, 0x6f, 0x43, 0x4c, 0x34, 0x46, 0x84, - 0x14, 0x63, 0x43, 0xf8, 0x32, 0x85, 0xab, 0x10, 0x13, 0x46, 0x52, 0xf9, 0xdb, 0x70, 0x22, 0xac, - 0xf1, 0x44, 0x08, 0x06, 0x4b, 0xf9, 0xad, 0x00, 0x32, 0x21, 0xcc, 0xeb, 0x48, 0xbf, 0x04, 0x09, - 0xaf, 0xce, 0x85, 0xab, 0xea, 0xfc, 0xc7, 0xd7, 0xaf, 0x73, 0xcf, 0xba, 0xca, 0x7a, 0x0f, 0xad, - 0xe1, 0x3f, 0x0a, 0x2c, 0x9f, 0x9e, 0x0d, 0x0c, 0x9d, 0xc0, 0x03, 0xf6, 0xbb, 0x45, 0x7c, 0x00, - 0x92, 0xfa, 0x90, 0x1c, 0x21, 0xdb, 0x24, 0xbc, 0x2f, 0x56, 0xa5, 0xbf, 0xfe, 0x79, 0x6b, 0x9d, - 0xbb, 0x52, 0x31, 0x0c, 0x1b, 0x62, 0xfc, 0x94, 0xd8, 0xa6, 0xd5, 0x55, 0x7d, 0x55, 0xf1, 0x01, - 0x88, 0x39, 0xbf, 0x7c, 0x78, 0xbb, 0x5c, 0x9b, 0xca, 0x28, 0xc7, 0x78, 0x35, 0x49, 0xdd, 0xfe, - 0xc3, 0xc7, 0xb7, 0x9b, 0x82, 0xca, 0xb5, 0xcb, 0xb7, 0x29, 0x71, 0xbe, 0x9d, 0x20, 0x75, 0x41, - 0xbf, 0x94, 0x0d, 0xc6, 0x5c, 0x10, 0x72, 0x99, 0xdb, 0x1c, 0x83, 0xd4, 0xf4, 0x7b, 0x27, 0x7e, - 0x03, 0xc4, 0x87, 0xcd, 0xe6, 0xae, 0xd6, 0xaa, 0xd5, 0xb5, 0x9d, 0xca, 0x93, 0x9d, 0xbd, 0x7a, - 0x7d, 0x6f, 0x37, 0x3d, 0x27, 0xa6, 0xc1, 0xd2, 0x7e, 0xad, 0x5e, 0xd7, 0x9a, 0xaa, 0xf6, 0xb8, - 0x56, 0xaf, 0xa7, 0x05, 0x31, 0x03, 0xd6, 0x6a, 0x8d, 0xc6, 0xde, 0x6e, 0xad, 0xd2, 0xda, 0xa3, - 0xb0, 0xa3, 0x9d, 0x9e, 0xa7, 0xaa, 0x3f, 0x7d, 0xf6, 0xb4, 0xa5, 0xd5, 0x9e, 0x68, 0xad, 0x5a, - 0x63, 0x2f, 0x1d, 0x11, 0x57, 0xc1, 0xb2, 0x67, 0x94, 0x41, 0xd1, 0x7b, 0xff, 0x8d, 0x82, 0x48, - 0x03, 0x77, 0xc5, 0x1d, 0x10, 0x77, 0x67, 0xf6, 0xcc, 0x74, 0x25, 0x79, 0x63, 0x78, 0x56, 0xbe, - 0x40, 0xe0, 0x25, 0x40, 0x1d, 0x80, 0xc0, 0x50, 0x99, 0x0d, 0xab, 0xfb, 0xb2, 0xac, 0x72, 0xb1, - 0xcc, 0xb3, 0xf6, 0x02, 0xac, 0x84, 0x27, 0xa6, 0x19, 0x0f, 0x42, 0x0a, 0xd9, 0x3b, 0x57, 0x28, - 0x78, 0xc6, 0x47, 0x40, 0xba, 0xb0, 0xf1, 0x17, 0x2e, 0x72, 0x2e, 0xac, 0x99, 0xbd, 0xfb, 0xb9, - 0x9a, 0xde, 0xbd, 0x3f, 0x07, 0xe9, 0x99, 0xee, 0x9d, 0x0f, 0x5b, 0x09, 0x6b, 0x64, 0x0b, 0x57, - 0x69, 0x78, 0xf6, 0x55, 0xb0, 0x34, 0xd5, 0x5c, 0xbf, 0x13, 0x3e, 0x19, 0x94, 0x66, 0xbf, 0xbd, - 0x4c, 0x1a, 0xb4, 0x39, 0x55, 0x60, 0x33, 0x36, 0x83, 0xd2, 0x59, 0x9b, 0xe7, 0x65, 0x7c, 0x76, - 0xe1, 0x15, 0xad, 0xa1, 0xea, 0xc3, 0xd3, 0xf7, 0x39, 0xe1, 0xdd, 0xfb, 0x9c, 0xf0, 0x9f, 0xf7, - 0x39, 0xe1, 0xcd, 0x87, 0xdc, 0xdc, 0xbb, 0x0f, 0xb9, 0xb9, 0xbf, 0x7f, 0xc8, 0xcd, 0x3d, 0xdf, - 0xba, 0xba, 0x57, 0x8e, 0x9d, 0xff, 0x6e, 0xa1, 0x2d, 0xa2, 0x1d, 0x63, 0x33, 0xdf, 0x0f, 0xff, - 0x17, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xc7, 0xa3, 0x67, 0x8a, 0x11, 0x00, 0x00, + // 1687 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6f, 0x23, 0x49, + 0x15, 0x4f, 0xdb, 0x89, 0x3f, 0x2a, 0x89, 0xe3, 0x74, 0x32, 0xeb, 0x8e, 0x07, 0xdc, 0x56, 0xcf, + 0xb2, 0x63, 0x22, 0x62, 0x4f, 0xc2, 0xb2, 0x07, 0x23, 0x21, 0xd9, 0xf9, 0xd8, 0x35, 0x6b, 0xaf, + 0xa3, 0x8e, 0x57, 0x48, 0xbb, 0x12, 0x4d, 0xdb, 0x5d, 0x71, 0x5a, 0x69, 0x77, 0x99, 0xae, 0xb2, + 0xd7, 0xe1, 0xc2, 0x8a, 0xe3, 0x8a, 0xc3, 0x5c, 0x38, 0xf1, 0x0f, 0xc0, 0x6d, 0x0e, 0x9c, 0x39, + 0xe7, 0xc6, 0x08, 0x09, 0x09, 0x81, 0x30, 0x68, 0xe6, 0x30, 0xd2, 0x1c, 0x73, 0xe6, 0x80, 0xaa, + 0xba, 0xfa, 0xc3, 0xed, 0x7c, 0x4c, 0x86, 0xd1, 0x5e, 0xe2, 0xaa, 0xf7, 0x5e, 0xbd, 0x7a, 0xf5, + 0x7b, 0xef, 0xfd, 0xaa, 0x3a, 0x60, 0xd3, 0x86, 0x23, 0xe2, 0x20, 0xbb, 0x62, 0xc0, 0x49, 0x85, + 0x4c, 0xca, 0x43, 0x07, 0x11, 0x24, 0x2e, 0x73, 0x69, 0xd9, 0x80, 0x93, 0xfc, 0xba, 0x3e, 0x30, + 0x6d, 0x54, 0x61, 0x7f, 0x5d, 0x7d, 0xbe, 0xd0, 0x43, 0x78, 0x80, 0x70, 0xa5, 0xab, 0x63, 0x58, + 0x19, 0xef, 0x76, 0x21, 0xd1, 0x77, 0x2b, 0x3d, 0x64, 0xda, 0x5c, 0x9f, 0xe3, 0xfa, 0x01, 0xee, + 0x57, 0xc6, 0xbb, 0xf4, 0x87, 0x2b, 0xb6, 0x5c, 0x85, 0xc6, 0x66, 0x15, 0x77, 0xc2, 0x55, 0x9b, + 0x7d, 0xd4, 0x47, 0xae, 0x9c, 0x8e, 0xb8, 0x54, 0xee, 0x23, 0xd4, 0xb7, 0x60, 0x85, 0xcd, 0xba, + 0xa3, 0xd3, 0x0a, 0x31, 0x07, 0x10, 0x13, 0x7d, 0x30, 0xe4, 0x06, 0x52, 0xf8, 0x00, 0x43, 0xdd, + 0xd1, 0x07, 0xdc, 0xa1, 0xf2, 0x0b, 0x90, 0x39, 0x80, 0x43, 0x84, 0x4d, 0xd2, 0x1e, 0x12, 0x13, + 0xd9, 0x58, 0xfc, 0x3e, 0xc8, 0x1a, 0x26, 0xd6, 0xbb, 0x16, 0xd4, 0xf4, 0x11, 0x41, 0xf8, 0x2b, + 0x7d, 0x28, 0x09, 0x45, 0xa1, 0x94, 0x52, 0xd7, 0xb8, 0xbc, 0xc6, 0xc5, 0xe2, 0x23, 0x90, 0x39, + 0xd5, 0x4d, 0x4b, 0x23, 0x13, 0x0d, 0xd9, 0x5a, 0x17, 0x5a, 0x52, 0x8c, 0x19, 0x2e, 0x53, 0x69, + 0x67, 0xd2, 0xb6, 0xeb, 0xd0, 0x52, 0x2e, 0xe3, 0x00, 0xb4, 0x70, 0x9f, 0xef, 0x22, 0x4a, 0x20, + 0xd9, 0x73, 0xa0, 0x4e, 0x90, 0xc3, 0xbc, 0xa6, 0x55, 0x6f, 0x2a, 0xe6, 0x41, 0xca, 0x81, 0x3d, + 0x68, 0x8e, 0xa1, 0xc3, 0xfc, 0xa4, 0x55, 0x7f, 0x2e, 0xe6, 0x40, 0x92, 0xa0, 0x73, 0x68, 0x6b, + 0xba, 0x14, 0x67, 0xaa, 0x04, 0x9b, 0xd6, 0x02, 0x45, 0x57, 0x5a, 0x0c, 0x29, 0xea, 0xe2, 0x97, + 0x20, 0xad, 0x0f, 0xd0, 0xc8, 0x26, 0x58, 0xd3, 0xa5, 0xa5, 0x62, 0xbc, 0x94, 0xae, 0xff, 0xe4, + 0x72, 0x2a, 0x2f, 0xfc, 0x63, 0x2a, 0x3f, 0x70, 0x21, 0xc5, 0xc6, 0x79, 0xd9, 0x44, 0x95, 0x81, + 0x4e, 0xce, 0xca, 0x0d, 0x9b, 0xbc, 0x9e, 0xca, 0xc1, 0x8a, 0xab, 0xa9, 0x9c, 0xbd, 0xd0, 0x07, + 0x56, 0x55, 0xf1, 0x45, 0x8a, 0x9a, 0xe2, 0xe3, 0x5a, 0xd8, 0x79, 0x57, 0x4a, 0xdc, 0xd3, 0x79, + 0x77, 0xde, 0x79, 0x37, 0x70, 0x5e, 0x17, 0x7f, 0x00, 0x36, 0x88, 0xd9, 0x3b, 0xd7, 0x4c, 0xdb, + 0x80, 0x13, 0x88, 0x35, 0x5d, 0x23, 0x48, 0xeb, 0x4a, 0xc9, 0x62, 0xbc, 0x14, 0x57, 0xd7, 0xa8, + 0xaa, 0xe1, 0x6a, 0x6a, 0x1d, 0x54, 0x17, 0x45, 0xb0, 0x78, 0x0a, 0x21, 0x96, 0x52, 0xc5, 0x78, + 0x69, 0x51, 0x65, 0x63, 0xf1, 0x47, 0x20, 0x89, 0xdc, 0x6c, 0x4a, 0xe9, 0x62, 0xbc, 0xb4, 0xbc, + 0xf7, 0xb0, 0x1c, 0xaa, 0xd5, 0xf2, 0x6c, 0xc2, 0x55, 0xcf, 0xb6, 0x2a, 0xff, 0xe6, 0xd5, 0xb3, + 0x6d, 0x2f, 0x1d, 0xdf, 0xbc, 0x7a, 0xb6, 0x9d, 0xa1, 0xe5, 0x12, 0xe4, 0x4e, 0x39, 0x02, 0xab, + 0x47, 0xba, 0x69, 0x41, 0xc3, 0x4b, 0xa6, 0x0c, 0x96, 0x0d, 0x77, 0xa8, 0x99, 0xc6, 0x84, 0x25, + 0x74, 0x51, 0x05, 0x5c, 0xd4, 0x30, 0x26, 0xe2, 0x26, 0x58, 0x82, 0x8e, 0x83, 0xbc, 0x84, 0xba, + 0x13, 0xe5, 0x9f, 0x31, 0x20, 0x06, 0x6e, 0x55, 0x88, 0x87, 0xc8, 0xc6, 0x50, 0xfc, 0x35, 0x10, + 0x1d, 0x88, 0xa1, 0x33, 0x86, 0x4f, 0x34, 0xee, 0x03, 0x1a, 0x92, 0xc0, 0xe0, 0x3d, 0xbe, 0x0b, + 0xde, 0x6b, 0x96, 0x5e, 0x4d, 0xe5, 0x2d, 0x17, 0xe7, 0x79, 0x9d, 0xa2, 0xae, 0x7b, 0xc2, 0x03, + 0x4f, 0x16, 0x0a, 0x60, 0x37, 0x14, 0x40, 0xec, 0x7e, 0x01, 0xec, 0xde, 0x12, 0xc0, 0xee, 0x75, + 0x01, 0xec, 0x06, 0x01, 0xec, 0x83, 0xb5, 0x53, 0x06, 0xb0, 0x67, 0x87, 0xa5, 0x38, 0x4b, 0x60, + 0x7e, 0x26, 0x81, 0x33, 0x49, 0x50, 0x33, 0xa7, 0xe1, 0x29, 0x56, 0xfe, 0x16, 0x03, 0xab, 0x2d, + 0xdc, 0xff, 0x99, 0x49, 0xce, 0x0c, 0x47, 0xff, 0x4a, 0xb7, 0xbe, 0xb5, 0x9e, 0x1b, 0x83, 0x2c, + 0x3e, 0xd3, 0x1d, 0x88, 0x69, 0xc5, 0x3a, 0x70, 0x80, 0xc6, 0x90, 0xb7, 0x5e, 0xf3, 0x2e, 0xf4, + 0xe6, 0x16, 0x5e, 0x4d, 0xe5, 0x9c, 0x8b, 0x5d, 0x54, 0xa3, 0xa8, 0x19, 0x57, 0xd4, 0x41, 0x2a, + 0x13, 0xdc, 0xd4, 0x31, 0x89, 0xdb, 0x3b, 0x26, 0x19, 0x74, 0x4c, 0x55, 0x89, 0x96, 0xfe, 0x3a, + 0x2f, 0xfd, 0x00, 0x45, 0x25, 0x07, 0x1e, 0xcc, 0x08, 0xbc, 0xba, 0x55, 0xfe, 0xb2, 0xc4, 0xca, + 0xf9, 0xd8, 0xd2, 0x7b, 0xb0, 0x69, 0x0e, 0x4c, 0xd2, 0x76, 0x0c, 0xe8, 0xbc, 0x25, 0xea, 0x5b, + 0x20, 0xe5, 0x82, 0x6b, 0xda, 0x1c, 0x76, 0x17, 0xec, 0x86, 0x2d, 0x3e, 0x04, 0x69, 0x57, 0x85, + 0x46, 0x84, 0x23, 0xef, 0xda, 0xb6, 0x47, 0x44, 0xdc, 0x03, 0x9b, 0x01, 0x06, 0x9a, 0x69, 0x53, + 0x08, 0xa8, 0xdd, 0x52, 0x51, 0x28, 0xc5, 0xeb, 0x31, 0x49, 0x50, 0xb3, 0x3e, 0x10, 0x0d, 0xbb, + 0x83, 0xe8, 0x1a, 0x9f, 0xc6, 0xe8, 0x66, 0x49, 0xea, 0xf0, 0x8d, 0x69, 0x4c, 0x33, 0xed, 0x28, + 0x8d, 0x69, 0xa6, 0xed, 0xd3, 0x58, 0xc3, 0x16, 0xab, 0x00, 0x20, 0x8a, 0x83, 0x46, 0x2e, 0x86, + 0x50, 0x4a, 0x15, 0x85, 0x52, 0x26, 0xc2, 0x43, 0x01, 0x56, 0x9d, 0x8b, 0x21, 0x54, 0xd3, 0xc8, + 0x1b, 0x8a, 0x2d, 0xb0, 0x06, 0x27, 0x43, 0xd3, 0xd1, 0x29, 0x31, 0x69, 0xf4, 0x36, 0x93, 0xd2, + 0x45, 0x81, 0xf5, 0x81, 0x7b, 0xd5, 0x95, 0xbd, 0xab, 0xae, 0xdc, 0xf1, 0xae, 0xba, 0x7a, 0xea, + 0x72, 0x2a, 0x0b, 0x4f, 0xff, 0x2d, 0x0b, 0x6a, 0x26, 0x58, 0x4c, 0xd5, 0xa2, 0x0d, 0x32, 0x03, + 0x7d, 0xa2, 0xf1, 0x30, 0x29, 0x2a, 0x80, 0x1d, 0xf6, 0x13, 0xba, 0xe2, 0xb6, 0xc3, 0x46, 0x96, + 0x5d, 0x4d, 0xe5, 0x07, 0xee, 0x89, 0x67, 0xe5, 0x8a, 0xba, 0x32, 0xd0, 0x27, 0x35, 0x36, 0xa7, + 0xb8, 0xfe, 0x4e, 0x00, 0x59, 0x8b, 0x1e, 0x4e, 0xc3, 0xd0, 0xb2, 0xb4, 0xa1, 0x63, 0xf6, 0xa0, + 0xb4, 0xcc, 0xb6, 0x3c, 0xe7, 0x5b, 0x7e, 0xd8, 0x37, 0xc9, 0xd9, 0xa8, 0x5b, 0xee, 0xa1, 0x41, + 0x85, 0x63, 0xb2, 0x83, 0x9c, 0xbe, 0x37, 0xae, 0x8c, 0x3f, 0xac, 0x8c, 0x88, 0x69, 0x61, 0x37, + 0x9a, 0x63, 0x07, 0xf6, 0x0e, 0x60, 0x8f, 0xf6, 0x49, 0xd4, 0x6f, 0xd0, 0x27, 0x51, 0x8d, 0xa2, + 0x66, 0x98, 0xe8, 0x04, 0x5a, 0xd6, 0x31, 0x15, 0x54, 0x1f, 0x47, 0xab, 0xfc, 0x3d, 0x5e, 0xe5, + 0x91, 0xd2, 0x55, 0xfe, 0x15, 0x03, 0xf9, 0x79, 0xb1, 0x4f, 0xd4, 0x05, 0x00, 0x88, 0xa3, 0xdb, + 0xbd, 0x33, 0xf8, 0x29, 0xbc, 0xe0, 0xc5, 0x1d, 0x92, 0x88, 0x5f, 0x0b, 0x20, 0x49, 0x1f, 0x3a, + 0xb4, 0xac, 0x62, 0x2c, 0x6f, 0x5b, 0x65, 0xfe, 0x8c, 0xa1, 0x8f, 0xa1, 0x32, 0x7f, 0x0c, 0x95, + 0xf7, 0x91, 0x69, 0xfb, 0xd4, 0xf0, 0x38, 0x84, 0x08, 0x7f, 0x19, 0xb9, 0x3f, 0x3b, 0xd8, 0x38, + 0xaf, 0xd0, 0x22, 0xc2, 0x6c, 0xc1, 0xeb, 0xa9, 0xec, 0x39, 0xbf, 0x9a, 0xca, 0x19, 0xf7, 0xec, + 0x5c, 0xa0, 0xa8, 0x09, 0x3a, 0x6a, 0xd8, 0xe2, 0xef, 0x05, 0x90, 0x21, 0xfa, 0x39, 0x74, 0x34, + 0xa6, 0xa2, 0x39, 0x8f, 0xdf, 0x15, 0xc9, 0x17, 0xf7, 0x8f, 0x24, 0xb2, 0x47, 0x50, 0x20, 0xb3, + 0x72, 0x45, 0x5d, 0x61, 0x02, 0xba, 0xaa, 0x3d, 0x22, 0xca, 0x37, 0x02, 0x78, 0x18, 0xe2, 0x92, + 0x23, 0xd3, 0xb2, 0xa0, 0xf1, 0x46, 0xd4, 0x21, 0x83, 0x65, 0x0e, 0xb4, 0x76, 0x0e, 0x2f, 0x38, + 0x7b, 0x84, 0xb0, 0xaf, 0x3e, 0x89, 0xe6, 0x58, 0x8e, 0x30, 0x59, 0x74, 0x33, 0xe5, 0x7b, 0xe0, + 0xd1, 0x2d, 0x6a, 0x9f, 0xe5, 0x7e, 0x05, 0x36, 0x5a, 0xb8, 0xbf, 0xaf, 0xdb, 0x3d, 0x68, 0xbd, + 0x9b, 0x50, 0x4b, 0xd1, 0x50, 0x73, 0x3c, 0xd4, 0xe8, 0x26, 0xca, 0x77, 0x19, 0x5c, 0x51, 0xb1, + 0x1f, 0xda, 0x23, 0xb0, 0xda, 0x1a, 0x59, 0xc4, 0xfc, 0x04, 0x0d, 0x55, 0x34, 0x22, 0x90, 0x52, + 0xfc, 0x19, 0x1a, 0x62, 0xf7, 0xed, 0xa0, 0xb2, 0xb1, 0xf2, 0xe7, 0x38, 0x58, 0x6b, 0xe1, 0xbe, + 0x67, 0x78, 0x42, 0x1f, 0xb0, 0x6f, 0x47, 0xd1, 0x7b, 0x20, 0xe1, 0xd0, 0x6d, 0xae, 0xbf, 0x9c, + 0x67, 0x22, 0x51, 0xb9, 0xe5, 0x2c, 0xd5, 0x2e, 0xbe, 0x63, 0xaa, 0xa5, 0x7c, 0x03, 0x27, 0x26, + 0xd1, 0x5c, 0x0a, 0x70, 0xf9, 0x66, 0xc9, 0xe7, 0x9b, 0x85, 0xff, 0x87, 0x6f, 0xa2, 0x7e, 0x03, + 0xbe, 0x89, 0x6a, 0x14, 0xca, 0xbb, 0x26, 0x61, 0xf9, 0x61, 0x7c, 0x23, 0x7e, 0x00, 0xd6, 0x86, + 0xf4, 0x4e, 0xea, 0x42, 0x4c, 0x34, 0x06, 0x84, 0x94, 0x60, 0x1f, 0x08, 0xab, 0x54, 0x5c, 0x87, + 0x98, 0x30, 0x90, 0xaa, 0xef, 0x47, 0x0b, 0x61, 0x83, 0x17, 0x42, 0x38, 0x59, 0xca, 0x6f, 0x05, + 0x90, 0x8b, 0xc8, 0x7c, 0x46, 0xfa, 0x25, 0x48, 0xf9, 0x7d, 0x2e, 0xdc, 0xd5, 0xe7, 0x3f, 0xbe, + 0x7f, 0x9f, 0xfb, 0xde, 0x55, 0xc6, 0x3d, 0xb4, 0x87, 0xff, 0x28, 0xb0, 0x7a, 0xfa, 0x7c, 0x68, + 0xe8, 0x04, 0x1e, 0xb3, 0x6f, 0x2a, 0xf1, 0x23, 0x90, 0xd6, 0x47, 0xe4, 0x0c, 0x39, 0x26, 0xe1, + 0xbc, 0x58, 0x97, 0xfe, 0xfa, 0xa7, 0x9d, 0x4d, 0x1e, 0x4a, 0xcd, 0x30, 0x1c, 0x88, 0xf1, 0x09, + 0x71, 0x4c, 0xbb, 0xaf, 0x06, 0xa6, 0xe2, 0x47, 0x20, 0xe1, 0x7e, 0x95, 0x71, 0xba, 0xdc, 0x98, + 0xa9, 0x28, 0xd7, 0x79, 0x3d, 0x4d, 0xc3, 0xfe, 0xc3, 0xab, 0x67, 0xdb, 0x82, 0xca, 0xad, 0xab, + 0x1f, 0x50, 0xe0, 0x02, 0x3f, 0x61, 0xe8, 0xc2, 0x71, 0x29, 0x5b, 0x0c, 0xb9, 0xb0, 0xc8, 0x43, + 0x6e, 0x7b, 0x02, 0x32, 0xb3, 0xf7, 0xb0, 0xf8, 0x1e, 0x10, 0x3f, 0x6e, 0xb7, 0x0f, 0xb4, 0x4e, + 0xa3, 0xa9, 0xed, 0xd7, 0x3e, 0xdb, 0x3f, 0x6c, 0x36, 0x0f, 0x0f, 0xb2, 0x0b, 0x62, 0x16, 0xac, + 0x1c, 0x35, 0x9a, 0x4d, 0xad, 0xad, 0x6a, 0x9f, 0x36, 0x9a, 0xcd, 0xac, 0x20, 0xe6, 0xc0, 0x46, + 0xa3, 0xd5, 0x3a, 0x3c, 0x68, 0xd4, 0x3a, 0x87, 0x54, 0xec, 0x5a, 0x67, 0x63, 0xd4, 0xf4, 0xa7, + 0x9f, 0x9f, 0x74, 0xb4, 0xc6, 0x67, 0x5a, 0xa7, 0xd1, 0x3a, 0xcc, 0xc6, 0xc5, 0x75, 0xb0, 0xea, + 0x3b, 0x65, 0xa2, 0xc5, 0xbd, 0xff, 0x2e, 0x82, 0x78, 0x0b, 0xf7, 0xc5, 0x7d, 0x90, 0xf4, 0xbe, + 0x27, 0x72, 0xb3, 0x9d, 0xe4, 0x7f, 0x22, 0xe4, 0xe5, 0x1b, 0x14, 0x7e, 0x01, 0x34, 0x01, 0x08, + 0x3d, 0x78, 0xf3, 0x51, 0xf3, 0x40, 0x97, 0x57, 0x6e, 0xd6, 0xf9, 0xde, 0xbe, 0x04, 0x6b, 0xd1, + 0xd7, 0xdc, 0x5c, 0x04, 0x11, 0x83, 0xfc, 0xe3, 0x3b, 0x0c, 0x7c, 0xe7, 0x63, 0x20, 0xdd, 0x48, + 0xfc, 0xa5, 0x9b, 0x82, 0x8b, 0x5a, 0xe6, 0x9f, 0xbc, 0xa9, 0xa5, 0xbf, 0xef, 0xcf, 0x41, 0x76, + 0x8e, 0xbd, 0x8b, 0x51, 0x2f, 0x51, 0x8b, 0x7c, 0xe9, 0x2e, 0x0b, 0xdf, 0xbf, 0x0a, 0x56, 0x66, + 0xc8, 0xf5, 0x3b, 0xd1, 0x95, 0x61, 0x6d, 0xfe, 0xfd, 0xdb, 0xb4, 0x61, 0x9f, 0x33, 0x0d, 0x36, + 0xe7, 0x33, 0xac, 0x9d, 0xf7, 0x79, 0x5d, 0xc5, 0xe7, 0x97, 0xbe, 0xa6, 0x3d, 0x54, 0xff, 0xf8, + 0xf2, 0x45, 0x41, 0x78, 0xfe, 0xa2, 0x20, 0xfc, 0xe7, 0x45, 0x41, 0x78, 0xfa, 0xb2, 0xb0, 0xf0, + 0xfc, 0x65, 0x61, 0xe1, 0xef, 0x2f, 0x0b, 0x0b, 0x5f, 0xec, 0xdc, 0xcd, 0x95, 0x13, 0xf7, 0x5f, + 0x41, 0x94, 0x22, 0xba, 0x09, 0xf6, 0x16, 0xfd, 0xe1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x2a, + 0x07, 0x8e, 0x98, 0x26, 0x12, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1853,6 +1857,18 @@ func (m *MsgPlaceLimitOrder) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.LimitSellPrice != nil { + { + size := m.LimitSellPrice.Size() + i -= size + if _, err := m.LimitSellPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } if m.MaxAmountOut != nil { { size := m.MaxAmountOut.Size() @@ -2523,6 +2539,10 @@ func (m *MsgPlaceLimitOrder) Size() (n int) { l = m.MaxAmountOut.Size() n += 1 + l + sovTx(uint64(l)) } + if m.LimitSellPrice != nil { + l = m.LimitSellPrice.Size() + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -4181,6 +4201,42 @@ func (m *MsgPlaceLimitOrder) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LimitSellPrice", 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 + } + var v github_com_neutron_org_neutron_v4_utils_math.PrecDec + m.LimitSellPrice = &v + if err := m.LimitSellPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/x/dex/types/types.go b/x/dex/types/types.go index ab1254f4c..18196ebae 100644 --- a/x/dex/types/types.go +++ b/x/dex/types/types.go @@ -1 +1,17 @@ package types + +const ( + // EventTypeNeutronMessage defines the event type used by the Interchain Queries module events. + EventTypeNeutronMessage = "neutron" + + AttributeDenom = "denom" + AttributeWithdrawn = "total_withdrawn" + AttributeGasConsumed = "gas_consumed" + AttributeLiquidityTickType = "liquidity_tick_type" + AttributeLp = "lp" + AttributeLimitOrder = "limit_order" + AttributeIsExpiringLimitOrder = "is_expiring_limit_order" + AttributeInc = "inc" + AttributeDec = "dec" + AttributePairID = "pair_id" +) diff --git a/x/dex/types/v2/params.pb.go b/x/dex/types/v2/params.pb.go index 297167892..b6e4ad499 100644 --- a/x/dex/types/v2/params.pb.go +++ b/x/dex/types/v2/params.pb.go @@ -5,14 +5,12 @@ package v2 import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - github_com_neutron_org_neutron_v4_utils_math "github.com/neutron-org/neutron/v4/utils/math" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/dex/utils/math.go b/x/dex/utils/math.go index 37119f9c7..1a369aab3 100644 --- a/x/dex/utils/math.go +++ b/x/dex/utils/math.go @@ -3,6 +3,7 @@ package utils import ( "fmt" "math" + "regexp" "strconv" sdkmath "cosmossdk.io/math" @@ -66,3 +67,35 @@ func MustSafeUint64ToInt64(in uint64) (out int64) { return safeInt64 } + +var scientificNotationRE = regexp.MustCompile(`^([\d\.]+)([Ee]([\-\+])?(\d+))?$`) + +func ParsePrecDecScientificNotation(n string) (math_utils.PrecDec, error) { + match := scientificNotationRE.FindSubmatch([]byte(n)) + + if len(match) == 0 { + return math_utils.ZeroPrecDec(), fmt.Errorf("error parsing string as PrecDec with possible scientific notation") + } + + baseDec, err := math_utils.NewPrecDecFromStr(string(match[1])) + if err != nil { + return math_utils.ZeroPrecDec(), fmt.Errorf("error parsing string as PrecDec with possible scientific notation: %v", err) + } + + // No scientific notation + if len(match[2]) == 0 { + return baseDec, nil + } + + pow, err := strconv.ParseUint(string(match[4]), 10, 64) + if err != nil { + return math_utils.ZeroPrecDec(), fmt.Errorf("error parsing string as PrecDec with possible scientific notation: %v", err) + } + + shift := math_utils.NewPrecDec(10).Power(pow) + + if string(match[3]) == "-" { // negative exponent + return baseDec.Quo(shift), nil + } // else string(match[3]) == "+" || string(match[3]) == "" // positive exponent + return baseDec.Mul(shift), nil +} diff --git a/x/dex/utils/math_test.go b/x/dex/utils/math_test.go new file mode 100644 index 000000000..fa52da35c --- /dev/null +++ b/x/dex/utils/math_test.go @@ -0,0 +1,109 @@ +package utils_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + math_utils "github.com/neutron-org/neutron/v4/utils/math" + "github.com/neutron-org/neutron/v4/x/dex/utils" +) + +func TestParsePrecDecScientificNotation(t *testing.T) { + for _, tc := range []struct { + desc string + in string + out math_utils.PrecDec + err bool + }{ + { + desc: "invalid garbage", + in: "sdfdsf", + err: true, + }, + { + desc: "invalid exp", + in: "10Z-5", + err: true, + }, + { + desc: "invalid exp 2", + in: "10E-", + err: true, + }, + { + desc: "invalid exp 3", + in: "10E-+1", + err: true, + }, + { + desc: "invalid exp 4", + in: "10E+1.0", + err: true, + }, + { + desc: "valid integer", + in: "10", + out: math_utils.NewPrecDec(10), + }, + { + desc: "valid decimal", + in: "10.1", + out: math_utils.MustNewPrecDecFromStr("10.1"), + }, + { + desc: "valid integer with E-6", + in: "6E-6", + out: math_utils.MustNewPrecDecFromStr("0.000006"), + }, + { + desc: "valid decimal with E+0", + in: "10.1E+0", + out: math_utils.MustNewPrecDecFromStr("10.1"), + }, + { + desc: "valid decimal with E+1", + in: "10.1E+1", + out: math_utils.MustNewPrecDecFromStr("101"), + }, + { + desc: "valid decimal with E+10", + in: "10.12345678901E+10", + out: math_utils.MustNewPrecDecFromStr("101234567890.1"), + }, + { + desc: "valid decimal with E-0", + in: "0.1E-0", + out: math_utils.MustNewPrecDecFromStr("0.1"), + }, + { + desc: "valid decimal with E-1", + in: "189.3E-1", + out: math_utils.MustNewPrecDecFromStr("18.93"), + }, + { + desc: "valid decimal with E-10", + in: "101234567890.1E-10", + out: math_utils.MustNewPrecDecFromStr("10.12345678901"), + }, + { + desc: "valid with lowercase 'e'", + in: "10.1e-2", + out: math_utils.MustNewPrecDecFromStr("0.101"), + }, + { + desc: "valid with no '+'", + in: "10.1E3", + out: math_utils.MustNewPrecDecFromStr("10100"), + }, + } { + t.Run(tc.desc, func(t *testing.T) { + val, err := utils.ParsePrecDecScientificNotation(tc.in) + if tc.err { + require.Error(t, err) + } else { + require.True(t, val.Equal(tc.out), "Got: %v; Expected: %v", val, tc.out) + } + }) + } +} diff --git a/x/dynamicfees/client/cli/query.go b/x/dynamicfees/client/cli/query.go new file mode 100644 index 000000000..26b8d120f --- /dev/null +++ b/x/dynamicfees/client/cli/query.go @@ -0,0 +1,27 @@ +package cli + +import ( + "fmt" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +// GetQueryCmd returns the cli query commands for this module +func GetQueryCmd(_ string) *cobra.Command { + // Group dynamicfees queries under a subcommand + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand(CmdQueryParams()) + + return cmd +} diff --git a/x/dynamicfees/client/cli/query_params.go b/x/dynamicfees/client/cli/query_params.go new file mode 100644 index 000000000..486ad500e --- /dev/null +++ b/x/dynamicfees/client/cli/query_params.go @@ -0,0 +1,35 @@ +package cli + +import ( + "context" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +func CmdQueryParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "shows the parameters of the module", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, _ []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/dynamicfees/genesis.go b/x/dynamicfees/genesis.go new file mode 100644 index 000000000..12b1842b3 --- /dev/null +++ b/x/dynamicfees/genesis.go @@ -0,0 +1,25 @@ +package dynamicfees + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +// InitGenesis initializes the module's state from a provided genesis state. +func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) { + // this line is used by starport scaffolding # genesis/module/init + err := k.SetParams(ctx, genState.Params) + if err != nil { + panic(err) + } +} + +// ExportGenesis returns the module's exported genesis +func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState { + genesis := types.DefaultGenesis() + genesis.Params = k.GetParams(ctx) + + return genesis +} diff --git a/x/dynamicfees/genesis_test.go b/x/dynamicfees/genesis_test.go new file mode 100644 index 000000000..ae96b291e --- /dev/null +++ b/x/dynamicfees/genesis_test.go @@ -0,0 +1,38 @@ +package dynamicfees_test + +import ( + "testing" + + "cosmossdk.io/math" + cosmostypes "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dynamicfees" + + "github.com/neutron-org/neutron/v4/app/config" + + "github.com/stretchr/testify/require" + + "github.com/neutron-org/neutron/v4/testutil/common/nullify" + "github.com/neutron-org/neutron/v4/testutil/dynamicfees/keeper" + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +func TestGenesis(t *testing.T) { + _ = config.GetDefaultConfig() + + params := types.DefaultParams() + params.NtrnPrices = append(params.NtrnPrices, cosmostypes.DecCoin{Denom: "uatom", Amount: math.LegacyMustNewDecFromStr("10")}) + + genesisState := types.GenesisState{ + Params: params, + } + + k, ctx := keeper.DynamicFeesKeeper(t) + dynamicfees.InitGenesis(ctx, *k, genesisState) + got := dynamicfees.ExportGenesis(ctx, *k) + require.NotNil(t, got) + require.Equal(t, genesisState, *got) + + nullify.Fill(&genesisState) + nullify.Fill(got) +} diff --git a/x/dynamicfees/keeper/grpc_query.go b/x/dynamicfees/keeper/grpc_query.go new file mode 100644 index 000000000..bad090d22 --- /dev/null +++ b/x/dynamicfees/keeper/grpc_query.go @@ -0,0 +1,7 @@ +package keeper + +import ( + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +var _ types.QueryServer = Keeper{} diff --git a/x/dynamicfees/keeper/grpc_query_params.go b/x/dynamicfees/keeper/grpc_query_params.go new file mode 100644 index 000000000..af83c649c --- /dev/null +++ b/x/dynamicfees/keeper/grpc_query_params.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil +} diff --git a/x/dynamicfees/keeper/grpc_query_params_test.go b/x/dynamicfees/keeper/grpc_query_params_test.go new file mode 100644 index 000000000..eea6385d6 --- /dev/null +++ b/x/dynamicfees/keeper/grpc_query_params_test.go @@ -0,0 +1,24 @@ +package keeper_test + +import ( + "testing" + + "cosmossdk.io/math" + cosmostypes "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + testkeeper "github.com/neutron-org/neutron/v4/testutil/dynamicfees/keeper" + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +func TestParamsQuery(t *testing.T) { + keeper, ctx := testkeeper.DynamicFeesKeeper(t) + params := types.DefaultParams() + params.NtrnPrices = append(params.NtrnPrices, cosmostypes.DecCoin{Denom: "uatom", Amount: math.LegacyMustNewDecFromStr("10")}) + err := keeper.SetParams(ctx, params) + require.NoError(t, err) + + response, err := keeper.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, &types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/dynamicfees/keeper/keeper.go b/x/dynamicfees/keeper/keeper.go new file mode 100644 index 000000000..2488e1bd3 --- /dev/null +++ b/x/dynamicfees/keeper/keeper.go @@ -0,0 +1,41 @@ +package keeper + +import ( + "fmt" + + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +type ( + Keeper struct { + cdc codec.BinaryCodec + storeKey storetypes.StoreKey + authority string + } +) + +func NewKeeper( + cdc codec.BinaryCodec, + storeKey storetypes.StoreKey, + authority string, +) *Keeper { + return &Keeper{ + cdc: cdc, + storeKey: storeKey, + authority: authority, + } +} + +func (k Keeper) GetAuthority() string { + return k.authority +} + +func (k *Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} diff --git a/x/dynamicfees/keeper/msg_server.go b/x/dynamicfees/keeper/msg_server.go new file mode 100644 index 000000000..c126c1e3b --- /dev/null +++ b/x/dynamicfees/keeper/msg_server.go @@ -0,0 +1,41 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +type msgServer struct { + Keeper +} + +// NewMsgServerImpl returns an implementation of the MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: keeper} +} + +var _ types.MsgServer = msgServer{} + +// UpdateParams updates the module parameters +func (k Keeper) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if err := req.Validate(); err != nil { + return nil, err + } + authority := k.GetAuthority() + if authority != req.Authority { + return nil, errors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid authority; expected %s, got %s", authority, req.Authority) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + if err := k.SetParams(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/dynamicfees/keeper/msg_server_test.go b/x/dynamicfees/keeper/msg_server_test.go new file mode 100644 index 000000000..b0cfa06da --- /dev/null +++ b/x/dynamicfees/keeper/msg_server_test.go @@ -0,0 +1,47 @@ +package keeper_test + +import ( + "testing" + + "cosmossdk.io/math" + adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types" + cosmostypes "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/stretchr/testify/suite" + + "github.com/neutron-org/neutron/v4/testutil" + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +type KeeperTestSuite struct { + testutil.IBCConnectionTestSuite +} + +func (suite KeeperTestSuite) TestMsgUpdateParams() { //nolint:govet // it's a test so it's okay to copy locks + msgSrv := suite.GetNeutronZoneApp(suite.ChainA).DynamicFeesKeeper + + // update params from non-authority + ctx := suite.ChainA.GetContext() + resp, err := msgSrv.UpdateParams(ctx, &types.MsgUpdateParams{ + Authority: "cosmos10h9stc5v6ntgeygf5xf945njqq5h32r53uquvw", + Params: types.DefaultParams(), + }) + suite.Nil(resp) + suite.ErrorContains(err, "invalid authority") + + newParams := types.DefaultParams() + newParams.NtrnPrices = append(newParams.NtrnPrices, cosmostypes.DecCoin{Denom: "uatom", Amount: math.LegacyMustNewDecFromStr("0.1")}) + + // everything is ok + _, err = msgSrv.UpdateParams(ctx, &types.MsgUpdateParams{ + Authority: authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(), + Params: newParams, + }) + suite.NoError(err) + params := msgSrv.GetParams(ctx) + suite.Equal(newParams, params) +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} diff --git a/x/dynamicfees/keeper/params.go b/x/dynamicfees/keeper/params.go new file mode 100644 index 000000000..0125c3d1a --- /dev/null +++ b/x/dynamicfees/keeper/params.go @@ -0,0 +1,31 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +// GetParams get all parameters as types.Params +func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.ParamsKey) + if bz == nil { + return params + } + + k.cdc.MustUnmarshal(bz, ¶ms) + return params +} + +// SetParams set the params +func (k Keeper) SetParams(ctx sdk.Context, params types.Params) error { + store := ctx.KVStore(k.storeKey) + bz, err := k.cdc.Marshal(¶ms) + if err != nil { + return err + } + + store.Set(types.ParamsKey, bz) + return nil +} diff --git a/x/dynamicfees/keeper/resolver.go b/x/dynamicfees/keeper/resolver.go new file mode 100644 index 000000000..44ecb326a --- /dev/null +++ b/x/dynamicfees/keeper/resolver.go @@ -0,0 +1,36 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + feemarkettypes "github.com/skip-mev/feemarket/x/feemarket/types" + + appparams "github.com/neutron-org/neutron/v4/app/params" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +var _ feemarkettypes.DenomResolver = Keeper{} + +// ConvertToDenom converts NTRN deccoin into the equivalent amount of the token denominated in denom. +func (k Keeper) ConvertToDenom(ctx sdk.Context, fromCoin sdk.DecCoin, toDenom string) (sdk.DecCoin, error) { + params := k.GetParams(ctx) + for _, c := range params.NtrnPrices { + if c.Denom == toDenom && fromCoin.Denom == appparams.DefaultDenom { + // converts NTRN into the denom + return sdk.NewDecCoinFromDec(toDenom, fromCoin.Amount.Quo(c.Amount)), nil + } else if toDenom == appparams.DefaultDenom && fromCoin.Denom == c.Denom { + // converts the denom into NTRN + return sdk.NewDecCoinFromDec(appparams.DefaultDenom, fromCoin.Amount.Mul(c.Amount)), nil + } + } + return sdk.DecCoin{}, types.ErrUnknownDenom +} + +func (k Keeper) ExtraDenoms(ctx sdk.Context) ([]string, error) { + params := k.GetParams(ctx) + denoms := make([]string, 0, params.NtrnPrices.Len()) + for _, coin := range params.NtrnPrices { + denoms = append(denoms, coin.Denom) + } + return denoms, nil +} diff --git a/x/dynamicfees/keeper/resolver_test.go b/x/dynamicfees/keeper/resolver_test.go new file mode 100644 index 000000000..274186dc2 --- /dev/null +++ b/x/dynamicfees/keeper/resolver_test.go @@ -0,0 +1,211 @@ +package keeper_test + +import ( + "testing" + + "cosmossdk.io/math" + cosmostypes "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + appparams "github.com/neutron-org/neutron/v4/app/params" + "github.com/neutron-org/neutron/v4/testutil/common/nullify" + testkeeper "github.com/neutron-org/neutron/v4/testutil/dynamicfees/keeper" + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +func TestConvertToDenom(t *testing.T) { + k, ctx := testkeeper.DynamicFeesKeeper(t) + params := types.DefaultParams() + + const atomDenom = "uatom" + const osmoDenom = "uosmo" + // adding additional denoms + // Let's say: + // 1 ATOM = 10 NTRN + // 1 OSMO = 2 NTRN + // 1 NTRN = 1 NTRN + params.NtrnPrices = append(params.NtrnPrices, []cosmostypes.DecCoin{ + {Denom: atomDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + {Denom: osmoDenom, Amount: math.LegacyMustNewDecFromStr("2")}, + {Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("1")}, + }...) + require.NoError(t, k.SetParams(ctx, params)) + + for _, tc := range []struct { + desc string + baseCoins cosmostypes.DecCoin + targetDenom string + expectedCoins cosmostypes.DecCoin + err error + }{ + { + // if i try to convert 10 NTRN to NTRN i must pay 10 NTRN + desc: "check NTRN", + baseCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + targetDenom: appparams.DefaultDenom, + expectedCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + err: nil, + }, + { + // if i try to convert to non-existing denom, i must get an ErrUnknownDenom error + desc: "non-existing denom", + baseCoins: cosmostypes.DecCoin{Denom: "untrn", Amount: math.LegacyMustNewDecFromStr("10")}, + targetDenom: "unknown_denom", + expectedCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + err: types.ErrUnknownDenom, + }, + { + // if i convert 10 NTRN to ATOM, i must get 1 ATOM + desc: "10 NTRN to ATOM", + baseCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + targetDenom: atomDenom, + expectedCoins: cosmostypes.DecCoin{Denom: atomDenom, Amount: math.LegacyMustNewDecFromStr("1")}, + err: nil, + }, + { + // if i convert 0.5 NTRN to ATOM, i must get 0.05 ATOM + desc: "0.5 NTRN to ATOM", + baseCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("0.5")}, + targetDenom: atomDenom, + expectedCoins: cosmostypes.DecCoin{Denom: atomDenom, Amount: math.LegacyMustNewDecFromStr("0.05")}, + err: nil, + }, + { + // if i convert 0.5 NTRN to OSMO, i must get 0.25 OSMO + desc: "0.5 NTRN to OSMO", + baseCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("0.5")}, + targetDenom: osmoDenom, + expectedCoins: cosmostypes.DecCoin{Denom: osmoDenom, Amount: math.LegacyMustNewDecFromStr("0.25")}, + err: nil, + }, + { + // if i convert 2 NTRN to OSMO, i must get 1 OSMO + desc: "2 NTRN to OSMO", + baseCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("2")}, + targetDenom: osmoDenom, + expectedCoins: cosmostypes.DecCoin{Denom: osmoDenom, Amount: math.LegacyMustNewDecFromStr("1")}, + err: nil, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + convertedCoin, err := k.ConvertToDenom(ctx, tc.baseCoins, tc.targetDenom) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.expectedCoins), + nullify.Fill(convertedCoin), + ) + } + }) + } +} + +func TestConvertFromDenom(t *testing.T) { + k, ctx := testkeeper.DynamicFeesKeeper(t) + params := types.DefaultParams() + + const atomDenom = "uatom" + const osmoDenom = "uosmo" + // adding additional denoms + // Let's say: + // 1 ATOM = 10 NTRN + // 1 OSMO = 2 NTRN + // 1 NTRN = 1 NTRN + params.NtrnPrices = append(params.NtrnPrices, []cosmostypes.DecCoin{ + {Denom: atomDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + {Denom: osmoDenom, Amount: math.LegacyMustNewDecFromStr("2")}, + {Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("1")}, + }...) + require.NoError(t, k.SetParams(ctx, params)) + + for _, tc := range []struct { + desc string + baseCoins cosmostypes.DecCoin + expectedCoins cosmostypes.DecCoin + err error + }{ + { + // if i try to convert 10 NTRN to NTRN i must pay 10 NTRN + desc: "check NTRN", + baseCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + expectedCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + err: nil, + }, + { + // if i try to convert from non-existing denom, i must get an ErrUnknownDenom error + desc: "non-existing denom", + baseCoins: cosmostypes.DecCoin{Denom: "unknown_denom", Amount: math.LegacyMustNewDecFromStr("10")}, + expectedCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + err: types.ErrUnknownDenom, + }, + { + // if i convert ATOM to NTRN, i must get 10 NTRN + desc: "ATOM to 10 NTRN", + baseCoins: cosmostypes.DecCoin{Denom: atomDenom, Amount: math.LegacyMustNewDecFromStr("1")}, + expectedCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("10")}, + err: nil, + }, + { + // if i convert 0.05 ATOM to NTRN, i must get 0.5 NTRN + desc: "0.05 ATOM to NTRN", + baseCoins: cosmostypes.DecCoin{Denom: atomDenom, Amount: math.LegacyMustNewDecFromStr("0.05")}, + expectedCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("0.5")}, + err: nil, + }, + { + // if i convert 0.25 OSMO to NTRN, i must get 0.5 NTRN + desc: "0.25 OSMO to NTRN", + baseCoins: cosmostypes.DecCoin{Denom: osmoDenom, Amount: math.LegacyMustNewDecFromStr("0.25")}, + expectedCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("0.5")}, + err: nil, + }, + { + // if i convert OSMO to NTRN, i must get 2 NTRN + desc: "OSMO to NTRN", + baseCoins: cosmostypes.DecCoin{Denom: osmoDenom, Amount: math.LegacyMustNewDecFromStr("1")}, + expectedCoins: cosmostypes.DecCoin{Denom: appparams.DefaultDenom, Amount: math.LegacyMustNewDecFromStr("2")}, + err: nil, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + convertedCoin, err := k.ConvertToDenom(ctx, tc.baseCoins, appparams.DefaultDenom) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + require.Equal(t, + nullify.Fill(tc.expectedCoins), + nullify.Fill(convertedCoin), + ) + } + }) + } +} + +func TestExtraDenoms(t *testing.T) { + k, ctx := testkeeper.DynamicFeesKeeper(t) + params := types.DefaultParams() + expectedDenoms := make([]string, 0, len(params.NtrnPrices)) + for _, coin := range params.NtrnPrices { + expectedDenoms = append(expectedDenoms, coin.Denom) + } + + // default denoms + denoms, err := k.ExtraDenoms(ctx) + require.NoError(t, err) + require.EqualValues(t, expectedDenoms, denoms) + + // additional denoms + params.NtrnPrices = append(params.NtrnPrices, cosmostypes.DecCoin{Denom: "uatom", Amount: math.LegacyMustNewDecFromStr("10")}) + require.NoError(t, k.SetParams(ctx, params)) + expectedDenoms = make([]string, 0, len(params.NtrnPrices)) + for _, coin := range params.NtrnPrices { + expectedDenoms = append(expectedDenoms, coin.Denom) + } + + denoms, err = k.ExtraDenoms(ctx) + require.NoError(t, err) + require.EqualValues(t, expectedDenoms, denoms) +} diff --git a/x/dynamicfees/module.go b/x/dynamicfees/module.go new file mode 100644 index 000000000..3af50b80e --- /dev/null +++ b/x/dynamicfees/module.go @@ -0,0 +1,150 @@ +package dynamicfees + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/appmodule" + + "github.com/gorilla/mux" + + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + abci "github.com/cometbft/cometbft/abci/types" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/neutron-org/neutron/v4/x/dynamicfees/client/cli" + "github.com/neutron-org/neutron/v4/x/dynamicfees/keeper" + "github.com/neutron-org/neutron/v4/x/dynamicfees/types" +) + +var ( + _ appmodule.AppModule = AppModule{} + _ module.AppModuleBasic = AppModuleBasic{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface that defines the independent methods a Cosmos SDK module needs to implement. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func (a AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) { +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the name of the module as a string +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the amino codec for the module, which is used to marshal and unmarshal structs to/from []byte in order to persist them in the module's KVStore +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +// RegisterInterfaces registers a module's interface types and their concrete implementations as proto.Message +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns a default GenesisState for the module, marshalled to json.RawMessage. The default GenesisState need to be defined by the module developer and is primarily used for testing +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis used to validate the GenesisState, given in its json.RawMessage form +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint:errcheck +} + +// GetTxCmd returns the root Tx command for the module. The subcommands of this root command are used by end-users to generate new transactions containing messages defined in the module +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return nil +} + +// GetQueryCmd returns the root query command for the module. The subcommands of this root command are used by end-users to generate new queries to the subset of the state defined by the module +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd(types.StoreKey) +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- +var _ appmodule.AppModule = AppModule{} + +// AppModule implements the AppModule interface that defines the inter-dependent methods that modules need to implement +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + } +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() { // marker +} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() { // marker +} + +// RegisterServices registers a gRPC query service to respond to the module-specific gRPC queries +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) +} + +// RegisterInvariants registers the invariants of the module. If an invariant deviates from its predicted value, the InvariantRegistry triggers appropriate logic (most often the chain will be halted) +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the module's genesis initialization. It returns no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { + var genState types.GenesisState + // Initialize global index to index in genesis state + cdc.MustUnmarshalJSON(gs, &genState) + + InitGenesis(ctx, am.keeper, genState) + + return []abci.ValidatorUpdate{} +} + +// ExportGenesis returns the module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := ExportGenesis(ctx, am.keeper) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion is a sequence number for state-breaking change of the module. It should be incremented on each consensus-breaking change introduced by the module. To avoid wrong/empty versions, the initial version should be set to 1 +func (AppModule) ConsensusVersion() uint64 { return types.ConsensusVersion } diff --git a/x/dynamicfees/module_simulation.go b/x/dynamicfees/module_simulation.go new file mode 100644 index 000000000..46f121bca --- /dev/null +++ b/x/dynamicfees/module_simulation.go @@ -0,0 +1,49 @@ +package dynamicfees + +import ( + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/testutil/sims" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/neutron-org/neutron/v4/testutil/common/sample" + feeburnersimulation "github.com/neutron-org/neutron/v4/x/feeburner/simulation" + "github.com/neutron-org/neutron/v4/x/feeburner/types" +) + +// avoid unused import issue +var ( + _ = sample.AccAddress + _ = feeburnersimulation.FindAccount + _ = sims.StakePerAccount + _ = simulation.MsgEntryKind + _ = baseapp.Paramspace +) + +// GenerateGenesisState creates a randomized GenState of the module +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + accs := make([]string, len(simState.Accounts)) + for i, acc := range simState.Accounts { + accs[i] = acc.Address.String() + } + feeburnerGenesis := types.GenesisState{ + Params: types.DefaultParams(), + } + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(&feeburnerGenesis) +} + +// ProposalContents doesn't return any content functions for governance proposals +func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalMsg { + return nil +} + +// RegisterStoreDecoder registers a decoder +func (am AppModule) RegisterStoreDecoder(_ simtypes.StoreDecoderRegistry) {} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (am AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { + operations := make([]simtypes.WeightedOperation, 0) + + return operations +} diff --git a/x/dynamicfees/simulation/helpers.go b/x/dynamicfees/simulation/helpers.go new file mode 100644 index 000000000..92c437c0d --- /dev/null +++ b/x/dynamicfees/simulation/helpers.go @@ -0,0 +1,15 @@ +package simulation + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" +) + +// FindAccount find a specific address from an account list +func FindAccount(accs []simtypes.Account, address string) (simtypes.Account, bool) { + creator, err := sdk.AccAddressFromBech32(address) + if err != nil { + panic(err) + } + return simtypes.FindAccount(accs, creator) +} diff --git a/x/dynamicfees/types/codec.go b/x/dynamicfees/types/codec.go new file mode 100644 index 000000000..d4e47872a --- /dev/null +++ b/x/dynamicfees/types/codec.go @@ -0,0 +1,20 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +func RegisterCodec(cdc *codec.LegacyAmino) { + cdc.RegisterConcrete(&MsgUpdateParams{}, "neutron.dynamicfees.MsgUpdateParams", nil) +} + +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + registry.RegisterImplementations( + (*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/x/dynamicfees/types/constants.go b/x/dynamicfees/types/constants.go new file mode 100644 index 000000000..6bad94d03 --- /dev/null +++ b/x/dynamicfees/types/constants.go @@ -0,0 +1,3 @@ +package types + +const ConsensusVersion = 1 diff --git a/x/dynamicfees/types/errors.go b/x/dynamicfees/types/errors.go new file mode 100644 index 000000000..d323d0299 --- /dev/null +++ b/x/dynamicfees/types/errors.go @@ -0,0 +1,12 @@ +package types + +// DONTCOVER + +import ( + "cosmossdk.io/errors" +) + +// x/dynamicfees module sentinel errors +var ( + ErrUnknownDenom = errors.Register(ModuleName, 1100, "unknown denom") +) diff --git a/x/dynamicfees/types/genesis.go b/x/dynamicfees/types/genesis.go new file mode 100644 index 000000000..9d633ecd7 --- /dev/null +++ b/x/dynamicfees/types/genesis.go @@ -0,0 +1,14 @@ +package types + +// DefaultGenesis returns the default genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + return gs.Params.Validate() +} diff --git a/x/dynamicfees/types/genesis.pb.go b/x/dynamicfees/types/genesis.pb.go new file mode 100644 index 000000000..ff1c4b185 --- /dev/null +++ b/x/dynamicfees/types/genesis.pb.go @@ -0,0 +1,323 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: neutron/dynamicfees/v1/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the dynamicfees module's genesis state. +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_311447c521bf6ae9, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "neutron.dynamicfees.v1.GenesisState") +} + +func init() { + proto.RegisterFile("neutron/dynamicfees/v1/genesis.proto", fileDescriptor_311447c521bf6ae9) +} + +var fileDescriptor_311447c521bf6ae9 = []byte{ + // 205 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xc9, 0x4b, 0x2d, 0x2d, + 0x29, 0xca, 0xcf, 0xd3, 0x4f, 0xa9, 0xcc, 0x4b, 0xcc, 0xcd, 0x4c, 0x4e, 0x4b, 0x4d, 0x2d, 0xd6, + 0x2f, 0x33, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, + 0x17, 0x12, 0x83, 0xaa, 0xd2, 0x43, 0x52, 0xa5, 0x57, 0x66, 0x28, 0x25, 0x92, 0x9e, 0x9f, 0x9e, + 0x0f, 0x56, 0xa2, 0x0f, 0x62, 0x41, 0x54, 0x4b, 0x29, 0xe3, 0x30, 0xb3, 0x20, 0xb1, 0x28, 0x31, + 0x17, 0x6a, 0xa4, 0x92, 0x0f, 0x17, 0x8f, 0x3b, 0xc4, 0x8e, 0xe0, 0x92, 0xc4, 0x92, 0x54, 0x21, + 0x1b, 0x2e, 0x36, 0x88, 0xbc, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xb7, 0x91, 0x9c, 0x1e, 0x76, 0x3b, + 0xf5, 0x02, 0xc0, 0xaa, 0x9c, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82, 0xea, 0x71, 0xf2, 0x3f, + 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, + 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xd3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, + 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, 0x89, 0xba, 0xf9, 0x45, 0xe9, 0x30, 0xb6, 0x7e, 0x99, + 0x89, 0x7e, 0x05, 0x8a, 0x43, 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xae, 0x34, 0x06, + 0x04, 0x00, 0x00, 0xff, 0xff, 0x44, 0xe2, 0x53, 0x49, 0x20, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/dynamicfees/types/keys.go b/x/dynamicfees/types/keys.go new file mode 100644 index 000000000..2cd25cda4 --- /dev/null +++ b/x/dynamicfees/types/keys.go @@ -0,0 +1,15 @@ +package types + +const ( + // ModuleName defines the module name + ModuleName = "dynamicfees" + + // StoreKey defines the primary module store key + StoreKey = ModuleName +) + +const ( + prefixParamsKey = iota + 1 +) + +var ParamsKey = []byte{prefixParamsKey} diff --git a/x/dynamicfees/types/params.go b/x/dynamicfees/types/params.go new file mode 100644 index 000000000..479289593 --- /dev/null +++ b/x/dynamicfees/types/params.go @@ -0,0 +1,33 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "gopkg.in/yaml.v2" +) + +// NewParams creates a new Params instance +func NewParams(prices sdk.DecCoins) Params { + return Params{ + NtrnPrices: prices, + } +} + +// DefaultParams returns a default set of parameters +func DefaultParams() Params { + return NewParams(sdk.DecCoins{}) +} + +// Validate validates the set of params +func (p Params) Validate() error { + // if p.NtrnPrices.Len() ==0{ + // return + //} + + return nil +} + +// String implements the Stringer interface. +func (p Params) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} diff --git a/x/dynamicfees/types/params.pb.go b/x/dynamicfees/types/params.pb.go new file mode 100644 index 000000000..cd6c8940e --- /dev/null +++ b/x/dynamicfees/types/params.pb.go @@ -0,0 +1,341 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: neutron/dynamicfees/v1/params.proto + +package types + +import ( + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the module. +type Params struct { + // List of asset prices by the NTRN + // it's used in cooperation with feemarket module + // ntrn_prices is a data source to convert gas_price from feemarket's base_denom (untrn) + // into a given asset + NtrnPrices github_com_cosmos_cosmos_sdk_types.DecCoins `protobuf:"bytes,1,rep,name=ntrn_prices,json=ntrnPrices,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.DecCoins" json:"ntrn_prices"` +} + +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_f4ff446f82722ba2, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetNtrnPrices() github_com_cosmos_cosmos_sdk_types.DecCoins { + if m != nil { + return m.NtrnPrices + } + return nil +} + +func init() { + proto.RegisterType((*Params)(nil), "neutron.dynamicfees.v1.Params") +} + +func init() { + proto.RegisterFile("neutron/dynamicfees/v1/params.proto", fileDescriptor_f4ff446f82722ba2) +} + +var fileDescriptor_f4ff446f82722ba2 = []byte{ + // 267 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xce, 0x4b, 0x2d, 0x2d, + 0x29, 0xca, 0xcf, 0xd3, 0x4f, 0xa9, 0xcc, 0x4b, 0xcc, 0xcd, 0x4c, 0x4e, 0x4b, 0x4d, 0x2d, 0xd6, + 0x2f, 0x33, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x12, 0x83, 0x2a, 0xd2, 0x43, 0x52, 0xa4, 0x57, 0x66, 0x28, 0x25, 0x97, 0x9c, 0x5f, 0x9c, 0x9b, + 0x5f, 0xac, 0x9f, 0x94, 0x58, 0x9c, 0xaa, 0x5f, 0x66, 0x98, 0x94, 0x5a, 0x92, 0x68, 0xa8, 0x9f, + 0x9c, 0x9f, 0x99, 0x07, 0xd1, 0x27, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x66, 0xea, 0x83, 0x58, + 0x10, 0x51, 0xa5, 0x26, 0x46, 0x2e, 0xb6, 0x00, 0xb0, 0xf1, 0x42, 0x45, 0x5c, 0xdc, 0x79, 0x25, + 0x45, 0x79, 0xf1, 0x05, 0x45, 0x99, 0xc9, 0xa9, 0xc5, 0x12, 0x8c, 0x0a, 0xcc, 0x1a, 0xdc, 0x46, + 0x32, 0x7a, 0x10, 0x63, 0xf5, 0x40, 0xc6, 0xea, 0x41, 0x8d, 0xd5, 0x73, 0x49, 0x4d, 0x76, 0xce, + 0xcf, 0xcc, 0x73, 0x32, 0x3e, 0x71, 0x4f, 0x9e, 0x61, 0xd5, 0x7d, 0x79, 0xed, 0xf4, 0xcc, 0x92, + 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, 0x33, 0x20, 0x94, 0x6e, 0x71, 0x4a, 0xb6, + 0x7e, 0x49, 0x65, 0x41, 0x6a, 0x31, 0x4c, 0x4f, 0x71, 0x10, 0x17, 0xc8, 0x96, 0x00, 0xb0, 0x25, + 0x56, 0x2c, 0x33, 0x16, 0xc8, 0x33, 0x38, 0xf9, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, + 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, + 0x1c, 0x43, 0x94, 0x29, 0x92, 0xc1, 0x50, 0x7f, 0xeb, 0xe6, 0x17, 0xa5, 0xc3, 0xd8, 0xfa, 0x65, + 0x26, 0xfa, 0x15, 0x28, 0xa1, 0x05, 0xb6, 0x2b, 0x89, 0x0d, 0xec, 0x39, 0x63, 0x40, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x5d, 0x49, 0x6f, 0xb5, 0x51, 0x01, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NtrnPrices) > 0 { + for iNdEx := len(m.NtrnPrices) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.NtrnPrices[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintParams(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.NtrnPrices) > 0 { + for _, e := range m.NtrnPrices { + l = e.Size() + n += 1 + l + sovParams(uint64(l)) + } + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NtrnPrices", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NtrnPrices = append(m.NtrnPrices, types.DecCoin{}) + if err := m.NtrnPrices[len(m.NtrnPrices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/dynamicfees/types/query.pb.go b/x/dynamicfees/types/query.pb.go new file mode 100644 index 000000000..51fb31b92 --- /dev/null +++ b/x/dynamicfees/types/query.pb.go @@ -0,0 +1,537 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: neutron/dynamicfees/v1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + 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 + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_372e8efc521c6d67, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.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 *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_372e8efc521c6d67, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.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 *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "neutron.dynamicfees.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "neutron.dynamicfees.v1.QueryParamsResponse") +} + +func init() { + proto.RegisterFile("neutron/dynamicfees/v1/query.proto", fileDescriptor_372e8efc521c6d67) +} + +var fileDescriptor_372e8efc521c6d67 = []byte{ + // 284 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xca, 0x4b, 0x2d, 0x2d, + 0x29, 0xca, 0xcf, 0xd3, 0x4f, 0xa9, 0xcc, 0x4b, 0xcc, 0xcd, 0x4c, 0x4e, 0x4b, 0x4d, 0x2d, 0xd6, + 0x2f, 0x33, 0xd4, 0x2f, 0x2c, 0x4d, 0x2d, 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, + 0x83, 0xaa, 0xd1, 0x43, 0x52, 0xa3, 0x57, 0x66, 0x28, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, + 0xa2, 0x0f, 0x62, 0x41, 0x54, 0x4b, 0xc9, 0xa4, 0xe7, 0xe7, 0xa7, 0xe7, 0xa4, 0xea, 0x27, 0x16, + 0x64, 0xea, 0x27, 0xe6, 0xe5, 0xe5, 0x97, 0x24, 0x96, 0x64, 0xe6, 0xe7, 0x15, 0x43, 0x65, 0x95, + 0x71, 0xd8, 0x57, 0x90, 0x58, 0x94, 0x98, 0x0b, 0x55, 0xa4, 0x24, 0xc2, 0x25, 0x14, 0x08, 0xb2, + 0x3f, 0x00, 0x2c, 0x18, 0x94, 0x5a, 0x58, 0x9a, 0x5a, 0x5c, 0xa2, 0x14, 0xcc, 0x25, 0x8c, 0x22, + 0x5a, 0x5c, 0x90, 0x9f, 0x57, 0x9c, 0x2a, 0x64, 0xc3, 0xc5, 0x06, 0xd1, 0x2c, 0xc1, 0xa8, 0xc0, + 0xa8, 0xc1, 0x6d, 0x24, 0xa7, 0x87, 0xdd, 0xb9, 0x7a, 0x10, 0x7d, 0x4e, 0x2c, 0x27, 0xee, 0xc9, + 0x33, 0x04, 0x41, 0xf5, 0x18, 0x4d, 0x66, 0xe4, 0x62, 0x05, 0x9b, 0x2a, 0xd4, 0xc9, 0xc8, 0xc5, + 0x06, 0x51, 0x22, 0xa4, 0x85, 0xcb, 0x08, 0x4c, 0x57, 0x49, 0x69, 0x13, 0xa5, 0x16, 0xe2, 0x56, + 0x25, 0xb5, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0x29, 0x08, 0xc9, 0xe9, 0xe3, 0x0d, 0x06, 0x27, 0xff, + 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, + 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, + 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0x85, 0x99, 0xa1, 0x9b, 0x5f, 0x94, 0x0e, 0x37, 0xaf, 0xcc, 0x44, + 0xbf, 0x02, 0xc5, 0xd0, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0x70, 0xc0, 0x1a, 0x03, 0x02, + 0x00, 0x00, 0xff, 0xff, 0xec, 0xfe, 0xa2, 0xfa, 0xef, 0x01, 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 { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/neutron.dynamicfees.v1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dynamicfees.v1.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "neutron.dynamicfees.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "neutron/dynamicfees/v1/query.proto", +} + +func (m *QueryParamsRequest) 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 *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) 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 *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) 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: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: 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 *QueryParamsResponse) 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: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/dynamicfees/types/query.pb.gw.go b/x/dynamicfees/types/query.pb.gw.go new file mode 100644 index 000000000..6335eaf2e --- /dev/null +++ b/x/dynamicfees/types/query.pb.gw.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: neutron/dynamicfees/v1/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"neutron", "dynamicfees", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage +) diff --git a/x/dynamicfees/types/tx.go b/x/dynamicfees/types/tx.go new file mode 100644 index 000000000..b7db99806 --- /dev/null +++ b/x/dynamicfees/types/tx.go @@ -0,0 +1,5 @@ +package types + +func (q *MsgUpdateParams) Validate() error { + return nil +} diff --git a/x/dynamicfees/types/tx.pb.go b/x/dynamicfees/types/tx.pb.go new file mode 100644 index 000000000..a2dc42872 --- /dev/null +++ b/x/dynamicfees/types/tx.pb.go @@ -0,0 +1,595 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: neutron/dynamicfees/v1/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 + +// MsgUpdateParams is the MsgUpdateParams request type. +type MsgUpdateParams struct { + // Authority is the address of the governance account. + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // params defines the x/dynamicfees parameters to update. + // + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_a6a5f55503750f7f, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.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 *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a6a5f55503750f7f, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.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 *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgUpdateParams)(nil), "neutron.dynamicfees.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "neutron.dynamicfees.v1.MsgUpdateParamsResponse") +} + +func init() { proto.RegisterFile("neutron/dynamicfees/v1/tx.proto", fileDescriptor_a6a5f55503750f7f) } + +var fileDescriptor_a6a5f55503750f7f = []byte{ + // 354 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcf, 0x4b, 0x2d, 0x2d, + 0x29, 0xca, 0xcf, 0xd3, 0x4f, 0xa9, 0xcc, 0x4b, 0xcc, 0xcd, 0x4c, 0x4e, 0x4b, 0x4d, 0x2d, 0xd6, + 0x2f, 0x33, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x83, 0x2a, 0xd0, + 0x43, 0x52, 0xa0, 0x57, 0x66, 0x28, 0x25, 0x98, 0x98, 0x9b, 0x99, 0x97, 0xaf, 0x0f, 0x26, 0x21, + 0x4a, 0xa5, 0xc4, 0x93, 0xf3, 0x8b, 0x73, 0xf3, 0x8b, 0xf5, 0x73, 0x8b, 0xd3, 0x41, 0x46, 0xe4, + 0x16, 0xa7, 0x43, 0x25, 0x24, 0x21, 0x12, 0xf1, 0x60, 0x9e, 0x3e, 0x84, 0x03, 0x95, 0x12, 0x49, + 0xcf, 0x4f, 0xcf, 0x87, 0x88, 0x83, 0x58, 0x50, 0x51, 0x65, 0x1c, 0xae, 0x2a, 0x48, 0x2c, 0x4a, + 0xcc, 0x85, 0x6a, 0x55, 0xda, 0xc3, 0xc8, 0xc5, 0xef, 0x5b, 0x9c, 0x1e, 0x5a, 0x90, 0x92, 0x58, + 0x92, 0x1a, 0x00, 0x96, 0x11, 0x32, 0xe3, 0xe2, 0x4c, 0x2c, 0x2d, 0xc9, 0xc8, 0x2f, 0xca, 0x2c, + 0xa9, 0x94, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x74, 0x92, 0xb8, 0xb4, 0x45, 0x57, 0x04, 0x6a, 0xa7, + 0x63, 0x4a, 0x4a, 0x51, 0x6a, 0x71, 0x71, 0x70, 0x49, 0x51, 0x66, 0x5e, 0x7a, 0x10, 0x42, 0xa9, + 0x90, 0x23, 0x17, 0x1b, 0xc4, 0x6c, 0x09, 0x26, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x39, 0x3d, 0xec, + 0xde, 0xd6, 0x83, 0xd8, 0xe3, 0xc4, 0x79, 0xe2, 0x9e, 0x3c, 0xc3, 0x8a, 0xe7, 0x1b, 0xb4, 0x18, + 0x83, 0xa0, 0x1a, 0xad, 0xf4, 0x9a, 0x9e, 0x6f, 0xd0, 0x42, 0x18, 0xd9, 0xf5, 0x7c, 0x83, 0x96, + 0x34, 0xb2, 0xf3, 0xd1, 0x9c, 0xaa, 0x24, 0xc9, 0x25, 0x8e, 0x26, 0x14, 0x94, 0x5a, 0x5c, 0x90, + 0x9f, 0x57, 0x9c, 0x6a, 0x54, 0xc6, 0xc5, 0xec, 0x5b, 0x9c, 0x2e, 0x94, 0xc1, 0xc5, 0x83, 0xe2, + 0x39, 0x75, 0x5c, 0x8e, 0x42, 0x33, 0x47, 0x4a, 0x9f, 0x48, 0x85, 0x30, 0x0b, 0xa5, 0x58, 0x1b, + 0x40, 0x5e, 0x71, 0xf2, 0x3f, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, + 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xd3, + 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0xa8, 0xd9, 0xba, 0xf9, 0x45, + 0xe9, 0x30, 0xb6, 0x7e, 0x99, 0x89, 0x7e, 0x05, 0x4a, 0x64, 0x95, 0x54, 0x16, 0xa4, 0x16, 0x27, + 0xb1, 0x81, 0x63, 0xca, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x32, 0x9c, 0x49, 0x80, 0x66, 0x02, + 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// 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 { + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/neutron.dynamicfees.v1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.dynamicfees.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "neutron.dynamicfees.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "neutron/dynamicfees/v1/tx.proto", +} + +func (m *MsgUpdateParams) 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 *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = 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 *MsgUpdateParamsResponse) 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 *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) 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 *MsgUpdateParams) 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.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) 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 *MsgUpdateParams) 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: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: 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 Params", 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.Params.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 *MsgUpdateParamsResponse) 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: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: 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/x/feeburner/types/genesis.pb.go b/x/feeburner/types/genesis.pb.go index b378b9102..817cad2ff 100644 --- a/x/feeburner/types/genesis.pb.go +++ b/x/feeburner/types/genesis.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feeburner/types/params.pb.go b/x/feeburner/types/params.pb.go index 76c19721e..2f539541e 100644 --- a/x/feeburner/types/params.pb.go +++ b/x/feeburner/types/params.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feeburner/types/query.pb.go b/x/feeburner/types/query.pb.go index 8a3622a36..ea85ae590 100644 --- a/x/feeburner/types/query.pb.go +++ b/x/feeburner/types/query.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" @@ -18,6 +14,9 @@ import ( 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. diff --git a/x/feeburner/types/total_burned_neutrons_amount.pb.go b/x/feeburner/types/total_burned_neutrons_amount.pb.go index 438b721a3..8e9acf9f1 100644 --- a/x/feeburner/types/total_burned_neutrons_amount.pb.go +++ b/x/feeburner/types/total_burned_neutrons_amount.pb.go @@ -5,13 +5,12 @@ package types import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feeburner/types/tx.pb.go b/x/feeburner/types/tx.pb.go index d0c1092f9..d25168e3c 100644 --- a/x/feeburner/types/tx.pb.go +++ b/x/feeburner/types/tx.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" @@ -19,6 +15,9 @@ import ( 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. diff --git a/x/feerefunder/types/fee.pb.go b/x/feerefunder/types/fee.pb.go index e69c14109..540bc0581 100644 --- a/x/feerefunder/types/fee.pb.go +++ b/x/feerefunder/types/fee.pb.go @@ -5,14 +5,13 @@ package types import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feerefunder/types/genesis.pb.go b/x/feerefunder/types/genesis.pb.go index 800255d34..682002bcf 100644 --- a/x/feerefunder/types/genesis.pb.go +++ b/x/feerefunder/types/genesis.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feerefunder/types/params.pb.go b/x/feerefunder/types/params.pb.go index 62f1e84fa..1bdb0da76 100644 --- a/x/feerefunder/types/params.pb.go +++ b/x/feerefunder/types/params.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/feerefunder/types/query.pb.go b/x/feerefunder/types/query.pb.go index fe73033ba..7bd8573fa 100644 --- a/x/feerefunder/types/query.pb.go +++ b/x/feerefunder/types/query.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" @@ -18,6 +14,9 @@ import ( 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. diff --git a/x/feerefunder/types/tx.pb.go b/x/feerefunder/types/tx.pb.go index 8aaab733d..3688fce95 100644 --- a/x/feerefunder/types/tx.pb.go +++ b/x/feerefunder/types/tx.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" @@ -19,6 +15,9 @@ import ( 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. diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go index 517d17504..de325da9b 100644 --- a/x/globalfee/ante/antetest/fee_test.go +++ b/x/globalfee/ante/antetest/fee_test.go @@ -5,7 +5,7 @@ import ( "cosmossdk.io/math" storetypes "cosmossdk.io/store/types" - "github.com/cosmos/admin-module/x/adminmodule/types" + "github.com/cosmos/admin-module/v2/x/adminmodule/types" "github.com/stretchr/testify/suite" diff --git a/x/globalfee/keeper/keeper.go b/x/globalfee/keeper/keeper.go index e6b458662..9e5baca35 100644 --- a/x/globalfee/keeper/keeper.go +++ b/x/globalfee/keeper/keeper.go @@ -37,7 +37,7 @@ func (k Keeper) GetAuthority() string { // SetParams sets the x/globalfee module parameters. func (k Keeper) SetParams(ctx sdk.Context, p types.Params) error { - if err := p.Validate(); err != nil { + if err := p.ValidateBasic(); err != nil { return err } diff --git a/x/globalfee/keeper/msg_server.go b/x/globalfee/keeper/msg_server.go index a59621071..caea17934 100644 --- a/x/globalfee/keeper/msg_server.go +++ b/x/globalfee/keeper/msg_server.go @@ -3,7 +3,8 @@ package keeper import ( "context" - "cosmossdk.io/errors" + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" @@ -24,12 +25,8 @@ func NewMsgServerImpl(k Keeper) types.MsgServer { } func (ms msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { - if err := req.Validate(); err != nil { - return nil, errors.Wrap(err, "failed to validate MsgUpdateParams") - } - if ms.authority != req.Authority { - return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, req.Authority) + return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, req.Authority) } ctx := sdk.UnwrapSDKContext(goCtx) diff --git a/x/globalfee/keeper/msg_server_test.go b/x/globalfee/keeper/msg_server_test.go deleted file mode 100644 index 0f9a7c6d2..000000000 --- a/x/globalfee/keeper/msg_server_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - testkeeper "github.com/neutron-org/neutron/v4/testutil/globalfee/keeper" - "github.com/neutron-org/neutron/v4/x/globalfee/keeper" - "github.com/neutron-org/neutron/v4/x/globalfee/types" -) - -func TestMsgUpdateParamsValidate(t *testing.T) { - k, ctx := testkeeper.GlobalFeeKeeper(t) - msgServer := keeper.NewMsgServerImpl(*k) - - tests := []struct { - name string - msg types.MsgUpdateParams - expectedErr string - }{ - { - "empty authority", - types.MsgUpdateParams{ - Authority: "", - }, - "authority is invalid", - }, - { - "invalid authority", - types.MsgUpdateParams{ - Authority: "invalid authority", - }, - "authority is invalid", - }, - } - - for _, tt := range tests { - tt := tt - t.Run(tt.name, func(t *testing.T) { - resp, err := msgServer.UpdateParams(ctx, &tt.msg) - require.ErrorContains(t, err, tt.expectedErr) - require.Nil(t, resp) - }) - } -} diff --git a/x/globalfee/module.go b/x/globalfee/module.go index 29ed3c21b..2b85ce35f 100644 --- a/x/globalfee/module.go +++ b/x/globalfee/module.go @@ -53,7 +53,7 @@ func (a AppModuleBasic) ValidateGenesis(marshaler codec.JSONCodec, _ client.TxEn if err != nil { return err } - if err := data.Params.Validate(); err != nil { + if err := data.Params.ValidateBasic(); err != nil { return errorsmod.Wrap(err, "params") } return nil diff --git a/x/globalfee/types/genesis.go b/x/globalfee/types/genesis.go index 8ca6907e5..b0e94687f 100644 --- a/x/globalfee/types/genesis.go +++ b/x/globalfee/types/genesis.go @@ -33,7 +33,7 @@ func GetGenesisStateFromAppState(cdc codec.Codec, appState map[string]json.RawMe } func ValidateGenesis(data GenesisState) error { - if err := data.Params.Validate(); err != nil { + if err := data.Params.ValidateBasic(); err != nil { return errorsmod.Wrap(err, "globalfee params") } diff --git a/x/globalfee/types/genesis.pb.go b/x/globalfee/types/genesis.pb.go index 49f7929e2..349c454df 100644 --- a/x/globalfee/types/genesis.pb.go +++ b/x/globalfee/types/genesis.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/globalfee/types/keys.go b/x/globalfee/types/keys.go index 5d48634ab..b0598ead6 100644 --- a/x/globalfee/types/keys.go +++ b/x/globalfee/types/keys.go @@ -4,13 +4,7 @@ var ParamsKey = []byte{0x00} const ( // ModuleName is the name of the this module - ModuleName = "globalfee" - - // StoreKey defines the primary module store key - StoreKey = ModuleName - - // RouterKey defines the module's message routing key - RouterKey = ModuleName - + ModuleName = "globalfee" + StoreKey = ModuleName QuerierRoute = ModuleName ) diff --git a/x/globalfee/types/params.go b/x/globalfee/types/params.go index eb986bfea..bf874834b 100644 --- a/x/globalfee/types/params.go +++ b/x/globalfee/types/params.go @@ -51,8 +51,8 @@ func ParamKeyTable() paramtypes.KeyTable { return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) } -// Validate performs basic validation. -func (p Params) Validate() error { +// ValidateBasic performs basic validation. +func (p Params) ValidateBasic() error { if err := validateMinimumGasPrices(p.MinimumGasPrices); err != nil { return err } diff --git a/x/globalfee/types/params.pb.go b/x/globalfee/types/params.pb.go index caae5be0a..f6bc1a627 100644 --- a/x/globalfee/types/params.pb.go +++ b/x/globalfee/types/params.pb.go @@ -5,14 +5,13 @@ package types import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/globalfee/types/query.pb.go b/x/globalfee/types/query.pb.go index 4e5e58d3e..1f802433c 100644 --- a/x/globalfee/types/query.pb.go +++ b/x/globalfee/types/query.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -17,6 +13,9 @@ import ( 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. diff --git a/x/globalfee/types/tx.go b/x/globalfee/types/tx.go deleted file mode 100644 index 80162c9d3..000000000 --- a/x/globalfee/types/tx.go +++ /dev/null @@ -1,15 +0,0 @@ -package types - -import ( - errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -var _ sdk.Msg = &MsgUpdateParams{} - -func (msg *MsgUpdateParams) Validate() error { - if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil { - return errorsmod.Wrap(err, "authority is invalid") - } - return nil -} diff --git a/x/globalfee/types/tx.pb.go b/x/globalfee/types/tx.pb.go index 5b61253dc..31da98227 100644 --- a/x/globalfee/types/tx.pb.go +++ b/x/globalfee/types/tx.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" @@ -19,6 +15,9 @@ import ( 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. diff --git a/x/interchainqueries/types/genesis.pb.go b/x/interchainqueries/types/genesis.pb.go index ef69e7dd3..1af0782c0 100644 --- a/x/interchainqueries/types/genesis.pb.go +++ b/x/interchainqueries/types/genesis.pb.go @@ -5,15 +5,14 @@ package types import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" types "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/interchainqueries/types/params.pb.go b/x/interchainqueries/types/params.pb.go index db88e9007..5afc785e0 100644 --- a/x/interchainqueries/types/params.pb.go +++ b/x/interchainqueries/types/params.pb.go @@ -5,14 +5,13 @@ package types import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/interchainqueries/types/query.pb.go b/x/interchainqueries/types/query.pb.go index 0f1972e02..03dd0fb7a 100644 --- a/x/interchainqueries/types/query.pb.go +++ b/x/interchainqueries/types/query.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - query "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" @@ -18,6 +14,9 @@ import ( 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. diff --git a/x/interchainqueries/types/tx.pb.go b/x/interchainqueries/types/tx.pb.go index a4a4ca2d9..4d6a49cee 100644 --- a/x/interchainqueries/types/tx.pb.go +++ b/x/interchainqueries/types/tx.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - types1 "github.com/cometbft/cometbft/abci/types" crypto "github.com/cometbft/cometbft/proto/tendermint/crypto" _ "github.com/cosmos/cosmos-proto" @@ -22,6 +18,9 @@ import ( 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. diff --git a/x/interchaintxs/types/genesis.pb.go b/x/interchaintxs/types/genesis.pb.go index 85e6a2c74..25770ae3c 100644 --- a/x/interchaintxs/types/genesis.pb.go +++ b/x/interchaintxs/types/genesis.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/interchaintxs/types/params.pb.go b/x/interchaintxs/types/params.pb.go index 3012954b6..e2f86cfc9 100644 --- a/x/interchaintxs/types/params.pb.go +++ b/x/interchaintxs/types/params.pb.go @@ -5,13 +5,12 @@ package types import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/interchaintxs/types/query.pb.go b/x/interchaintxs/types/query.pb.go index 1518bda64..5f71e842b 100644 --- a/x/interchaintxs/types/query.pb.go +++ b/x/interchaintxs/types/query.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-sdk/types/query" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" @@ -18,6 +14,9 @@ import ( 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. diff --git a/x/interchaintxs/types/tx.pb.go b/x/interchaintxs/types/tx.pb.go index 9f5693111..8b7fb7755 100644 --- a/x/interchaintxs/types/tx.pb.go +++ b/x/interchaintxs/types/tx.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-proto" types1 "github.com/cosmos/cosmos-sdk/codec/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" @@ -19,12 +15,14 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + types2 "github.com/neutron-org/neutron/v4/x/feerefunder/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - - types2 "github.com/neutron-org/neutron/v4/x/feerefunder/types" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/tokenfactory/client/cli/query.go b/x/tokenfactory/client/cli/query.go index 83dbc0f30..5b62e060a 100644 --- a/x/tokenfactory/client/cli/query.go +++ b/x/tokenfactory/client/cli/query.go @@ -27,6 +27,7 @@ func GetQueryCmd() *cobra.Command { GetParams(), GetCmdDenomAuthorityMetadata(), GetCmdDenomsFromCreator(), + GetCmdBeforeSendHook(), ) return cmd @@ -124,10 +125,10 @@ func GetCmdDenomsFromCreator() *cobra.Command { return cmd } -// GetCmdDenomAuthorityMetadata returns the authority metadata for a queried denom +// GetCmdBeforeSendHook returns the BeforeSendHook for a queried denom func GetCmdBeforeSendHook() *cobra.Command { cmd := &cobra.Command{ - Use: "before-send-hiik [denom] [flags]", + Use: "before-send-hook [denom] [flags]", Short: "Get the before send hook for a specific denom", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { @@ -137,15 +138,15 @@ func GetCmdBeforeSendHook() *cobra.Command { } queryClient := types.NewQueryClient(clientCtx) - denom := strings.Split(args[0], "/") - - if len(denom) != 3 { - return fmt.Errorf("invalid denom format, expected format: factory/[creator]/[subdenom]") + denom := args[0] + creator, subdenom, err := types.DeconstructDenom(denom) + if err != nil { + return err } res, err := queryClient.BeforeSendHookAddress(cmd.Context(), &types.QueryBeforeSendHookAddressRequest{ - Creator: denom[1], - Subdenom: denom[2], + Creator: creator, + Subdenom: subdenom, }) if err != nil { return err diff --git a/x/tokenfactory/keeper/bankactions.go b/x/tokenfactory/keeper/bankactions.go index 3438f29a2..5e7b650f9 100644 --- a/x/tokenfactory/keeper/bankactions.go +++ b/x/tokenfactory/keeper/bankactions.go @@ -1,8 +1,6 @@ package keeper import ( - "sort" - sdk "github.com/cosmos/cosmos-sdk/types" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -17,18 +15,22 @@ func (k Keeper) mintTo(ctx sdk.Context, amount sdk.Coin, mintTo string) error { return err } - err = k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(amount)) + mintToAcc, err := sdk.AccAddressFromBech32(mintTo) if err != nil { return err } - addr, err := sdk.AccAddressFromBech32(mintTo) + if k.isModuleAccount(ctx, mintToAcc) { + return status.Errorf(codes.Internal, "minting to module accounts is forbidden") + } + + err = k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(amount)) if err != nil { return err } return k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, - addr, + mintToAcc, sdk.NewCoins(amount)) } @@ -39,13 +41,17 @@ func (k Keeper) burnFrom(ctx sdk.Context, amount sdk.Coin, burnFrom string) erro return err } - addr, err := sdk.AccAddressFromBech32(burnFrom) + burnFromAcc, err := sdk.AccAddressFromBech32(burnFrom) if err != nil { return err } + if k.isModuleAccount(ctx, burnFromAcc) { + return status.Errorf(codes.Internal, "burning from module accounts is forbidden") + } + err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, - addr, + burnFromAcc, types.ModuleName, sdk.NewCoins(amount)) if err != nil { @@ -62,37 +68,38 @@ func (k Keeper) forceTransfer(ctx sdk.Context, amount sdk.Coin, fromAddr, toAddr return err } - fromAcc, err := sdk.AccAddressFromBech32(fromAddr) + transferFromAcc, err := sdk.AccAddressFromBech32(fromAddr) + if err != nil { + return err + } + + transferToAcc, err := sdk.AccAddressFromBech32(toAddr) if err != nil { return err } - sortedPermAddrs := make([]string, 0, len(k.permAddrs)) - for moduleName := range k.permAddrs { - sortedPermAddrs = append(sortedPermAddrs, moduleName) + if k.isModuleAccount(ctx, transferFromAcc) { + return status.Errorf(codes.Internal, "force transfer from module accounts is forbidden") } - sort.Strings(sortedPermAddrs) - for _, moduleName := range sortedPermAddrs { + if k.isModuleAccount(ctx, transferToAcc) { + return status.Errorf(codes.Internal, "force transfer to module accounts is forbidden") + } + + return k.bankKeeper.SendCoins(ctx, transferFromAcc, transferToAcc, sdk.NewCoins(amount)) +} + +func (k Keeper) isModuleAccount(ctx sdk.Context, addr sdk.AccAddress) bool { + for _, moduleName := range k.knownModules { account := k.accountKeeper.GetModuleAccount(ctx, moduleName) if account == nil { - return status.Errorf(codes.NotFound, "account %s not found", moduleName) + continue } - if account.GetAddress().Equals(fromAcc) { - return status.Errorf(codes.Internal, "send from module acc not available") + if account.GetAddress().Equals(addr) { + return true } } - fromSdkAddr, err := sdk.AccAddressFromBech32(fromAddr) - if err != nil { - return err - } - - toSdkAddr, err := sdk.AccAddressFromBech32(toAddr) - if err != nil { - return err - } - - return k.bankKeeper.SendCoins(ctx, fromSdkAddr, toSdkAddr, sdk.NewCoins(amount)) + return false } diff --git a/x/tokenfactory/keeper/before_send.go b/x/tokenfactory/keeper/before_send.go index 69befbb7f..40e81ba8b 100644 --- a/x/tokenfactory/keeper/before_send.go +++ b/x/tokenfactory/keeper/before_send.go @@ -68,6 +68,27 @@ func (k Keeper) Hooks() Hooks { return Hooks{k} } +func (k Keeper) AssertIsHookWhitelisted(ctx sdk.Context, denom string, contractAddress sdk.AccAddress) error { + contractInfo := k.contractKeeper.GetContractInfo(ctx, contractAddress) + if contractInfo == nil { + return types.ErrBeforeSendHookNotWhitelisted.Wrapf("contract with address (%s) does not exist", contractAddress.String()) + } + codeID := contractInfo.CodeID + whitelistedHooks := k.GetParams(ctx).WhitelistedHooks + denomCreator, _, err := types.DeconstructDenom(denom) + if err != nil { + return types.ErrBeforeSendHookNotWhitelisted.Wrapf("invalid denom: %s", denom) + } + + for _, hook := range whitelistedHooks { + if hook.CodeID == codeID && hook.DenomCreator == denomCreator { + return nil + } + } + + return types.ErrBeforeSendHookNotWhitelisted.Wrapf("no whitelist for contract with codeID (%d) and denomCreator (%s) ", codeID, denomCreator) +} + // TrackBeforeSend calls the before send listener contract suppresses any errors func (h Hooks) TrackBeforeSend(ctx context.Context, from, to sdk.AccAddress, amount sdk.Coins) { _ = h.k.callBeforeSendListener(ctx, from, to, amount, false) @@ -99,6 +120,20 @@ func (k Keeper) callBeforeSendListener(ctx context.Context, from, to sdk.AccAddr return err } + // Do not invoke hook if denom is not whitelisted + // NOTE: hooks must already be whitelisted before they can be added, so under normal operation this check should never fail. + // It is here as an emergency override if we want to shutoff a hook. We do not return the error because once it is removed from the whitelist + // a hook should not be able to block a send. + if err := k.AssertIsHookWhitelisted(c, coin.Denom, cwAddr); err != nil { + c.Logger().Error( + "Skipped hook execution due to missing whitelist", + "err", err, + "denom", coin.Denom, + "contract", cwAddr.String(), + ) + continue + } + var msgBz []byte // get msgBz, either BlockBeforeSend or TrackBeforeSend @@ -127,17 +162,16 @@ func (k Keeper) callBeforeSendListener(ctx context.Context, from, to sdk.AccAddr if err != nil { return err } - em := sdk.NewEventManager() // if its track before send, apply gas meter to prevent infinite loop if blockBeforeSend { - _, err = k.contractKeeper.Sudo(c.WithEventManager(em), cwAddr, msgBz) + _, err = k.contractKeeper.Sudo(c, cwAddr, msgBz) if err != nil { return errorsmod.Wrapf(err, "failed to call before send hook for denom %s", coin.Denom) } } else { childCtx := c.WithGasMeter(types2.NewGasMeter(types.TrackBeforeSendGasLimit)) - _, err = k.contractKeeper.Sudo(childCtx.WithEventManager(em), cwAddr, msgBz) + _, err = k.contractKeeper.Sudo(childCtx, cwAddr, msgBz) if err != nil { return errorsmod.Wrapf(err, "failed to call before send hook for denom %s", coin.Denom) } diff --git a/x/tokenfactory/keeper/before_send_test.go b/x/tokenfactory/keeper/before_send_test.go index 540452d0e..cd1def71d 100644 --- a/x/tokenfactory/keeper/before_send_test.go +++ b/x/tokenfactory/keeper/before_send_test.go @@ -2,7 +2,6 @@ package keeper_test import ( "encoding/json" - "fmt" "os" "cosmossdk.io/math" @@ -12,62 +11,107 @@ import ( "github.com/neutron-org/neutron/v4/x/tokenfactory/types" ) -func (suite *KeeperTestSuite) TestTrackBeforeSendWasm() { - for _, tc := range []struct { - name string - wasmFile string - }{ - { - name: "Test bank hook tracking contract ", - // https://github.com/neutron-org/neutron-dev-contracts/tree/feat/balance-tracker-contract/contracts/balance-tracker - wasmFile: "./testdata/balance_tracker.wasm", +func (suite *KeeperTestSuite) initBalanceTrackContract(denom string) (sdk.AccAddress, uint64, string) { + senderAddress := suite.ChainA.SenderAccounts[0].SenderAccount.GetAddress() + suite.TopUpWallet(suite.ChainA.GetContext(), senderAddress, suite.TestAccs[0]) + + // https://github.com/neutron-org/neutron-dev-contracts/tree/feat/balance-tracker-contract/contracts/balance-tracker + wasmFile := "./testdata/balance_tracker.wasm" + + // load wasm file + wasmCode, err := os.ReadFile(wasmFile) + suite.Require().NoError(err) + + // create new denom + res, err := suite.msgServer.CreateDenom(suite.ChainA.GetContext(), types.NewMsgCreateDenom(suite.TestAccs[0].String(), denom)) + suite.Require().NoError(err) + factoryDenom := res.GetNewTokenDenom() + + // instantiate wasm code + tokenFactoryModuleAddr := suite.GetNeutronZoneApp(suite.ChainA).AccountKeeper.GetModuleAddress("tokenfactory") + contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(suite.GetNeutronZoneApp(suite.ChainA).WasmKeeper) + codeID, _, err := contractKeeper.Create(suite.ChainA.GetContext(), suite.TestAccs[0], wasmCode, nil) + suite.Require().NoError(err) + initMsg, _ := json.Marshal( + map[string]interface{}{ + "tracked_denom": factoryDenom, + "tokenfactory_module_address": tokenFactoryModuleAddr, }, - } { - suite.Run(fmt.Sprintf("Case %s", tc.name), func() { - // setup test - suite.Setup() - - senderAddress := suite.ChainA.SenderAccounts[0].SenderAccount.GetAddress() - suite.TopUpWallet(suite.ChainA.GetContext(), senderAddress, suite.TestAccs[0]) - - // load wasm file - wasmCode, err := os.ReadFile(tc.wasmFile) - suite.Require().NoError(err) - - // create new denom - res, err := suite.msgServer.CreateDenom(suite.ChainA.GetContext(), types.NewMsgCreateDenom(suite.TestAccs[0].String(), "testdenom")) - suite.Require().NoError(err, "test: %v", tc.name) - factoryDenom := res.GetNewTokenDenom() - - // instantiate wasm code - tokenFactoryModuleAddr := suite.GetNeutronZoneApp(suite.ChainA).AccountKeeper.GetModuleAddress("tokenfactory") - contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(suite.GetNeutronZoneApp(suite.ChainA).WasmKeeper) - codeID, _, err := contractKeeper.Create(suite.ChainA.GetContext(), suite.TestAccs[0], wasmCode, nil) - suite.Require().NoError(err, "test: %v", tc.name) - initMsg, _ := json.Marshal( - map[string]interface{}{ - "tracked_denom": factoryDenom, - "tokenfactory_module_address": tokenFactoryModuleAddr, - }, - ) - cosmwasmAddress, _, err := contractKeeper.Instantiate( - suite.ChainA.GetContext(), codeID, suite.TestAccs[0], suite.TestAccs[0], initMsg, "", sdk.NewCoins(), - ) - suite.Require().NoError(err, "test: %v", tc.name) - - // set beforesend hook to the new denom - _, err = suite.msgServer.SetBeforeSendHook(suite.ChainA.GetContext(), types.NewMsgSetBeforeSendHook(suite.TestAccs[0].String(), factoryDenom, cosmwasmAddress.String())) - suite.Require().NoError(err, "test: %v", tc.name) - - tokenToSend := sdk.NewCoin(factoryDenom, math.NewInt(100)) - - // mint tokens - _, err = suite.msgServer.Mint(suite.ChainA.GetContext(), types.NewMsgMint(suite.TestAccs[0].String(), tokenToSend)) - suite.Require().NoError(err) - - queryResp, err := suite.GetNeutronZoneApp(suite.ChainA).WasmKeeper.QuerySmart(suite.ChainA.GetContext(), cosmwasmAddress, []byte(`{"total_supply_at":{}}`)) - suite.Require().NoError(err) - suite.Require().Equal("\"100\"", string(queryResp)) - }) - } + ) + cosmwasmAddress, _, err := contractKeeper.Instantiate( + suite.ChainA.GetContext(), codeID, suite.TestAccs[0], suite.TestAccs[0], initMsg, "", sdk.NewCoins(), + ) + suite.Require().NoError(err) + + return cosmwasmAddress, codeID, factoryDenom +} + +func (suite *KeeperTestSuite) TestTrackBeforeSendWasm() { + suite.Setup() + + cosmwasmAddress, codeID, factoryDenom := suite.initBalanceTrackContract("testdenom") + + // Whitelist the hook + params := types.DefaultParams() + params.WhitelistedHooks = []*types.WhitelistedHook{{DenomCreator: suite.TestAccs[0].String(), CodeID: codeID}} + err := suite.GetNeutronZoneApp(suite.ChainA).TokenFactoryKeeper.SetParams(suite.ChainA.GetContext(), params) + suite.Require().NoError(err) + + // set beforeSendHook for the new denom + _, err = suite.msgServer.SetBeforeSendHook(suite.ChainA.GetContext(), types.NewMsgSetBeforeSendHook(suite.TestAccs[0].String(), factoryDenom, cosmwasmAddress.String())) + suite.Require().NoError(err) + + tokenToSend := sdk.NewCoin(factoryDenom, math.NewInt(100)) + + // mint tokens + _, err = suite.msgServer.Mint(suite.ChainA.GetContext(), types.NewMsgMint(suite.TestAccs[0].String(), tokenToSend)) + suite.Require().NoError(err) + + queryResp, err := suite.GetNeutronZoneApp(suite.ChainA).WasmKeeper.QuerySmart(suite.ChainA.GetContext(), cosmwasmAddress, []byte(`{"total_supply_at":{}}`)) + suite.Require().NoError(err) + // Whitelisted contract is called correctly + suite.Require().Equal("\"100\"", string(queryResp)) +} + +func (suite *KeeperTestSuite) TestAddNonWhitelistedHooksFails() { + suite.Setup() + + cosmwasmAddress, _, factoryDenom := suite.initBalanceTrackContract("testdenom") + + // WHEN to set beforeSendHook + _, err := suite.msgServer.SetBeforeSendHook(suite.ChainA.GetContext(), types.NewMsgSetBeforeSendHook(suite.TestAccs[0].String(), factoryDenom, cosmwasmAddress.String())) + // THEN fails with BeforeSendHookNotWhitelisted + suite.Require().ErrorIs(err, types.ErrBeforeSendHookNotWhitelisted) +} + +func (suite *KeeperTestSuite) TestNonWhitelistedHooksNotCalled() { + suite.Setup() + + cosmwasmAddress, codeID, factoryDenom := suite.initBalanceTrackContract("testdenom") + + // Whitelist the hook first so it can be added + params := types.DefaultParams() + params.WhitelistedHooks = []*types.WhitelistedHook{{DenomCreator: suite.TestAccs[0].String(), CodeID: codeID}} + err := suite.GetNeutronZoneApp(suite.ChainA).TokenFactoryKeeper.SetParams(suite.ChainA.GetContext(), params) + suite.Require().NoError(err) + + // set beforeSendHook for the new denom + _, err = suite.msgServer.SetBeforeSendHook(suite.ChainA.GetContext(), types.NewMsgSetBeforeSendHook(suite.TestAccs[0].String(), factoryDenom, cosmwasmAddress.String())) + suite.Require().NoError(err) + + // Remove whitelist for the hook + params = types.DefaultParams() + err = suite.GetNeutronZoneApp(suite.ChainA).TokenFactoryKeeper.SetParams(suite.ChainA.GetContext(), params) + suite.Require().NoError(err) + + tokenToSend := sdk.NewCoin(factoryDenom, math.NewInt(100)) + + // mint tokens + _, err = suite.msgServer.Mint(suite.ChainA.GetContext(), types.NewMsgMint(suite.TestAccs[0].String(), tokenToSend)) + suite.Require().NoError(err) + + queryResp, err := suite.GetNeutronZoneApp(suite.ChainA).WasmKeeper.QuerySmart(suite.ChainA.GetContext(), cosmwasmAddress, []byte(`{"total_supply_at":{}}`)) + suite.Require().NoError(err) + // Whitelisted contract is not called + suite.Require().Equal("\"0\"", string(queryResp)) } diff --git a/x/tokenfactory/keeper/genesis.go b/x/tokenfactory/keeper/genesis.go index 5b58b09a8..f013f6ac0 100644 --- a/x/tokenfactory/keeper/genesis.go +++ b/x/tokenfactory/keeper/genesis.go @@ -24,14 +24,26 @@ func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { if err != nil { panic(err) } + err = k.createDenomAfterValidation(ctx, creator, genDenom.GetDenom()) if err != nil { panic(err) } + err = k.setAuthorityMetadata(ctx, genDenom.GetDenom(), genDenom.GetAuthorityMetadata()) if err != nil { panic(err) } + + if _, err := sdk.AccAddressFromBech32(genDenom.HookContractAddress); genDenom.HookContractAddress != "" && err != nil { + panic(err) + } + + if genDenom.HookContractAddress != "" { + if err := k.setBeforeSendHook(ctx, genDenom.Denom, genDenom.HookContractAddress); err != nil { + panic(err) + } + } } } @@ -43,14 +55,17 @@ func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { for ; iterator.Valid(); iterator.Next() { denom := string(iterator.Value()) + contractHook := k.GetBeforeSendHook(ctx, denom) + authorityMetadata, err := k.GetAuthorityMetadata(ctx, denom) if err != nil { panic(err) } genDenoms = append(genDenoms, types.GenesisDenom{ - Denom: denom, - AuthorityMetadata: authorityMetadata, + Denom: denom, + AuthorityMetadata: authorityMetadata, + HookContractAddress: contractHook, }) } diff --git a/x/tokenfactory/keeper/genesis_test.go b/x/tokenfactory/keeper/genesis_test.go index 83ad23e4f..e059b848f 100644 --- a/x/tokenfactory/keeper/genesis_test.go +++ b/x/tokenfactory/keeper/genesis_test.go @@ -14,6 +14,7 @@ func (suite *KeeperTestSuite) TestGenesis() { AuthorityMetadata: types.DenomAuthorityMetadata{ Admin: "neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2", }, + HookContractAddress: "", }, { Denom: "factory/neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2/diff-admin", @@ -26,6 +27,7 @@ func (suite *KeeperTestSuite) TestGenesis() { AuthorityMetadata: types.DenomAuthorityMetadata{ Admin: "neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2", }, + HookContractAddress: "neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2", }, }, } diff --git a/x/tokenfactory/keeper/keeper.go b/x/tokenfactory/keeper/keeper.go index d4d95f743..593e977a7 100644 --- a/x/tokenfactory/keeper/keeper.go +++ b/x/tokenfactory/keeper/keeper.go @@ -3,13 +3,12 @@ package keeper import ( "context" "fmt" + "sort" "cosmossdk.io/log" - "github.com/cosmos/cosmos-sdk/codec" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "cosmossdk.io/store/prefix" storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/neutron-org/neutron/v4/x/tokenfactory/types" @@ -18,7 +17,7 @@ import ( type ( Keeper struct { storeKey storetypes.StoreKey - permAddrs map[string]authtypes.PermissionsForAddress + knownModules []string cdc codec.Codec accountKeeper types.AccountKeeper bankKeeper types.BankKeeper @@ -37,15 +36,16 @@ func NewKeeper( contractKeeper types.ContractKeeper, authority string, ) Keeper { - permAddrs := make(map[string]authtypes.PermissionsForAddress) - for name, perms := range maccPerms { - permAddrs[name] = authtypes.NewPermissionsForAddress(name, perms) + sortedKnownModules := make([]string, 0, len(maccPerms)) + for moduleName := range maccPerms { + sortedKnownModules = append(sortedKnownModules, moduleName) } + sort.Strings(sortedKnownModules) return Keeper{ cdc: cdc, storeKey: storeKey, - permAddrs: permAddrs, + knownModules: sortedKnownModules, accountKeeper: accountKeeper, bankKeeper: bankKeeper, contractKeeper: contractKeeper, diff --git a/x/tokenfactory/keeper/keeper_test.go b/x/tokenfactory/keeper/keeper_test.go index e86df652c..ac371decf 100644 --- a/x/tokenfactory/keeper/keeper_test.go +++ b/x/tokenfactory/keeper/keeper_test.go @@ -57,6 +57,7 @@ func (suite *KeeperTestSuite) Setup() { sdktypes.NewCoins(sdktypes.NewInt64Coin(params.DefaultDenom, TopUpCoinsAmount)), 0, FeeCollectorAddress, + types.DefaultWhitelistedHooks, )) suite.Require().NoError(err) @@ -125,6 +126,47 @@ func (suite *KeeperTestSuite) TestForceTransferMsg() { suite.Require().NoError(err) _, err = suite.msgServer.ForceTransfer(suite.ChainA.GetContext(), types.NewMsgForceTransfer(suite.TestAccs[0].String(), mintAmt, govModAcc.GetAddress().String(), suite.TestAccs[1].String())) - suite.Require().ErrorContains(err, "send from module acc not available") + suite.Require().ErrorContains(err, "force transfer from module accounts is forbidden") + + _, err = suite.msgServer.ForceTransfer(suite.ChainA.GetContext(), types.NewMsgForceTransfer(suite.TestAccs[0].String(), mintAmt, suite.TestAccs[1].String(), govModAcc.GetAddress().String())) + suite.Require().ErrorContains(err, "force transfer to module accounts is forbidden") + }) +} + +func (suite *KeeperTestSuite) TestMintToMsg() { + suite.Setup() + + // Create a denom + suite.CreateDefaultDenom(suite.ChainA.GetContext()) + + suite.Run("test mint to", func() { + mintAmt := sdktypes.NewInt64Coin(suite.defaultDenom, 10) + + govModAcc := suite.GetNeutronZoneApp(suite.ChainA).AccountKeeper.GetModuleAccount(suite.ChainA.GetContext(), authtypes.FeeCollectorName) + + _, err := suite.msgServer.Mint(suite.ChainA.GetContext(), types.NewMsgMintTo(suite.TestAccs[0].String(), mintAmt, govModAcc.GetAddress().String())) + suite.Require().ErrorContains(err, "minting to module accounts is forbidden") + }) +} + +func (suite *KeeperTestSuite) TestBurnFromMsg() { + suite.Setup() + + // Create a denom + suite.CreateDefaultDenom(suite.ChainA.GetContext()) + + suite.Run("test burn from", func() { + mintAmt := sdktypes.NewInt64Coin(suite.defaultDenom, 10) + + _, err := suite.msgServer.Mint(suite.ChainA.GetContext(), types.NewMsgMint(suite.TestAccs[0].String(), mintAmt)) + suite.Require().NoError(err) + + govModAcc := suite.GetNeutronZoneApp(suite.ChainA).AccountKeeper.GetModuleAccount(suite.ChainA.GetContext(), authtypes.FeeCollectorName) + + err = suite.GetNeutronZoneApp(suite.ChainA).BankKeeper.SendCoins(suite.ChainA.GetContext(), suite.TestAccs[0], govModAcc.GetAddress(), sdktypes.NewCoins(mintAmt)) + suite.Require().NoError(err) + + _, err = suite.msgServer.Burn(suite.ChainA.GetContext(), types.NewMsgBurnFrom(suite.TestAccs[0].String(), mintAmt, govModAcc.GetAddress().String())) + suite.Require().ErrorContains(err, "burning from module accounts is forbidden") }) } diff --git a/x/tokenfactory/keeper/migrations.go b/x/tokenfactory/keeper/migrations.go new file mode 100644 index 000000000..fa10d45ae --- /dev/null +++ b/x/tokenfactory/keeper/migrations.go @@ -0,0 +1,22 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + v2 "github.com/neutron-org/neutron/v4/x/tokenfactory/migrations/v2" +) + +// 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 v2.MigrateStore(ctx, m.keeper.cdc, m.keeper.storeKey, m.keeper) +} diff --git a/x/tokenfactory/keeper/msg_server.go b/x/tokenfactory/keeper/msg_server.go index 39006c3ad..d708a8488 100644 --- a/x/tokenfactory/keeper/msg_server.go +++ b/x/tokenfactory/keeper/msg_server.go @@ -246,6 +246,15 @@ func (server msgServer) SetBeforeSendHook(goCtx context.Context, msg *types.MsgS return nil, types.ErrUnauthorized } + // If we are not removing a hook make sure it has been already whitelisted + if msg.ContractAddr != "" { + // msg.ContractAddr has already been validated + cwAddr := sdk.MustAccAddressFromBech32(msg.ContractAddr) + if err := server.Keeper.AssertIsHookWhitelisted(ctx, msg.Denom, cwAddr); err != nil { + return nil, err + } + } + err = server.Keeper.setBeforeSendHook(ctx, msg.Denom, msg.ContractAddr) if err != nil { return nil, err diff --git a/x/tokenfactory/keeper/msg_server_test.go b/x/tokenfactory/keeper/msg_server_test.go index 5130f266b..30edda04c 100644 --- a/x/tokenfactory/keeper/msg_server_test.go +++ b/x/tokenfactory/keeper/msg_server_test.go @@ -869,24 +869,36 @@ func TestMsgUpdateParamsValidate(t *testing.T) { "authority is invalid", }, { - "empty fee_collector_address", + "empty fee_collector_address with denom_creation_fee", types.MsgUpdateParams{ Authority: testutil.TestOwnerAddress, Params: types.Params{ FeeCollectorAddress: "", + DenomCreationFee: sdktypes.NewCoins(sdktypes.NewCoin("untrn", math.OneInt())), }, }, - "fee_collector_address is invalid", + "DenomCreationFee and FeeCollectorAddr must be both set or both unset", + }, + { + "fee_collector_address empty denom_creation_fee", + types.MsgUpdateParams{ + Authority: testutil.TestOwnerAddress, + Params: types.Params{ + FeeCollectorAddress: testAddress, + }, + }, + "DenomCreationFee and FeeCollectorAddr must be both set or both unset", }, { "invalid fee_collector_address", types.MsgUpdateParams{ Authority: testutil.TestOwnerAddress, Params: types.Params{ + DenomCreationFee: sdktypes.NewCoins(sdktypes.NewCoin("untrn", math.OneInt())), FeeCollectorAddress: "invalid fee_collector_address", }, }, - "fee_collector_address is invalid", + "failed to validate FeeCollectorAddress", }, } @@ -899,3 +911,70 @@ func TestMsgUpdateParamsValidate(t *testing.T) { }) } } + +func TestMsgUpdateParamsWhitelistedHooks(t *testing.T) { + k, ctx := testkeeper.TokenFactoryKeeper(t, nil, nil, nil) + + tests := []struct { + name string + params types.Params + error string + }{ + { + "success", + types.Params{ + WhitelistedHooks: []*types.WhitelistedHook{{DenomCreator: testAddress, CodeID: 1}}, + }, + "", + }, + { + "success multiple ", + types.Params{ + WhitelistedHooks: []*types.WhitelistedHook{ + {DenomCreator: testAddress, CodeID: 1}, + {DenomCreator: testAddress, CodeID: 2}, + }, + }, + "", + }, + { + "invalid denom creator", + types.Params{ + WhitelistedHooks: []*types.WhitelistedHook{ + {DenomCreator: "bad_address", CodeID: 1}, + }, + }, + "invalid denom creator", + }, + { + "duplicate hooks", + types.Params{ + WhitelistedHooks: []*types.WhitelistedHook{ + {DenomCreator: testAddress, CodeID: 1}, + {DenomCreator: testAddress, CodeID: 1}, + }, + }, + "duplicate whitelisted hook", + }, + } + + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + msg := &types.MsgUpdateParams{ + Authority: testutil.TestOwnerAddress, + Params: tt.params, + } + resp, err := k.UpdateParams(ctx, msg) + if len(tt.error) > 0 { + require.ErrorContains(t, err, tt.error) + require.Nil(t, resp) + + } else { + require.NoError(t, err) + newParams := k.GetParams(ctx) + require.Equal(t, tt.params, newParams) + } + }) + } +} diff --git a/x/tokenfactory/migrations/v2/store.go b/x/tokenfactory/migrations/v2/store.go new file mode 100644 index 000000000..e36561925 --- /dev/null +++ b/x/tokenfactory/migrations/v2/store.go @@ -0,0 +1,129 @@ +package v2 + +import ( + "errors" + "fmt" + "strings" + + "cosmossdk.io/store/prefix" + + errorsmod "cosmossdk.io/errors" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + v1beta1types "github.com/neutron-org/neutron/v4/x/tokenfactory/types/v1beta1" +) + +type TokenFactoryKeeper interface { + AssertIsHookWhitelisted(ctx sdk.Context, denom string, contractAddress sdk.AccAddress) error +} + +// MigrateStore performs in-place store migrations. +// The migration adds the new tokenfactory params WhitelistedHooks +func MigrateStore(ctx sdk.Context, cdc codec.BinaryCodec, storeKey storetypes.StoreKey, keeper TokenFactoryKeeper) error { + // NOTE: this must happen first since the migrateHooks relies on the new params + if err := migrateParams(ctx, cdc, storeKey); err != nil { + return err + } + if err := migrateHooks(ctx, storeKey, keeper); err != nil { + return err + } + + return nil +} + +var WhitelistedHooks = []*types.WhitelistedHook{ + { // xASTRO balances tracker + CodeID: 944, + DenomCreator: "neutron1zlf3hutsa4qnmue53lz2tfxrutp8y2e3rj4nkghg3rupgl4mqy8s5jgxsn", + }, + { // USDC <> NTRN balances tracker + CodeID: 1473, + DenomCreator: "neutron18c8qejysp4hgcfuxdpj4wf29mevzwllz5yh8uayjxamwtrs0n9fshq9vtv", + }, + { // NTRN <> ATOM balances tracker + CodeID: 1473, + DenomCreator: "neutron145z3nj7yqft2vpugr5a5p7jsnagvms90tvtej45g4s0xkqalhy7sj20vgz", + }, + { // NFA.zoneV1 + CodeID: 1265, + DenomCreator: "neutron1pwjn3tsumm3j7v7clzqhjsaukv4tdjlclhdytawhet68fwlz84fqcrdyf5", + }, +} + +func migrateParams(ctx sdk.Context, cdc codec.BinaryCodec, storeKey storetypes.StoreKey) error { + ctx.Logger().Info("Migrating tokenfactory params...") + + // fetch old params + store := ctx.KVStore(storeKey) + bz := store.Get(types.ParamsKey) + if bz == nil { + return errors.New("cannot fetch tokenfactory params from KV store") + } + var oldParams v1beta1types.Params + cdc.MustUnmarshal(bz, &oldParams) + + // add new param values + newParams := types.Params{ + DenomCreationFee: oldParams.DenomCreationFee, + DenomCreationGasConsume: oldParams.DenomCreationGasConsume, + FeeCollectorAddress: oldParams.FeeCollectorAddress, + WhitelistedHooks: WhitelistedHooks, + } + + // set params + bz, err := cdc.Marshal(&newParams) + if err != nil { + return err + } + store.Set(types.ParamsKey, bz) + + ctx.Logger().Info("Finished migrating tokenfactory params") + + return nil +} + +func migrateHooks(ctx sdk.Context, storeKey storetypes.StoreKey, keeper TokenFactoryKeeper) error { + ctx.Logger().Info("Migrating tokenfactory hooks...") + + // get hook store + store := prefix.NewStore(ctx.KVStore(storeKey), []byte(types.DenomsPrefixKey)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + hooksToRemove := make([][]byte, 0) + for ; iterator.Valid(); iterator.Next() { + keyParts := strings.Split(string(iterator.Key()), types.KeySeparator) + if len(keyParts) != 3 { + return fmt.Errorf("cannot parse BeforeSendHook data key: %s", string(iterator.Key())) + } + + // Hooks and authorityMetadata are in the same store, we only care about the hooks + if keyParts[2] == types.BeforeSendHookAddressPrefixKey { + denom := keyParts[1] + contractAddr, err := sdk.AccAddressFromBech32(string(iterator.Value())) + if err != nil { + return fmt.Errorf("cannot parse hook contract address: %s", string(iterator.Value())) + } + + err = keeper.AssertIsHookWhitelisted(ctx, denom, contractAddr) + if err != nil { + hooksToRemove = append(hooksToRemove, iterator.Key()) + } + } + } + + err := iterator.Close() + if err != nil { + return errorsmod.Wrap(err, "iterator failed to close after migration") + } + + // Delete all non-whitelisted hooks + for _, k := range hooksToRemove { + store.Delete(k) + } + + ctx.Logger().Info("Finished migrating tokenfactory hooks") + + return nil +} diff --git a/x/tokenfactory/migrations/v2/store_test.go b/x/tokenfactory/migrations/v2/store_test.go new file mode 100644 index 000000000..b65b99cba --- /dev/null +++ b/x/tokenfactory/migrations/v2/store_test.go @@ -0,0 +1,123 @@ +package v2_test + +import ( + "encoding/json" + "os" + "testing" + + "cosmossdk.io/math" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/suite" + + "github.com/neutron-org/neutron/v4/testutil" + v2 "github.com/neutron-org/neutron/v4/x/tokenfactory/migrations/v2" + "github.com/neutron-org/neutron/v4/x/tokenfactory/types" + "github.com/neutron-org/neutron/v4/x/tokenfactory/types/v1beta1" +) + +type V3DexMigrationTestSuite struct { + testutil.IBCConnectionTestSuite +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(V3DexMigrationTestSuite)) +} + +func (suite *V3DexMigrationTestSuite) TestParamsUpgrade() { + var ( + app = suite.GetNeutronZoneApp(suite.ChainA) + storeKey = app.GetKey(types.StoreKey) + ctx = suite.ChainA.GetContext() + cdc = app.AppCodec() + ) + + // Write old state + oldParams := v1beta1.Params{ + DenomCreationFee: sdk.NewCoins(sdk.NewCoin("untrn", math.OneInt())), + DenomCreationGasConsume: types.DefaultDenomCreationGasConsume, + FeeCollectorAddress: "test_addr", + } + store := ctx.KVStore(storeKey) + bz, err := cdc.Marshal(&oldParams) + suite.Require().NoError(err) + + store.Set(types.ParamsKey, bz) + + // Run migration + suite.NoError(v2.MigrateStore(ctx, cdc, storeKey, app.TokenFactoryKeeper)) + + // Check params are correct + newParams := app.TokenFactoryKeeper.GetParams(ctx) + suite.Require().EqualValues(oldParams.DenomCreationFee, newParams.DenomCreationFee) + suite.Require().EqualValues(newParams.DenomCreationGasConsume, newParams.DenomCreationGasConsume) + suite.Require().EqualValues(newParams.FeeCollectorAddress, newParams.FeeCollectorAddress) + suite.Require().EqualValues(newParams.WhitelistedHooks, v2.WhitelistedHooks) +} + +func (suite *V3DexMigrationTestSuite) TestHooksUpgrade() { + var ( + app = suite.GetNeutronZoneApp(suite.ChainA) + storeKey = app.GetKey(types.StoreKey) + ctx = suite.ChainA.GetContext() + cdc = app.AppCodec() + addr1 = suite.ChainA.SenderAccounts[0].SenderAccount.GetAddress() + addr2 = suite.ChainA.SenderAccounts[1].SenderAccount.GetAddress() + ) + + wasmFile := "../../keeper/testdata/balance_tracker.wasm" + wasmCode, err := os.ReadFile(wasmFile) + suite.Require().NoError(err) + + // Setup contract + contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(suite.GetNeutronZoneApp(suite.ChainA).WasmKeeper) + codeID, _, err := contractKeeper.Create(ctx, addr1, wasmCode, nil) + suite.Require().NoError(err) + tokenFactoryModuleAddr := app.AccountKeeper.GetModuleAddress(types.ModuleName) + initMsg, _ := json.Marshal( + map[string]interface{}{ + "tracked_denom": "test_denom", + "tokenfactory_module_address": tokenFactoryModuleAddr, + }, + ) + cwAddress, _, err := contractKeeper.Instantiate(ctx, codeID, addr1, addr1, initMsg, "", sdk.NewCoins()) + suite.Require().NoError(err) + cwAddressStr := cwAddress.String() + + // Add Denoms and hooks + factoryDenom1, err := app.TokenFactoryKeeper.CreateDenom(ctx, addr1.String(), "test1") + suite.Require().NoError(err) + store := app.TokenFactoryKeeper.GetDenomPrefixStore(ctx, factoryDenom1) + store.Set([]byte(types.BeforeSendHookAddressPrefixKey), []byte(cwAddressStr)) + + factoryDenom2, err := app.TokenFactoryKeeper.CreateDenom(ctx, addr2.String(), "test2") + suite.Require().NoError(err) + store = app.TokenFactoryKeeper.GetDenomPrefixStore(ctx, factoryDenom2) + store.Set([]byte(types.BeforeSendHookAddressPrefixKey), []byte(cwAddressStr)) + + factoryDenom3, err := app.TokenFactoryKeeper.CreateDenom(ctx, addr2.String(), "test3") + suite.Require().NoError(err) + store = app.TokenFactoryKeeper.GetDenomPrefixStore(ctx, factoryDenom2) + store.Set([]byte(types.BeforeSendHookAddressPrefixKey), []byte(cwAddressStr)) + + // Include the hook we want to whitelist in the params migration + v2.WhitelistedHooks = []*types.WhitelistedHook{ + { + CodeID: codeID, + DenomCreator: addr1.String(), + }, + } + + // Run migration + suite.NoError(v2.MigrateStore(ctx, cdc, storeKey, app.TokenFactoryKeeper)) + + // The whitelisted hook is still there + hook1 := app.TokenFactoryKeeper.GetBeforeSendHook(ctx, factoryDenom1) + suite.Assert().Equal(cwAddressStr, hook1) + + // The non whitelisted hooks have been removed + hook2 := app.TokenFactoryKeeper.GetBeforeSendHook(ctx, factoryDenom2) + suite.Assert().Equal("", hook2) + hook3 := app.TokenFactoryKeeper.GetBeforeSendHook(ctx, factoryDenom3) + suite.Assert().Equal("", hook3) +} diff --git a/x/tokenfactory/module.go b/x/tokenfactory/module.go index 559495ff2..c0a2322a3 100644 --- a/x/tokenfactory/module.go +++ b/x/tokenfactory/module.go @@ -135,6 +135,10 @@ func (AppModule) QuerierRoute() string { return types.QuerierRoute } func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterQueryServer(cfg.QueryServer(), am.keeper) types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + m := keeper.NewMigrator(am.keeper) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(fmt.Sprintf("failed to migrate x/tokenfactory from version 1 to 2: %v", err)) + } } // RegisterInvariants registers the tokenfactory module's invariants. diff --git a/x/tokenfactory/types/authorityMetadata.pb.go b/x/tokenfactory/types/authorityMetadata.pb.go index 3d12d5ed5..ad2ace108 100644 --- a/x/tokenfactory/types/authorityMetadata.pb.go +++ b/x/tokenfactory/types/authorityMetadata.pb.go @@ -5,13 +5,12 @@ package types import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/tokenfactory/types/constants.go b/x/tokenfactory/types/constants.go index b68bbb99a..066fcad70 100644 --- a/x/tokenfactory/types/constants.go +++ b/x/tokenfactory/types/constants.go @@ -1,5 +1,5 @@ package types -const ConsensusVersion = 1 +const ConsensusVersion = 2 var TrackBeforeSendGasLimit = uint64(100_000) diff --git a/x/tokenfactory/types/errors.go b/x/tokenfactory/types/errors.go index c20e41980..9bbf6a15c 100644 --- a/x/tokenfactory/types/errors.go +++ b/x/tokenfactory/types/errors.go @@ -8,15 +8,17 @@ import ( // x/tokenfactory module sentinel errors var ( - ErrDenomExists = errorsmod.Register(ModuleName, 2, "attempting to create a denom that already exists (has bank metadata)") - ErrUnauthorized = errorsmod.Register(ModuleName, 3, "unauthorized account") - ErrInvalidDenom = errorsmod.Register(ModuleName, 4, "invalid denom") - ErrInvalidCreator = errorsmod.Register(ModuleName, 5, "invalid creator") - ErrInvalidAuthorityMetadata = errorsmod.Register(ModuleName, 6, "invalid authority metadata") - ErrInvalidGenesis = errorsmod.Register(ModuleName, 7, "invalid genesis") - ErrSubdenomTooLong = errorsmod.Register(ModuleName, 8, fmt.Sprintf("subdenom too long, max length is %d bytes", MaxSubdenomLength)) - ErrCreatorTooLong = errorsmod.Register(ModuleName, 9, fmt.Sprintf("creator too long, max length is %d bytes", MaxCreatorLength)) - ErrDenomDoesNotExist = errorsmod.Register(ModuleName, 10, "denom does not exist") - ErrBurnFromModuleAccount = errorsmod.Register(ModuleName, 11, "burning from Module Account is not allowed") - ErrTrackBeforeSendOutOfGas = errorsmod.Register(ModuleName, 12, "gas meter hit maximum limit") + ErrDenomExists = errorsmod.Register(ModuleName, 2, "attempting to create a denom that already exists (has bank metadata)") + ErrUnauthorized = errorsmod.Register(ModuleName, 3, "unauthorized account") + ErrInvalidDenom = errorsmod.Register(ModuleName, 4, "invalid denom") + ErrInvalidCreator = errorsmod.Register(ModuleName, 5, "invalid creator") + ErrInvalidAuthorityMetadata = errorsmod.Register(ModuleName, 6, "invalid authority metadata") + ErrInvalidGenesis = errorsmod.Register(ModuleName, 7, "invalid genesis") + ErrSubdenomTooLong = errorsmod.Register(ModuleName, 8, fmt.Sprintf("subdenom too long, max length is %d bytes", MaxSubdenomLength)) + ErrCreatorTooLong = errorsmod.Register(ModuleName, 9, fmt.Sprintf("creator too long, max length is %d bytes", MaxCreatorLength)) + ErrDenomDoesNotExist = errorsmod.Register(ModuleName, 10, "denom does not exist") + ErrBurnFromModuleAccount = errorsmod.Register(ModuleName, 11, "burning from Module Account is not allowed") + ErrTrackBeforeSendOutOfGas = errorsmod.Register(ModuleName, 12, "gas meter hit maximum limit") + ErrInvalidHookContractAddress = errorsmod.Register(ModuleName, 13, "invalid hook contract address") + ErrBeforeSendHookNotWhitelisted = errorsmod.Register(ModuleName, 14, "beforeSendHook is not whitelisted") ) diff --git a/x/tokenfactory/types/expected_keepers.go b/x/tokenfactory/types/expected_keepers.go index 6c65d173b..45e7d8b0e 100644 --- a/x/tokenfactory/types/expected_keepers.go +++ b/x/tokenfactory/types/expected_keepers.go @@ -3,6 +3,7 @@ package types import ( "context" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" ) @@ -36,4 +37,5 @@ type BankHooks interface { type ContractKeeper interface { Sudo(ctx context.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error) + GetContractInfo(ctx context.Context, contractAddress sdk.AccAddress) *wasmtypes.ContractInfo } diff --git a/x/tokenfactory/types/genesis.go b/x/tokenfactory/types/genesis.go index fc265c124..683f49df7 100644 --- a/x/tokenfactory/types/genesis.go +++ b/x/tokenfactory/types/genesis.go @@ -43,6 +43,10 @@ func (gs GenesisState) Validate() error { return errorsmod.Wrapf(ErrInvalidAuthorityMetadata, "Invalid admin address (%s)", err) } } + + if _, err := sdk.AccAddressFromBech32(denom.HookContractAddress); denom.HookContractAddress != "" && err != nil { + return errorsmod.Wrapf(ErrInvalidHookContractAddress, "Invalid hook contract address (%s)", err) + } } return nil diff --git a/x/tokenfactory/types/genesis.pb.go b/x/tokenfactory/types/genesis.pb.go index 29435e226..3415f1e6c 100644 --- a/x/tokenfactory/types/genesis.pb.go +++ b/x/tokenfactory/types/genesis.pb.go @@ -5,12 +5,11 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" - - _ "github.com/cosmos/gogoproto/gogoproto" - proto "github.com/cosmos/gogoproto/proto" ) // Reference imports to suppress errors if they are not otherwise used. @@ -82,8 +81,9 @@ func (m *GenesisState) GetFactoryDenoms() []GenesisDenom { // state. The structure contains DenomAuthorityMetadata which defines the // denom's admin. type GenesisDenom struct { - Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty" yaml:"denom"` - AuthorityMetadata DenomAuthorityMetadata `protobuf:"bytes,2,opt,name=authority_metadata,json=authorityMetadata,proto3" json:"authority_metadata" yaml:"authority_metadata"` + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty" yaml:"denom"` + AuthorityMetadata DenomAuthorityMetadata `protobuf:"bytes,2,opt,name=authority_metadata,json=authorityMetadata,proto3" json:"authority_metadata" yaml:"authority_metadata"` + HookContractAddress string `protobuf:"bytes,3,opt,name=hook_contract_address,json=hookContractAddress,proto3" json:"hook_contract_address,omitempty"` } func (m *GenesisDenom) Reset() { *m = GenesisDenom{} } @@ -133,6 +133,13 @@ func (m *GenesisDenom) GetAuthorityMetadata() DenomAuthorityMetadata { return DenomAuthorityMetadata{} } +func (m *GenesisDenom) GetHookContractAddress() string { + if m != nil { + return m.HookContractAddress + } + return "" +} + func init() { proto.RegisterType((*GenesisState)(nil), "osmosis.tokenfactory.v1beta1.GenesisState") proto.RegisterType((*GenesisDenom)(nil), "osmosis.tokenfactory.v1beta1.GenesisDenom") @@ -143,30 +150,33 @@ func init() { } var fileDescriptor_5749c3f71850298b = []byte{ - // 368 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xca, 0x2f, 0xce, 0xcd, - 0x2f, 0xce, 0x2c, 0xd6, 0x2f, 0xc9, 0xcf, 0x4e, 0xcd, 0x4b, 0x4b, 0x4c, 0x2e, 0xc9, 0x2f, 0xaa, - 0xd4, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, - 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x81, 0xaa, 0xd5, 0x43, 0x56, 0xab, 0x07, 0x55, - 0x2b, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa8, 0x0f, 0x62, 0x41, 0xf4, 0x48, 0x99, 0xe0, - 0x35, 0x3f, 0xb1, 0xb4, 0x24, 0x23, 0xbf, 0x28, 0xb3, 0xa4, 0xd2, 0x37, 0xb5, 0x24, 0x31, 0x25, - 0xb1, 0x24, 0x11, 0xaa, 0x4b, 0x13, 0xaf, 0xae, 0x82, 0xc4, 0xa2, 0xc4, 0x5c, 0xa8, 0xa3, 0x94, - 0x8e, 0x30, 0x72, 0xf1, 0xb8, 0x43, 0x9c, 0x19, 0x5c, 0x92, 0x58, 0x92, 0x2a, 0xe4, 0xc4, 0xc5, - 0x06, 0x51, 0x20, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x6d, 0xa4, 0xa2, 0x87, 0xcf, 0xd9, 0x7a, 0x01, - 0x60, 0xb5, 0x4e, 0x2c, 0x27, 0xee, 0xc9, 0x33, 0x04, 0x41, 0x75, 0x0a, 0x15, 0x70, 0xf1, 0x41, - 0xd5, 0xc5, 0xa7, 0xa4, 0xe6, 0xe5, 0xe7, 0x16, 0x4b, 0x30, 0x29, 0x30, 0x6b, 0x70, 0x1b, 0x69, - 0xe1, 0x37, 0x0b, 0xea, 0x0e, 0x17, 0x90, 0x16, 0x27, 0x59, 0x90, 0x89, 0x9f, 0xee, 0xc9, 0x8b, - 0x56, 0x26, 0xe6, 0xe6, 0x58, 0x29, 0xa1, 0x9a, 0xa7, 0x14, 0xc4, 0x0b, 0x15, 0x70, 0x81, 0xf0, - 0x8f, 0x22, 0xbc, 0x01, 0x16, 0x11, 0x52, 0xe3, 0x62, 0x05, 0x2b, 0x05, 0xfb, 0x82, 0xd3, 0x49, - 0xe0, 0xd3, 0x3d, 0x79, 0x1e, 0x88, 0x49, 0x60, 0x61, 0xa5, 0x20, 0x88, 0xb4, 0x50, 0x1b, 0x23, - 0x97, 0x10, 0x3c, 0x18, 0xe3, 0x73, 0xa1, 0xe1, 0x28, 0xc1, 0x04, 0xf6, 0xbb, 0x09, 0x7e, 0xf7, - 0x82, 0x6d, 0x72, 0x44, 0x8f, 0x03, 0x27, 0x45, 0xa8, 0xcb, 0x25, 0x21, 0xf6, 0x61, 0x9a, 0xae, - 0x14, 0x24, 0x88, 0x11, 0x73, 0x56, 0x2c, 0x2f, 0x16, 0xc8, 0x33, 0x3a, 0x05, 0x9c, 0x78, 0x24, - 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, - 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x59, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, - 0x72, 0x7e, 0xae, 0x7e, 0x5e, 0x6a, 0x69, 0x49, 0x51, 0x7e, 0x9e, 0x6e, 0x7e, 0x51, 0x3a, 0x8c, - 0xad, 0x5f, 0x66, 0xa2, 0x5f, 0x81, 0x1a, 0xdf, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, - 0x78, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xd1, 0xcf, 0x93, 0x08, 0xaa, 0x02, 0x00, 0x00, + // 411 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0xae, 0xd2, 0x40, + 0x14, 0xc6, 0x3b, 0xf7, 0x5e, 0x6f, 0x62, 0x2f, 0x1a, 0xad, 0x92, 0x54, 0x82, 0x2d, 0x74, 0x61, + 0x08, 0x89, 0x6d, 0x40, 0x62, 0x0c, 0x3b, 0x2a, 0x89, 0x2b, 0x13, 0x52, 0x77, 0x6e, 0x9a, 0xa1, + 0x1d, 0x4b, 0x83, 0xed, 0x69, 0x66, 0x06, 0x62, 0x5f, 0xc0, 0xb5, 0x8f, 0xe0, 0x83, 0xf8, 0x00, + 0x2c, 0x59, 0xba, 0x22, 0x06, 0x36, 0xae, 0x79, 0x01, 0x4d, 0x67, 0xc6, 0x3f, 0x5c, 0x08, 0xbb, + 0xe9, 0x99, 0xdf, 0xf9, 0xce, 0x77, 0xbe, 0x8e, 0xde, 0x05, 0x96, 0x01, 0x4b, 0x99, 0xc7, 0x61, + 0x4e, 0xf2, 0x0f, 0x38, 0xe2, 0x40, 0x4b, 0x6f, 0xd9, 0x9b, 0x12, 0x8e, 0x7b, 0x5e, 0x42, 0x72, + 0xc2, 0x52, 0xe6, 0x16, 0x14, 0x38, 0x18, 0x4d, 0xc5, 0xba, 0xff, 0xb3, 0xae, 0x62, 0x1b, 0x8f, + 0x13, 0x48, 0x40, 0x80, 0x5e, 0x75, 0x92, 0x3d, 0x8d, 0xf6, 0x49, 0xfd, 0x02, 0x53, 0x9c, 0x29, + 0xd9, 0xc6, 0xe0, 0xac, 0x05, 0xbc, 0xe0, 0x33, 0xa0, 0x29, 0x2f, 0xdf, 0x12, 0x8e, 0x63, 0xcc, + 0xb1, 0xec, 0x72, 0xbe, 0x21, 0xbd, 0xf6, 0x46, 0xda, 0x7b, 0xc7, 0x31, 0x27, 0xc6, 0x50, 0xbf, + 0x96, 0xb2, 0x26, 0x6a, 0xa1, 0xce, 0x4d, 0xbf, 0xe9, 0x9e, 0xb4, 0x3b, 0x11, 0x8c, 0x7f, 0xb5, + 0xda, 0xd8, 0x5a, 0xa0, 0x3a, 0x8c, 0x42, 0xbf, 0xaf, 0xee, 0xc3, 0x98, 0xe4, 0x90, 0x31, 0xf3, + 0xa2, 0x75, 0xd9, 0xb9, 0xe9, 0x77, 0xdd, 0x73, 0x2b, 0xbb, 0x6a, 0xfe, 0xb8, 0x6a, 0xf1, 0x9f, + 0x56, 0x8a, 0xfb, 0x8d, 0x5d, 0x2f, 0x71, 0xf6, 0x71, 0xe8, 0x1c, 0xea, 0x39, 0xc1, 0x3d, 0x55, + 0x18, 0xcb, 0xef, 0x5f, 0xff, 0xec, 0x8b, 0x8a, 0xf1, 0x4c, 0xbf, 0x23, 0x50, 0xe1, 0xfe, 0xae, + 0xff, 0x60, 0xbf, 0xb1, 0x6b, 0x52, 0x49, 0x94, 0x9d, 0x40, 0x5e, 0x1b, 0x9f, 0x91, 0x6e, 0xfc, + 0xcd, 0x24, 0xcc, 0x54, 0x28, 0xe6, 0x85, 0xd8, 0x79, 0x70, 0xde, 0xaf, 0x98, 0x34, 0xba, 0x1d, + 0xa8, 0xdf, 0x56, 0xce, 0x9f, 0xc8, 0x79, 0xc7, 0xea, 0x4e, 0xf0, 0xf0, 0xe8, 0x37, 0x18, 0xaf, + 0xf4, 0xfa, 0x0c, 0x60, 0x1e, 0x46, 0x90, 0x73, 0x8a, 0x23, 0x1e, 0xe2, 0x38, 0xa6, 0x84, 0x31, + 0xf3, 0x52, 0x2c, 0x50, 0x05, 0x8c, 0x82, 0x47, 0x15, 0xf2, 0x5a, 0x11, 0x23, 0x09, 0x0c, 0xaf, + 0x7e, 0x7e, 0xb5, 0x91, 0x3f, 0x59, 0x6d, 0x2d, 0xb4, 0xde, 0x5a, 0xe8, 0xc7, 0xd6, 0x42, 0x5f, + 0x76, 0x96, 0xb6, 0xde, 0x59, 0xda, 0xf7, 0x9d, 0xa5, 0xbd, 0x7f, 0x99, 0xa4, 0x7c, 0xb6, 0x98, + 0xba, 0x11, 0x64, 0x5e, 0x4e, 0x16, 0x9c, 0x42, 0xfe, 0x1c, 0x68, 0xf2, 0xe7, 0xec, 0x2d, 0x07, + 0xde, 0xa7, 0xc3, 0xc7, 0xc2, 0xcb, 0x82, 0xb0, 0xe9, 0xb5, 0x78, 0x19, 0x2f, 0x7e, 0x07, 0x00, + 0x00, 0xff, 0xff, 0xee, 0xef, 0xf1, 0x3e, 0xd4, 0x02, 0x00, 0x00, } func (this *GenesisDenom) Equal(that interface{}) bool { @@ -194,6 +204,9 @@ func (this *GenesisDenom) Equal(that interface{}) bool { if !this.AuthorityMetadata.Equal(&that1.AuthorityMetadata) { return false } + if this.HookContractAddress != that1.HookContractAddress { + return false + } return true } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -263,6 +276,13 @@ func (m *GenesisDenom) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.HookContractAddress) > 0 { + i -= len(m.HookContractAddress) + copy(dAtA[i:], m.HookContractAddress) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.HookContractAddress))) + i-- + dAtA[i] = 0x1a + } { size, err := m.AuthorityMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -323,6 +343,10 @@ func (m *GenesisDenom) Size() (n int) { } l = m.AuthorityMetadata.Size() n += 1 + l + sovGenesis(uint64(l)) + l = len(m.HookContractAddress) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } return n } @@ -543,6 +567,38 @@ func (m *GenesisDenom) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HookContractAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HookContractAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/x/tokenfactory/types/genesis_test.go b/x/tokenfactory/types/genesis_test.go index 7e19f69b7..e3039050b 100644 --- a/x/tokenfactory/types/genesis_test.go +++ b/x/tokenfactory/types/genesis_test.go @@ -130,6 +130,36 @@ func TestGenesisState_Validate(t *testing.T) { }, valid: false, }, + { + desc: "empty hook address", + genState: &types.GenesisState{ + FactoryDenoms: []types.GenesisDenom{ + { + Denom: "factory/neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2/bitcoin", + AuthorityMetadata: types.DenomAuthorityMetadata{ + Admin: "neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2", + }, + HookContractAddress: "", + }, + }, + }, + valid: true, + }, + { + desc: "invalid hook address", + genState: &types.GenesisState{ + FactoryDenoms: []types.GenesisDenom{ + { + Denom: "factory/neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2/bitcoin", + AuthorityMetadata: types.DenomAuthorityMetadata{ + Admin: "neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2", + }, + HookContractAddress: "sfsdfsdfsdfs", + }, + }, + }, + valid: false, + }, } { t.Run(tc.desc, func(t *testing.T) { err := tc.genState.Validate() diff --git a/x/tokenfactory/types/msgs.go b/x/tokenfactory/types/msgs.go index 659346a8b..7207f7247 100644 --- a/x/tokenfactory/types/msgs.go +++ b/x/tokenfactory/types/msgs.go @@ -112,10 +112,11 @@ func NewMsgBurn(sender string, amount sdk.Coin) *MsgBurn { } // NewMsgBurn creates a message to burn tokens -func NewMsgBurnFrom(sender string, amount sdk.Coin, _ string) *MsgBurn { +func NewMsgBurnFrom(sender string, amount sdk.Coin, from string) *MsgBurn { return &MsgBurn{ - Sender: sender, - Amount: amount, + Sender: sender, + Amount: amount, + BurnFromAddress: from, } } diff --git a/x/tokenfactory/types/params.go b/x/tokenfactory/types/params.go index 2e587c27a..10328c10e 100644 --- a/x/tokenfactory/types/params.go +++ b/x/tokenfactory/types/params.go @@ -12,10 +12,12 @@ var ( KeyDenomCreationFee = []byte("DenomCreationFee") KeyDenomCreationGasConsume = []byte("DenomCreationGasConsume") KeyFeeCollectorAddress = []byte("FeeCollectorAddress") + KeyWhitelistedHooks = []byte("WhitelistedHooks") // We don't want to charge users for denom creation DefaultDenomCreationFee sdk.Coins DefaultDenomCreationGasConsume uint64 DefaultFeeCollectorAddress = "" + DefaultWhitelistedHooks = []*WhitelistedHook{} ) // ParamKeyTable the param key table for tokenfactory module. @@ -23,17 +25,18 @@ func ParamKeyTable() paramtypes.KeyTable { return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) } -func NewParams(denomCreationFee sdk.Coins, denomCreationGasConsume uint64, feeCollectorAddress string) Params { +func NewParams(denomCreationFee sdk.Coins, denomCreationGasConsume uint64, feeCollectorAddress string, whitelistedHooks []*WhitelistedHook) Params { return Params{ DenomCreationFee: denomCreationFee, DenomCreationGasConsume: denomCreationGasConsume, FeeCollectorAddress: feeCollectorAddress, + WhitelistedHooks: whitelistedHooks, } } // DefaultParams returns a default set of parameters func DefaultParams() Params { - return NewParams(DefaultDenomCreationFee, DefaultDenomCreationGasConsume, DefaultFeeCollectorAddress) + return NewParams(DefaultDenomCreationFee, DefaultDenomCreationGasConsume, DefaultFeeCollectorAddress, DefaultWhitelistedHooks) } // Validate validates params @@ -47,11 +50,15 @@ func (p Params) Validate() error { } if err := validateDenomCreationFee(p.DenomCreationFee); err != nil { - return fmt.Errorf("failed to validate params: %w", err) + return fmt.Errorf("failed to validate DenomCreationFee: %w", err) } if err := validateFeeCollectorAddress(p.FeeCollectorAddress); err != nil { - return fmt.Errorf("failed to validate params: %w", err) + return fmt.Errorf("failed to validate FeeCollectorAddress: %w", err) + } + + if err := validateWhitelistedHooks(p.WhitelistedHooks); err != nil { + return fmt.Errorf("failed to validate WhitelistedHooks: %w", err) } return nil @@ -63,6 +70,7 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { paramtypes.NewParamSetPair(KeyDenomCreationFee, &p.DenomCreationFee, validateDenomCreationFee), paramtypes.NewParamSetPair(KeyDenomCreationGasConsume, &p.DenomCreationGasConsume, validateDenomCreationGasConsume), paramtypes.NewParamSetPair(KeyFeeCollectorAddress, &p.FeeCollectorAddress, validateFeeCollectorAddress), + paramtypes.NewParamSetPair(KeyWhitelistedHooks, &p.WhitelistedHooks, validateWhitelistedHooks), } } @@ -105,3 +113,24 @@ func validateFeeCollectorAddress(i interface{}) error { return nil } + +func validateWhitelistedHooks(i interface{}) error { + hooks, ok := i.([]*WhitelistedHook) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + seenHooks := map[string]bool{} + for _, hook := range hooks { + hookStr := hook.String() + if seenHooks[hookStr] { + return fmt.Errorf("duplicate whitelisted hook: %s", hookStr) + } + seenHooks[hookStr] = true + _, err := sdk.AccAddressFromBech32(hook.DenomCreator) + if err != nil { + return fmt.Errorf("invalid denom creator address: %w", err) + } + } + return nil +} diff --git a/x/tokenfactory/types/params.pb.go b/x/tokenfactory/types/params.pb.go index fabd4e60f..a5b112b5a 100644 --- a/x/tokenfactory/types/params.pb.go +++ b/x/tokenfactory/types/params.pb.go @@ -1,19 +1,18 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: osmosis/tokenfactory/v1beta1/params.proto +// source: osmosis/tokenfactory/params.proto package types import ( fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. @@ -27,6 +26,61 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// WhitelistedHook describes a beforeSendHook which is allowed to be added and executed +// SetBeforeSendHook can only be called on denoms where the denom creator and +// code_id for the `contract_addr` match a WhitelistedHook +type WhitelistedHook struct { + CodeID uint64 `protobuf:"varint,1,opt,name=code_id,json=codeId,proto3" json:"code_id,omitempty"` + DenomCreator string `protobuf:"bytes,2,opt,name=denom_creator,json=denomCreator,proto3" json:"denom_creator,omitempty"` +} + +func (m *WhitelistedHook) Reset() { *m = WhitelistedHook{} } +func (m *WhitelistedHook) String() string { return proto.CompactTextString(m) } +func (*WhitelistedHook) ProtoMessage() {} +func (*WhitelistedHook) Descriptor() ([]byte, []int) { + return fileDescriptor_09c297db7c49d1cf, []int{0} +} +func (m *WhitelistedHook) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WhitelistedHook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_WhitelistedHook.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 *WhitelistedHook) XXX_Merge(src proto.Message) { + xxx_messageInfo_WhitelistedHook.Merge(m, src) +} +func (m *WhitelistedHook) XXX_Size() int { + return m.Size() +} +func (m *WhitelistedHook) XXX_DiscardUnknown() { + xxx_messageInfo_WhitelistedHook.DiscardUnknown(m) +} + +var xxx_messageInfo_WhitelistedHook proto.InternalMessageInfo + +func (m *WhitelistedHook) GetCodeID() uint64 { + if m != nil { + return m.CodeID + } + return 0 +} + +func (m *WhitelistedHook) GetDenomCreator() string { + if m != nil { + return m.DenomCreator + } + return "" +} + // Params defines the parameters for the tokenfactory module. type Params struct { // DenomCreationFee defines the fee to be charged on the creation of a new @@ -41,13 +95,15 @@ type Params struct { // FeeCollectorAddress is the address where fees collected from denom creation // are sent to FeeCollectorAddress string `protobuf:"bytes,3,opt,name=fee_collector_address,json=feeCollectorAddress,proto3" json:"fee_collector_address,omitempty"` + // whitelisted_hooks is the list of hooks which are allowed to be added and executed + WhitelistedHooks []*WhitelistedHook `protobuf:"bytes,4,rep,name=whitelisted_hooks,json=whitelistedHooks,proto3" json:"whitelisted_hooks,omitempty"` } func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_cc8299d306f3ff47, []int{0} + return fileDescriptor_09c297db7c49d1cf, []int{1} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -97,40 +153,86 @@ func (m *Params) GetFeeCollectorAddress() string { return "" } -func init() { - proto.RegisterType((*Params)(nil), "osmosis.tokenfactory.v1beta1.Params") +func (m *Params) GetWhitelistedHooks() []*WhitelistedHook { + if m != nil { + return m.WhitelistedHooks + } + return nil } func init() { - proto.RegisterFile("osmosis/tokenfactory/v1beta1/params.proto", fileDescriptor_cc8299d306f3ff47) + proto.RegisterType((*WhitelistedHook)(nil), "osmosis.tokenfactory.WhitelistedHook") + proto.RegisterType((*Params)(nil), "osmosis.tokenfactory.Params") } -var fileDescriptor_cc8299d306f3ff47 = []byte{ - // 372 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x52, 0xb1, 0x6e, 0xe2, 0x40, - 0x10, 0xf5, 0xc2, 0x09, 0xe9, 0x7c, 0xcd, 0xc9, 0x77, 0x51, 0x00, 0x45, 0x36, 0x71, 0x65, 0x0a, - 0xbc, 0x82, 0x44, 0x29, 0xd2, 0x05, 0x4b, 0x49, 0x15, 0x09, 0x51, 0xa6, 0xb1, 0xd6, 0xf6, 0xd8, - 0xb1, 0xc0, 0x3b, 0xc8, 0xbb, 0xa0, 0xf0, 0x17, 0xa9, 0xf2, 0x11, 0xf9, 0x87, 0xf4, 0x94, 0x94, - 0xa9, 0x9c, 0x08, 0xfe, 0x80, 0x2f, 0x88, 0xb0, 0x4d, 0x04, 0x49, 0xaa, 0x9d, 0x99, 0xf7, 0xe6, - 0xcd, 0xdb, 0xd9, 0x55, 0xdb, 0x28, 0x12, 0x14, 0xb1, 0xa0, 0x12, 0x47, 0xc0, 0x43, 0xe6, 0x4b, - 0x4c, 0xe7, 0x74, 0xd6, 0xf5, 0x40, 0xb2, 0x2e, 0x9d, 0xb0, 0x94, 0x25, 0xc2, 0x9e, 0xa4, 0x28, - 0x51, 0x3b, 0x29, 0xa9, 0xf6, 0x3e, 0xd5, 0x2e, 0xa9, 0x4d, 0xdd, 0xcf, 0x61, 0xea, 0x31, 0x01, - 0x9f, 0xfd, 0x3e, 0xc6, 0xbc, 0xe8, 0x6e, 0x36, 0x0a, 0xdc, 0xcd, 0x33, 0x5a, 0x24, 0x25, 0xf4, - 0x3f, 0xc2, 0x08, 0x8b, 0xfa, 0x36, 0x2a, 0xaa, 0xe6, 0x4b, 0x45, 0xad, 0x0d, 0xf2, 0xf9, 0xda, - 0x13, 0x51, 0xb5, 0x00, 0x38, 0x26, 0xae, 0x9f, 0x02, 0x93, 0x31, 0x72, 0x37, 0x04, 0xa8, 0x93, - 0x56, 0xd5, 0xfa, 0xd3, 0x6b, 0xd8, 0xa5, 0xd8, 0x76, 0xf2, 0xce, 0x8e, 0xed, 0x60, 0xcc, 0xfb, - 0xb7, 0x8b, 0xcc, 0x50, 0x36, 0x99, 0xd1, 0x98, 0xb3, 0x64, 0x7c, 0x69, 0x7e, 0x97, 0x30, 0x9f, - 0xdf, 0x0c, 0x2b, 0x8a, 0xe5, 0xfd, 0xd4, 0xb3, 0x7d, 0x4c, 0x4a, 0x5b, 0xe5, 0xd1, 0x11, 0xc1, - 0x88, 0xca, 0xf9, 0x04, 0x44, 0xae, 0x26, 0x86, 0x7f, 0x73, 0x01, 0xa7, 0xec, 0xbf, 0x06, 0xd0, - 0x42, 0xb5, 0xf9, 0x45, 0x34, 0x62, 0xc2, 0xf5, 0x91, 0x8b, 0x69, 0x02, 0xf5, 0x4a, 0x8b, 0x58, - 0xbf, 0xfa, 0xed, 0x45, 0x66, 0x90, 0x4d, 0x66, 0x9c, 0xfe, 0x68, 0x62, 0x8f, 0x6f, 0x0e, 0x8f, - 0x0f, 0x06, 0xdc, 0x30, 0xe1, 0x14, 0x88, 0xd6, 0x53, 0x8f, 0x42, 0x00, 0xd7, 0xc7, 0xf1, 0x18, - 0xb6, 0x6b, 0x77, 0x59, 0x10, 0xa4, 0x20, 0x44, 0xbd, 0xda, 0x22, 0xd6, 0xef, 0xe1, 0xbf, 0x10, - 0xc0, 0xd9, 0x61, 0x57, 0x05, 0xd4, 0x1f, 0x2c, 0x56, 0x3a, 0x59, 0xae, 0x74, 0xf2, 0xbe, 0xd2, - 0xc9, 0xe3, 0x5a, 0x57, 0x96, 0x6b, 0x5d, 0x79, 0x5d, 0xeb, 0xca, 0xdd, 0xc5, 0xde, 0x8d, 0x39, - 0x4c, 0x65, 0x8a, 0xbc, 0x83, 0x69, 0xb4, 0x8b, 0xe9, 0xec, 0x9c, 0x3e, 0x1c, 0xfe, 0x87, 0x7c, - 0x0b, 0x5e, 0x2d, 0x7f, 0x98, 0xb3, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb8, 0xfe, 0x4d, 0x2d, - 0x34, 0x02, 0x00, 0x00, +func init() { proto.RegisterFile("osmosis/tokenfactory/params.proto", fileDescriptor_09c297db7c49d1cf) } + +var fileDescriptor_09c297db7c49d1cf = []byte{ + // 457 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x52, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x8d, 0x49, 0x14, 0xc4, 0x02, 0xa2, 0x98, 0x22, 0x9c, 0x1c, 0xec, 0xd4, 0x15, 0x52, 0x38, + 0xd4, 0xab, 0x16, 0xc4, 0x81, 0x1b, 0x31, 0x02, 0x7a, 0x40, 0xaa, 0x7c, 0x41, 0x82, 0x83, 0xb5, + 0xf1, 0x8e, 0x9d, 0x55, 0xe2, 0x9d, 0xc8, 0xbb, 0x69, 0xc9, 0x5f, 0xc0, 0x85, 0x8f, 0xe0, 0x4b, + 0x72, 0xec, 0x91, 0x93, 0x41, 0xc9, 0x1f, 0xf4, 0x0b, 0x50, 0xd6, 0xae, 0x9a, 0x94, 0x9c, 0xbc, + 0xf3, 0xde, 0xcc, 0x78, 0xde, 0x9b, 0x21, 0x07, 0xa8, 0x72, 0x54, 0x42, 0x51, 0x8d, 0x63, 0x90, + 0x29, 0x4b, 0x34, 0x16, 0x73, 0x3a, 0x65, 0x05, 0xcb, 0x55, 0x30, 0x2d, 0x50, 0xa3, 0xbd, 0x5f, + 0xa7, 0x04, 0x9b, 0x29, 0x5d, 0x37, 0x31, 0x30, 0x1d, 0x32, 0x05, 0xf4, 0xfc, 0x78, 0x08, 0x9a, + 0x1d, 0xd3, 0x04, 0x85, 0xac, 0xaa, 0xba, 0x9d, 0x8a, 0x8f, 0x4d, 0x44, 0xab, 0xa0, 0xa6, 0xf6, + 0x33, 0xcc, 0xb0, 0xc2, 0xd7, 0xaf, 0x0a, 0xf5, 0xbf, 0x92, 0x47, 0x9f, 0x47, 0x42, 0xc3, 0x44, + 0x28, 0x0d, 0xfc, 0x23, 0xe2, 0xd8, 0x3e, 0x24, 0x77, 0x13, 0xe4, 0x10, 0x0b, 0xee, 0x58, 0x3d, + 0xab, 0xdf, 0x1a, 0x90, 0x65, 0xe9, 0xb5, 0x43, 0xe4, 0x70, 0xfa, 0x2e, 0x6a, 0xaf, 0xa9, 0x53, + 0x6e, 0x1f, 0x92, 0x87, 0x1c, 0x24, 0xe6, 0x71, 0x52, 0x00, 0xd3, 0x58, 0x38, 0x77, 0x7a, 0x56, + 0xff, 0x5e, 0xf4, 0xc0, 0x80, 0x61, 0x85, 0xf9, 0x3f, 0x9a, 0xa4, 0x7d, 0x66, 0x44, 0xd9, 0x3f, + 0x2d, 0x62, 0x6f, 0x14, 0x08, 0x94, 0x71, 0x0a, 0xe0, 0x58, 0xbd, 0x66, 0xff, 0xfe, 0x49, 0x27, + 0xa8, 0x27, 0x5d, 0xcb, 0x0a, 0x6a, 0x59, 0x41, 0x88, 0x42, 0x0e, 0x3e, 0x2d, 0x4a, 0xaf, 0x71, + 0x55, 0x7a, 0x9d, 0x39, 0xcb, 0x27, 0x6f, 0xfc, 0xff, 0x5b, 0xf8, 0xbf, 0xfe, 0x78, 0xfd, 0x4c, + 0xe8, 0xd1, 0x6c, 0x18, 0x24, 0x98, 0xd7, 0x9a, 0xeb, 0xcf, 0x91, 0xe2, 0x63, 0xaa, 0xe7, 0x53, + 0x50, 0xa6, 0x9b, 0x8a, 0xf6, 0x6e, 0xe6, 0x13, 0x28, 0xdf, 0x03, 0xd8, 0x29, 0xe9, 0xde, 0x6a, + 0x9a, 0x31, 0x15, 0x27, 0x28, 0xd5, 0x2c, 0x07, 0xa3, 0xaa, 0x35, 0x78, 0xb1, 0x28, 0x3d, 0xeb, + 0xaa, 0xf4, 0x0e, 0x76, 0x0e, 0xb1, 0x91, 0xef, 0x47, 0xcf, 0xb6, 0x7e, 0xf0, 0x81, 0xa9, 0xb0, + 0x62, 0xec, 0x13, 0xf2, 0x34, 0x05, 0x88, 0x13, 0x9c, 0x4c, 0x60, 0xbd, 0xcb, 0x98, 0x71, 0x5e, + 0x80, 0x52, 0x4e, 0xd3, 0x18, 0xf7, 0x24, 0x05, 0x08, 0xaf, 0xb9, 0xb7, 0x15, 0x65, 0x47, 0xe4, + 0xf1, 0xc5, 0xcd, 0x72, 0xe2, 0x11, 0xe2, 0x58, 0x39, 0x2d, 0x63, 0xd9, 0xf3, 0x60, 0xd7, 0x7d, + 0x04, 0xb7, 0x76, 0x19, 0xed, 0x5d, 0x6c, 0x03, 0x6a, 0x70, 0xb6, 0x58, 0xba, 0xd6, 0xe5, 0xd2, + 0xb5, 0xfe, 0x2e, 0x5d, 0xeb, 0xfb, 0xca, 0x6d, 0x5c, 0xae, 0xdc, 0xc6, 0xef, 0x95, 0xdb, 0xf8, + 0xf2, 0x7a, 0xc3, 0x45, 0x09, 0x33, 0x5d, 0xa0, 0x3c, 0xc2, 0x22, 0xbb, 0x7e, 0xd3, 0xf3, 0x57, + 0xf4, 0xdb, 0xf6, 0xc1, 0x1a, 0x67, 0x87, 0x6d, 0x73, 0x49, 0x2f, 0xff, 0x05, 0x00, 0x00, 0xff, + 0xff, 0x0e, 0x4e, 0x8c, 0xba, 0xd5, 0x02, 0x00, 0x00, +} + +func (m *WhitelistedHook) 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 *WhitelistedHook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WhitelistedHook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DenomCreator) > 0 { + i -= len(m.DenomCreator) + copy(dAtA[i:], m.DenomCreator) + i = encodeVarintParams(dAtA, i, uint64(len(m.DenomCreator))) + i-- + dAtA[i] = 0x12 + } + if m.CodeID != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.CodeID)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -153,6 +255,20 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.WhitelistedHooks) > 0 { + for iNdEx := len(m.WhitelistedHooks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.WhitelistedHooks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintParams(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } if len(m.FeeCollectorAddress) > 0 { i -= len(m.FeeCollectorAddress) copy(dAtA[i:], m.FeeCollectorAddress) @@ -193,6 +309,22 @@ func encodeVarintParams(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *WhitelistedHook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.CodeID != 0 { + n += 1 + sovParams(uint64(m.CodeID)) + } + l = len(m.DenomCreator) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + return n +} + func (m *Params) Size() (n int) { if m == nil { return 0 @@ -212,6 +344,12 @@ func (m *Params) Size() (n int) { if l > 0 { n += 1 + l + sovParams(uint64(l)) } + if len(m.WhitelistedHooks) > 0 { + for _, e := range m.WhitelistedHooks { + l = e.Size() + n += 1 + l + sovParams(uint64(l)) + } + } return n } @@ -221,6 +359,107 @@ func sovParams(x uint64) (n int) { func sozParams(x uint64) (n int) { return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *WhitelistedHook) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WhitelistedHook: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WhitelistedHook: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CodeID", wireType) + } + m.CodeID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CodeID |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DenomCreator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DenomCreator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Params) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -335,6 +574,40 @@ func (m *Params) Unmarshal(dAtA []byte) error { } m.FeeCollectorAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WhitelistedHooks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WhitelistedHooks = append(m.WhitelistedHooks, &WhitelistedHook{}) + if err := m.WhitelistedHooks[len(m.WhitelistedHooks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipParams(dAtA[iNdEx:]) diff --git a/x/tokenfactory/types/query.pb.go b/x/tokenfactory/types/query.pb.go index 2e62dcd7f..5e6fb2b06 100644 --- a/x/tokenfactory/types/query.pb.go +++ b/x/tokenfactory/types/query.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" @@ -17,6 +13,9 @@ import ( 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. @@ -419,50 +418,50 @@ func init() { } var fileDescriptor_6f22013ad0f72e3f = []byte{ - // 673 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x95, 0xcf, 0x4f, 0x13, 0x41, - 0x14, 0xc7, 0x3b, 0xa8, 0x55, 0x46, 0xd1, 0x30, 0xa0, 0xc1, 0x06, 0xb7, 0x32, 0x12, 0x03, 0x09, - 0x76, 0x04, 0x89, 0x07, 0x91, 0x08, 0x8b, 0x31, 0x26, 0x86, 0x04, 0x57, 0x62, 0x22, 0x31, 0x69, - 0xa6, 0xdd, 0xa1, 0x34, 0xb0, 0xfb, 0xca, 0xcc, 0x94, 0xd8, 0x10, 0x2e, 0x98, 0x78, 0x36, 0xf1, - 0xe8, 0xff, 0xe0, 0xdf, 0xc1, 0x91, 0x84, 0x8b, 0xa7, 0xc6, 0x80, 0x7f, 0x41, 0x0f, 0x5e, 0xbc, - 0x98, 0xce, 0xce, 0xf2, 0xc3, 0x96, 0x4d, 0x85, 0xc4, 0xdb, 0x76, 0xe6, 0xbd, 0xef, 0xfb, 0x7e, - 0xe6, 0xbd, 0x97, 0xe2, 0x11, 0x50, 0x01, 0xa8, 0xb2, 0x62, 0x1a, 0x56, 0x45, 0xb8, 0xcc, 0x8b, - 0x1a, 0x64, 0x8d, 0x6d, 0x8c, 0x17, 0x84, 0xe6, 0xe3, 0x6c, 0xbd, 0x2a, 0x64, 0x2d, 0x57, 0x91, - 0xa0, 0x81, 0x0c, 0xda, 0xc8, 0xdc, 0xf1, 0xc8, 0x9c, 0x8d, 0xcc, 0xf4, 0x97, 0xa0, 0x04, 0x26, - 0x90, 0x35, 0xbf, 0xa2, 0x9c, 0xcc, 0x60, 0x09, 0xa0, 0xb4, 0x26, 0x18, 0xaf, 0x94, 0x19, 0x0f, - 0x43, 0xd0, 0x5c, 0x97, 0x21, 0x54, 0xf6, 0x76, 0x32, 0xb1, 0x36, 0xaf, 0xea, 0x15, 0x90, 0x65, - 0x5d, 0x9b, 0x17, 0x9a, 0xfb, 0x5c, 0x73, 0x9b, 0x35, 0x9a, 0x98, 0x55, 0xe1, 0x92, 0x07, 0xb6, - 0x00, 0xed, 0xc7, 0xe4, 0x75, 0x93, 0x60, 0xc1, 0x1c, 0x7a, 0x62, 0xbd, 0x2a, 0x94, 0xa6, 0xef, - 0x70, 0xdf, 0x89, 0x53, 0x55, 0x81, 0x50, 0x09, 0xe2, 0xe2, 0x74, 0x94, 0x3c, 0x80, 0xee, 0xa2, - 0x91, 0xab, 0x13, 0xc3, 0xb9, 0x24, 0xe0, 0x5c, 0x94, 0xed, 0x5e, 0xdc, 0xa9, 0x67, 0x53, 0x9e, - 0xcd, 0xa4, 0x1f, 0x11, 0xa6, 0x46, 0xfb, 0xb9, 0x08, 0x21, 0x98, 0xfd, 0x9b, 0xc0, 0x3a, 0x20, - 0x63, 0xf8, 0x72, 0x51, 0x0a, 0xae, 0x41, 0x9a, 0x5a, 0xdd, 0x2e, 0x69, 0xd4, 0xb3, 0xd7, 0x6b, - 0x3c, 0x58, 0x7b, 0x42, 0xed, 0x05, 0xf5, 0xe2, 0x10, 0xc2, 0xf0, 0x15, 0x55, 0x2d, 0xf8, 0x4d, - 0xc5, 0x81, 0x2e, 0x13, 0xde, 0xd7, 0xa8, 0x67, 0x6f, 0x44, 0xe1, 0xf1, 0x0d, 0xf5, 0x0e, 0x83, - 0xe8, 0x37, 0x84, 0xef, 0x25, 0xba, 0xb0, 0xc4, 0x9f, 0x10, 0x26, 0x87, 0xaf, 0x9c, 0x0f, 0xec, - 0xb5, 0xc5, 0x9f, 0x4c, 0xc6, 0x6f, 0x2f, 0xed, 0x0e, 0x35, 0x9f, 0xa3, 0x51, 0xcf, 0xde, 0x8e, - 0xdc, 0xb5, 0xaa, 0x53, 0xaf, 0xb7, 0xa5, 0xb1, 0x74, 0x1e, 0xdf, 0x39, 0xf2, 0xab, 0x5e, 0x48, - 0x08, 0xe6, 0x22, 0xf6, 0x33, 0x3d, 0x18, 0x7d, 0x85, 0x9d, 0xd3, 0xe4, 0x2c, 0xf9, 0x28, 0x4e, - 0x9b, 0xa7, 0x6a, 0xf6, 0xfa, 0xc2, 0x48, 0xb7, 0xdb, 0xdb, 0xa8, 0x67, 0x7b, 0x22, 0xb9, 0xe8, - 0x9c, 0x7a, 0x36, 0x80, 0x6e, 0x23, 0x3c, 0x64, 0xd4, 0x5c, 0xb1, 0x0c, 0x52, 0xbc, 0x11, 0xa1, - 0xff, 0x12, 0x60, 0x75, 0xd6, 0xf7, 0xa5, 0x50, 0xea, 0x3f, 0x75, 0xb4, 0x68, 0xc7, 0xea, 0x14, - 0x0f, 0x96, 0x6a, 0x1a, 0xf7, 0x14, 0x21, 0xd4, 0x92, 0x17, 0x75, 0x9e, 0xfb, 0x7e, 0x6c, 0x65, - 0xa0, 0x51, 0xcf, 0xf6, 0x5b, 0x2b, 0xc7, 0xaf, 0xa9, 0x77, 0x2d, 0xfe, 0xdd, 0x54, 0x9a, 0x68, - 0xa4, 0xf1, 0x25, 0x53, 0x85, 0x7c, 0x45, 0x38, 0x1d, 0xcd, 0x37, 0x79, 0x98, 0x3c, 0x06, 0xad, - 0xeb, 0x95, 0x19, 0xff, 0x87, 0x8c, 0xc8, 0x38, 0x1d, 0xdb, 0xde, 0xfb, 0xf9, 0xa5, 0xeb, 0x3e, - 0x19, 0x66, 0x1d, 0xec, 0x36, 0xf9, 0x8d, 0xf0, 0xad, 0xf6, 0xe3, 0x47, 0x66, 0x3a, 0xa8, 0x9d, - 0xb8, 0x9a, 0x99, 0xd9, 0x73, 0x28, 0x58, 0x9a, 0xf7, 0x86, 0xe6, 0x2d, 0x59, 0x4c, 0xa6, 0x89, - 0xe6, 0x8b, 0xc5, 0xc7, 0x9b, 0x76, 0x38, 0xb6, 0xd8, 0x66, 0xdc, 0xf6, 0x2d, 0xd6, 0xba, 0x3f, - 0x64, 0x0f, 0xe1, 0xde, 0x96, 0xc1, 0x26, 0x53, 0x9d, 0xda, 0x6e, 0xb3, 0x5d, 0x99, 0xa7, 0x67, - 0x4b, 0xb6, 0xb8, 0x73, 0x06, 0x77, 0x9a, 0x4c, 0x75, 0x82, 0x9b, 0x5f, 0x96, 0x10, 0xe4, 0x2d, - 0xea, 0x11, 0x33, 0xf9, 0x85, 0xf0, 0xcd, 0xb6, 0xc3, 0x4d, 0x9e, 0x75, 0x60, 0x2e, 0x69, 0x35, - 0x33, 0x33, 0x67, 0x17, 0xb0, 0x84, 0x4b, 0x86, 0x70, 0x91, 0x78, 0xe7, 0x6f, 0x68, 0xc1, 0x14, - 0xca, 0x2b, 0x11, 0xfa, 0xf9, 0x15, 0x80, 0x55, 0x77, 0x61, 0x67, 0xdf, 0x41, 0xbb, 0xfb, 0x0e, - 0xfa, 0xb1, 0xef, 0xa0, 0xcf, 0x07, 0x4e, 0x6a, 0xf7, 0xc0, 0x49, 0x7d, 0x3f, 0x70, 0x52, 0x4b, - 0x8f, 0x4b, 0x65, 0xbd, 0x52, 0x2d, 0xe4, 0x8a, 0x10, 0xb0, 0x50, 0x54, 0xb5, 0x84, 0xf0, 0x01, - 0xc8, 0x52, 0xfc, 0xcd, 0x36, 0x26, 0xd9, 0x87, 0x93, 0x46, 0x74, 0xad, 0x22, 0x54, 0x21, 0x6d, - 0xfe, 0xfb, 0x1e, 0xfd, 0x09, 0x00, 0x00, 0xff, 0xff, 0xca, 0x76, 0xec, 0xdc, 0xda, 0x07, 0x00, - 0x00, + // 677 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x4f, 0x4f, 0x13, 0x4f, + 0x18, 0xee, 0xf2, 0xfb, 0x59, 0x65, 0x14, 0x0d, 0x03, 0x1a, 0x6c, 0x70, 0x2b, 0xa3, 0x31, 0x98, + 0xe0, 0x8e, 0x20, 0xf1, 0x00, 0x12, 0xa1, 0x18, 0x63, 0x62, 0x48, 0x60, 0x25, 0x1e, 0x88, 0x49, + 0x33, 0xed, 0x0e, 0xa5, 0x81, 0xdd, 0xb7, 0xcc, 0x4c, 0x89, 0x0d, 0xe1, 0x82, 0x89, 0x67, 0x13, + 0x8f, 0x7e, 0x07, 0x3f, 0x07, 0x47, 0x12, 0x2e, 0x9e, 0x1a, 0x03, 0x7e, 0x82, 0x1e, 0xbc, 0x78, + 0x31, 0x9d, 0x99, 0xe5, 0x8f, 0x2d, 0x9b, 0x5a, 0x12, 0x6f, 0xdb, 0x79, 0x9f, 0xf7, 0x79, 0x9f, + 0xe7, 0xfd, 0x93, 0xa2, 0x51, 0x90, 0x21, 0xc8, 0xb2, 0xa4, 0x0a, 0xd6, 0x79, 0xb4, 0xca, 0x8a, + 0x0a, 0x44, 0x8d, 0x6e, 0x8d, 0x17, 0xb8, 0x62, 0xe3, 0x74, 0xb3, 0xca, 0x45, 0xcd, 0xab, 0x08, + 0x50, 0x80, 0x87, 0x2d, 0xd2, 0x3b, 0x8d, 0xf4, 0x2c, 0x32, 0x33, 0x58, 0x82, 0x12, 0x68, 0x20, + 0x6d, 0x7e, 0x99, 0x9c, 0xcc, 0x70, 0x09, 0xa0, 0xb4, 0xc1, 0x29, 0xab, 0x94, 0x29, 0x8b, 0x22, + 0x50, 0x4c, 0x95, 0x21, 0x92, 0x36, 0x3a, 0xd2, 0xb6, 0x76, 0x85, 0x09, 0x16, 0xc6, 0x90, 0xc9, + 0x44, 0x79, 0xac, 0xaa, 0xd6, 0x40, 0x94, 0x55, 0x6d, 0x81, 0x2b, 0x16, 0x30, 0xc5, 0x4c, 0x16, + 0x19, 0x44, 0x78, 0xa9, 0xa9, 0x7c, 0x51, 0x53, 0xf9, 0x7c, 0xb3, 0xca, 0xa5, 0x22, 0x4b, 0x68, + 0xe0, 0xcc, 0xab, 0xac, 0x40, 0x24, 0x39, 0x9e, 0x42, 0x69, 0x53, 0x72, 0xc8, 0xb9, 0xeb, 0x8c, + 0x5e, 0x9d, 0x18, 0xf6, 0xda, 0x1a, 0x35, 0x59, 0xb9, 0xff, 0xf7, 0xea, 0xd9, 0x94, 0x6f, 0x33, + 0xc8, 0x07, 0x07, 0x11, 0xcd, 0xf9, 0x82, 0x47, 0x10, 0xce, 0xfd, 0x29, 0xc7, 0x56, 0xc6, 0x63, + 0xe8, 0x72, 0x51, 0x70, 0xa6, 0x40, 0xe8, 0x1a, 0xbd, 0x39, 0xdc, 0xa8, 0x67, 0xaf, 0xd7, 0x58, + 0xb8, 0x31, 0x45, 0x6c, 0x80, 0xf8, 0x31, 0x04, 0x53, 0x74, 0x45, 0x56, 0x0b, 0x41, 0x93, 0x71, + 0xa8, 0x47, 0xc3, 0x07, 0x1a, 0xf5, 0xec, 0x0d, 0x03, 0x8f, 0x23, 0xc4, 0x3f, 0x06, 0x91, 0xaf, + 0x0e, 0xba, 0x97, 0xa8, 0xc2, 0x3a, 0xfd, 0xe8, 0x20, 0x7c, 0xdc, 0xb2, 0x7c, 0x68, 0xc3, 0xd6, + 0xf6, 0xa4, 0x97, 0x34, 0x5f, 0xaf, 0x3d, 0x75, 0x6e, 0xa4, 0xd9, 0x8e, 0x46, 0x3d, 0x7b, 0xdb, + 0xa8, 0x6b, 0x65, 0x27, 0x7e, 0x7f, 0xcb, 0x94, 0xc8, 0x02, 0xba, 0x73, 0xa2, 0x57, 0xbe, 0x14, + 0x10, 0xce, 0x1b, 0xef, 0x5d, 0x35, 0x8c, 0xbc, 0x46, 0xee, 0x79, 0x74, 0xd6, 0xf9, 0x43, 0x94, + 0xd6, 0xad, 0x6a, 0xce, 0xf8, 0xbf, 0xd1, 0xde, 0x5c, 0x7f, 0xa3, 0x9e, 0xed, 0x33, 0x74, 0xe6, + 0x9d, 0xf8, 0x16, 0x40, 0x76, 0x1d, 0x34, 0xa2, 0xd9, 0x72, 0x7c, 0x15, 0x04, 0x7f, 0xc3, 0xa3, + 0xe0, 0x15, 0xc0, 0xfa, 0x5c, 0x10, 0x08, 0x2e, 0xe5, 0x3f, 0x9a, 0x68, 0xd1, 0xae, 0xd5, 0x39, + 0x1a, 0xac, 0xab, 0x19, 0xd4, 0x57, 0x84, 0x48, 0x09, 0x56, 0x54, 0x79, 0x16, 0x04, 0xb1, 0x94, + 0xa1, 0x46, 0x3d, 0x3b, 0x68, 0xa5, 0x9c, 0x0e, 0x13, 0xff, 0x5a, 0xfc, 0xbb, 0xc9, 0x34, 0xd1, + 0x48, 0xa3, 0x4b, 0xba, 0x0a, 0xfe, 0xe2, 0xa0, 0xb4, 0xd9, 0x6f, 0xfc, 0x38, 0x79, 0x0d, 0x5a, + 0xcf, 0x2a, 0x33, 0xfe, 0x17, 0x19, 0x46, 0x38, 0x19, 0xdb, 0x3d, 0xf8, 0xf1, 0xb9, 0xe7, 0x01, + 0xbe, 0x4f, 0x13, 0xcf, 0xdb, 0x1c, 0x19, 0xfe, 0xe5, 0xa0, 0x5b, 0xed, 0xd7, 0x0f, 0xcf, 0x76, + 0x50, 0x3b, 0xf1, 0x34, 0x33, 0x73, 0x17, 0x60, 0xb0, 0x6e, 0xde, 0x69, 0x37, 0x6f, 0xf1, 0x72, + 0xb2, 0x1b, 0xb3, 0x5f, 0x34, 0x7e, 0xde, 0xb6, 0xcb, 0xb1, 0x43, 0xb7, 0xe3, 0xb1, 0xef, 0xd0, + 0xd6, 0xfb, 0xc1, 0x07, 0x0e, 0xea, 0x6f, 0x59, 0x6c, 0x3c, 0xdd, 0xa9, 0xec, 0x36, 0xd7, 0x95, + 0x79, 0xd6, 0x5d, 0xb2, 0xb5, 0x3b, 0xaf, 0xed, 0xce, 0xe0, 0xe9, 0x4e, 0xec, 0xe6, 0x57, 0x05, + 0x84, 0x79, 0x6b, 0xf5, 0xc4, 0x33, 0xfe, 0xe9, 0xa0, 0x9b, 0x6d, 0x97, 0x1b, 0x3f, 0xef, 0x40, + 0x5c, 0xd2, 0x69, 0x66, 0x66, 0xbb, 0x27, 0xb0, 0x0e, 0x57, 0xb4, 0xc3, 0x65, 0xec, 0x5f, 0x7c, + 0xa0, 0x05, 0x5d, 0x28, 0x2f, 0x79, 0x14, 0xe4, 0xd7, 0x00, 0xd6, 0x73, 0x8b, 0x7b, 0x87, 0xae, + 0xb3, 0x7f, 0xe8, 0x3a, 0xdf, 0x0f, 0x5d, 0xe7, 0xd3, 0x91, 0x9b, 0xda, 0x3f, 0x72, 0x53, 0xdf, + 0x8e, 0xdc, 0xd4, 0xca, 0xd3, 0x52, 0x59, 0xad, 0x55, 0x0b, 0x5e, 0x11, 0x42, 0x1a, 0xf1, 0xaa, + 0x12, 0x10, 0x3d, 0x02, 0x51, 0x8a, 0xbf, 0xe9, 0xd6, 0x24, 0x7d, 0x7f, 0x56, 0x88, 0xaa, 0x55, + 0xb8, 0x2c, 0xa4, 0xf5, 0x7f, 0xde, 0x93, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7f, 0xf0, 0xc4, + 0xcf, 0xca, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/tokenfactory/types/tx.go b/x/tokenfactory/types/tx.go index b453ddb2f..3925b0b5a 100644 --- a/x/tokenfactory/types/tx.go +++ b/x/tokenfactory/types/tx.go @@ -32,9 +32,5 @@ func (msg *MsgUpdateParams) Validate() error { return errorsmod.Wrap(err, "authority is invalid") } - if _, err := sdk.AccAddressFromBech32(msg.Params.FeeCollectorAddress); err != nil { - return errorsmod.Wrap(err, "fee_collector_address is invalid") - } - - return nil + return msg.Params.Validate() } diff --git a/x/tokenfactory/types/tx.pb.go b/x/tokenfactory/types/tx.pb.go index 9e48c15bd..e20ba1f2c 100644 --- a/x/tokenfactory/types/tx.pb.go +++ b/x/tokenfactory/types/tx.pb.go @@ -6,10 +6,6 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" @@ -21,6 +17,9 @@ import ( 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. @@ -857,74 +856,74 @@ func init() { } var fileDescriptor_283b6c9a90a846b4 = []byte{ - // 1062 bytes of a gzipped FileDescriptorProto + // 1064 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xce, 0xf6, 0x47, 0xda, 0x4c, 0x12, 0x92, 0x6c, 0x42, 0xe3, 0x2c, 0xa9, 0xb7, 0x2c, 0x14, - 0x35, 0x11, 0xf6, 0xca, 0x69, 0x88, 0xc0, 0x12, 0x12, 0x75, 0x51, 0xe8, 0x01, 0x4b, 0xd5, 0x26, - 0x5c, 0x50, 0x25, 0x6b, 0x6c, 0x4f, 0xd6, 0x2b, 0xb3, 0x33, 0xee, 0xcc, 0x38, 0x69, 0x6e, 0x15, - 0xdc, 0x38, 0xf1, 0x1f, 0x20, 0x2e, 0x88, 0x63, 0x0e, 0xfc, 0x11, 0xe1, 0x56, 0x71, 0xe2, 0xb4, - 0x42, 0xc9, 0x21, 0x07, 0x4e, 0xf8, 0x2f, 0x40, 0xf3, 0x63, 0xd7, 0xde, 0xb5, 0x15, 0xdb, 0x07, - 0xd4, 0x4b, 0xe2, 0x9d, 0xf7, 0x7d, 0x6f, 0xdf, 0xf7, 0xcd, 0x9b, 0x37, 0x36, 0x78, 0x48, 0x58, - 0x48, 0x58, 0xc0, 0x5c, 0x4e, 0xda, 0x08, 0x1f, 0xc1, 0x06, 0x27, 0xf4, 0xd4, 0x3d, 0x2e, 0xd5, - 0x11, 0x87, 0x25, 0x97, 0xbf, 0x2a, 0x76, 0x28, 0xe1, 0xc4, 0xdc, 0xd4, 0xb0, 0xe2, 0x20, 0xac, - 0xa8, 0x61, 0xd6, 0x0a, 0x0c, 0x03, 0x4c, 0x5c, 0xf9, 0x57, 0x11, 0xac, 0x7c, 0x43, 0x32, 0xdc, - 0x3a, 0xc4, 0xed, 0x24, 0x9d, 0x78, 0x18, 0x8a, 0x33, 0x94, 0xc4, 0x1b, 0x24, 0xc0, 0x3a, 0xbe, - 0xae, 0xe3, 0x21, 0xf3, 0xdd, 0xe3, 0x92, 0xf8, 0xa7, 0x03, 0x1b, 0x2a, 0x50, 0x93, 0x4f, 0xae, - 0x7a, 0xd0, 0xa1, 0x35, 0x9f, 0xf8, 0x44, 0xad, 0x8b, 0x4f, 0x7a, 0x75, 0xeb, 0x5a, 0x85, 0x1d, - 0x48, 0x61, 0xa8, 0x13, 0x38, 0x3f, 0x1b, 0xe0, 0x9d, 0x2a, 0xf3, 0x9f, 0x52, 0x04, 0x39, 0xfa, - 0x12, 0x61, 0x12, 0x9a, 0x5b, 0x60, 0x96, 0x21, 0xdc, 0x44, 0x34, 0x67, 0x3c, 0x30, 0x1e, 0xcd, - 0x55, 0x56, 0x7a, 0x91, 0xbd, 0x78, 0x0a, 0xc3, 0xef, 0xca, 0x8e, 0x5a, 0x77, 0x3c, 0x0d, 0x30, - 0x5d, 0x70, 0x97, 0x75, 0xeb, 0x4d, 0x41, 0xcb, 0xdd, 0x90, 0xe0, 0xd5, 0x5e, 0x64, 0x2f, 0x69, - 0xb0, 0x8e, 0x38, 0x5e, 0x02, 0x2a, 0x97, 0xbe, 0xbf, 0x3a, 0xdb, 0xd6, 0xec, 0x1f, 0xaf, 0xce, - 0xb6, 0xdf, 0x1f, 0x59, 0x69, 0x43, 0x56, 0x53, 0x50, 0xec, 0x17, 0xe0, 0x5e, 0xba, 0x40, 0x0f, - 0xb1, 0x0e, 0xc1, 0x0c, 0x99, 0x15, 0xb0, 0x84, 0xd1, 0x49, 0x4d, 0x52, 0x6b, 0xaa, 0x08, 0x55, - 0xb1, 0xd5, 0x8b, 0xec, 0x7b, 0xaa, 0x88, 0x0c, 0xc0, 0xf1, 0x16, 0x31, 0x3a, 0x39, 0x14, 0x0b, - 0x32, 0x97, 0xf3, 0x8f, 0x01, 0xee, 0x54, 0x99, 0x5f, 0x0d, 0x30, 0x9f, 0x46, 0xf8, 0x33, 0x30, - 0x0b, 0x43, 0xd2, 0xc5, 0x5c, 0xca, 0x9e, 0xdf, 0xd9, 0x28, 0xea, 0x6d, 0x11, 0x9b, 0x1b, 0x37, - 0x49, 0xf1, 0x29, 0x09, 0x70, 0xe5, 0xdd, 0xf3, 0xc8, 0x9e, 0xe9, 0x67, 0x52, 0x34, 0xc7, 0xd3, - 0x7c, 0xf3, 0x0b, 0xb0, 0x18, 0x06, 0x98, 0x1f, 0x92, 0x27, 0xcd, 0x26, 0x45, 0x8c, 0xe5, 0x6e, - 0x66, 0x25, 0x88, 0x70, 0x8d, 0x93, 0x1a, 0x54, 0x00, 0xc7, 0x4b, 0x13, 0xca, 0x5b, 0x19, 0x4f, - 0x37, 0x46, 0x7a, 0x2a, 0x38, 0xce, 0x0a, 0x58, 0xd2, 0x62, 0x63, 0x13, 0x9d, 0x7f, 0x95, 0x01, - 0x95, 0x2e, 0xc5, 0x6f, 0xc7, 0x80, 0x7d, 0xb0, 0x54, 0xef, 0x52, 0xbc, 0x4f, 0x49, 0x98, 0xb6, - 0x60, 0xb3, 0x17, 0xd9, 0x39, 0xc5, 0x11, 0x80, 0xda, 0x11, 0x25, 0x61, 0xdf, 0x84, 0x2c, 0x69, - 0x42, 0x1b, 0x04, 0x4b, 0xdb, 0x20, 0x24, 0x27, 0x36, 0xfc, 0xa1, 0xcf, 0x41, 0x0b, 0x62, 0x1f, - 0x3d, 0x69, 0x86, 0xc1, 0x54, 0x6e, 0x7c, 0x04, 0x6e, 0x0f, 0x1e, 0x82, 0xe5, 0x5e, 0x64, 0x2f, - 0x28, 0xa4, 0xee, 0x3a, 0x15, 0x36, 0x4b, 0x60, 0x4e, 0x34, 0x24, 0x14, 0xf9, 0xb5, 0xca, 0xb5, - 0x5e, 0x64, 0x2f, 0xf7, 0x7b, 0x55, 0x86, 0x1c, 0xef, 0x2e, 0x46, 0x27, 0xb2, 0x8a, 0x49, 0x4f, - 0x8c, 0xac, 0xbb, 0xa0, 0xd8, 0x39, 0x75, 0x62, 0xfa, 0x52, 0x12, 0x95, 0x17, 0x06, 0x58, 0xab, - 0x32, 0xff, 0x00, 0xf1, 0x0a, 0x3a, 0x22, 0x14, 0x1d, 0x20, 0xdc, 0x7c, 0x46, 0x48, 0xfb, 0xff, - 0xd0, 0xfa, 0x39, 0x58, 0x6c, 0x10, 0xcc, 0x29, 0x6c, 0x70, 0xb9, 0x6b, 0x5a, 0x6f, 0xae, 0x17, - 0xd9, 0x6b, 0x0a, 0x9f, 0x0a, 0x3b, 0xde, 0x42, 0xfc, 0x2c, 0x76, 0xb4, 0xfc, 0x69, 0x46, 0xf7, - 0xa3, 0x91, 0xba, 0x19, 0xe2, 0x85, 0xba, 0x94, 0x22, 0x90, 0x85, 0x16, 0x21, 0x6d, 0x27, 0x0f, - 0x36, 0x47, 0x69, 0x4c, 0x4c, 0xf8, 0xc5, 0x00, 0xab, 0x0a, 0x20, 0x47, 0x40, 0x15, 0x71, 0xd8, - 0x84, 0x1c, 0x4e, 0xe3, 0x81, 0x07, 0xee, 0x86, 0x9a, 0xa6, 0xfb, 0xff, 0x7e, 0xbf, 0xff, 0x71, - 0x3b, 0xe9, 0xff, 0x38, 0x77, 0x65, 0x5d, 0x9f, 0x01, 0x3d, 0x1a, 0x63, 0xb2, 0xe3, 0x25, 0x79, - 0xca, 0xf3, 0x03, 0x82, 0x9d, 0xfb, 0xe0, 0xbd, 0x11, 0x25, 0x26, 0x12, 0xa2, 0x1b, 0x60, 0xb9, - 0xca, 0xfc, 0x7d, 0x42, 0x1b, 0xe8, 0x90, 0x42, 0xcc, 0x8e, 0x10, 0x7d, 0x3b, 0xa7, 0xd7, 0x03, - 0xab, 0x5c, 0x17, 0x30, 0x7c, 0x82, 0x1f, 0xf4, 0x22, 0x7b, 0x53, 0xf1, 0x62, 0x50, 0xe6, 0x14, - 0x8f, 0x22, 0x9b, 0x5f, 0x83, 0x95, 0x78, 0xb9, 0x3f, 0x16, 0x6f, 0xc9, 0x8c, 0xf9, 0x5e, 0x64, - 0x5b, 0x99, 0x8c, 0x83, 0xa3, 0x71, 0x98, 0x58, 0x7e, 0x9c, 0x69, 0xa4, 0x0f, 0x46, 0x36, 0xd2, - 0x91, 0xb0, 0xb2, 0x10, 0xb3, 0x1d, 0x0b, 0xe4, 0xb2, 0xfe, 0x26, 0xe6, 0x9f, 0x1b, 0x72, 0x7c, - 0x7c, 0xd3, 0x69, 0x42, 0x8e, 0x9e, 0xcb, 0xcb, 0xd4, 0xdc, 0x03, 0x73, 0xb0, 0xcb, 0x5b, 0x84, - 0x06, 0xfc, 0x54, 0xdb, 0x9f, 0xfb, 0xf3, 0xf7, 0xc2, 0x9a, 0xb6, 0x55, 0xd7, 0x72, 0xc0, 0x69, - 0x80, 0x7d, 0xaf, 0x0f, 0x35, 0xbf, 0x02, 0xb3, 0xea, 0x3a, 0xd6, 0x1b, 0xf1, 0x61, 0xf1, 0xba, - 0x6f, 0x1d, 0x45, 0xf5, 0xb6, 0xca, 0x9c, 0xd8, 0x93, 0xdf, 0xae, 0xce, 0xb6, 0x0d, 0x4f, 0xd3, - 0xcb, 0xbb, 0x42, 0x65, 0x3f, 0xb1, 0x9c, 0x14, 0x01, 0xe6, 0x88, 0x36, 0x5a, 0x30, 0xc0, 0x2f, - 0xbb, 0x88, 0x06, 0x88, 0xb9, 0x99, 0xb2, 0x9d, 0x0d, 0xb0, 0x9e, 0x59, 0x8a, 0x55, 0xee, 0xfc, - 0x7a, 0x07, 0xdc, 0xac, 0x32, 0xdf, 0x7c, 0x09, 0xe6, 0x07, 0xbf, 0x1c, 0x7c, 0x7c, 0x7d, 0x81, - 0xe9, 0x9b, 0xda, 0xda, 0x9d, 0x06, 0x9d, 0xdc, 0xeb, 0x2f, 0xc0, 0x2d, 0x79, 0x1f, 0x3f, 0x1c, - 0xcb, 0x16, 0x30, 0xab, 0x30, 0x11, 0x6c, 0x30, 0xbb, 0xbc, 0xec, 0xc6, 0x67, 0x17, 0xb0, 0x09, - 0xb2, 0x0f, 0xde, 0x23, 0xd2, 0xae, 0x81, 0x3b, 0x64, 0x02, 0xbb, 0xfa, 0xe8, 0x49, 0xec, 0x1a, - 0x1e, 0xea, 0xe6, 0x6b, 0x03, 0x2c, 0x0f, 0x0d, 0xb3, 0xd2, 0xd8, 0x54, 0x59, 0x8a, 0xf5, 0xd9, - 0xd4, 0x94, 0xa4, 0x84, 0x1f, 0x0c, 0xb0, 0x32, 0x7c, 0xa9, 0xec, 0x4c, 0x92, 0x30, 0xcd, 0xb1, - 0xca, 0xd3, 0x73, 0x92, 0x2a, 0x4e, 0xc0, 0x62, 0x7a, 0x22, 0x16, 0xc7, 0x26, 0x4b, 0xe1, 0xad, - 0xbd, 0xe9, 0xf0, 0xc9, 0x8b, 0x39, 0x58, 0x48, 0x4d, 0x83, 0xf1, 0x3d, 0x33, 0x08, 0xb7, 0x3e, - 0x99, 0x0a, 0x1e, 0xbf, 0xd5, 0xba, 0xfd, 0x5a, 0x4c, 0x80, 0xca, 0xf3, 0xf3, 0x8b, 0xbc, 0xf1, - 0xe6, 0x22, 0x6f, 0xfc, 0x7d, 0x91, 0x37, 0x7e, 0xba, 0xcc, 0xcf, 0xbc, 0xb9, 0xcc, 0xcf, 0xfc, - 0x75, 0x99, 0x9f, 0xf9, 0x76, 0xcf, 0x0f, 0x78, 0xab, 0x5b, 0x2f, 0x36, 0x48, 0xe8, 0x62, 0xd4, - 0xe5, 0x94, 0xe0, 0x02, 0xa1, 0x7e, 0xfc, 0xd9, 0x3d, 0xde, 0x75, 0x5f, 0xa5, 0xa7, 0x20, 0x3f, - 0xed, 0x20, 0x56, 0x9f, 0x95, 0x3f, 0x0d, 0x1e, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x09, 0x23, - 0x7c, 0x64, 0x29, 0x0d, 0x00, 0x00, + 0x14, 0xce, 0xf6, 0x47, 0x9a, 0x4c, 0x12, 0x92, 0x6c, 0x42, 0xe3, 0x2c, 0xa9, 0xb7, 0x2c, 0x2a, + 0x6a, 0x23, 0xbc, 0x2b, 0xa7, 0x21, 0x02, 0x4b, 0x08, 0xea, 0xa2, 0xa8, 0x07, 0x2c, 0x55, 0x9b, + 0x70, 0x41, 0x95, 0xac, 0xb1, 0x3d, 0xd9, 0xac, 0xcc, 0xce, 0xb8, 0x33, 0xe3, 0xa4, 0xb9, 0x55, + 0x70, 0xe3, 0xc4, 0x7f, 0x80, 0xb8, 0x20, 0x8e, 0x39, 0xf0, 0x07, 0x70, 0x2c, 0xb7, 0x8a, 0x13, + 0xa7, 0x15, 0x4a, 0x0e, 0x39, 0x70, 0xc2, 0x7f, 0x01, 0x9a, 0x1f, 0xbb, 0xf6, 0xae, 0x2d, 0x6c, + 0x1f, 0xaa, 0x5e, 0x5a, 0xef, 0xbc, 0xef, 0x7b, 0xfb, 0xbe, 0x6f, 0xde, 0xbc, 0xd9, 0x80, 0x7b, + 0x84, 0x45, 0x84, 0x85, 0xcc, 0xe3, 0xa4, 0x8d, 0xf0, 0x11, 0x6c, 0x72, 0x42, 0xcf, 0xbc, 0x93, + 0x72, 0x03, 0x71, 0x58, 0xf6, 0xf8, 0x0b, 0xb7, 0x43, 0x09, 0x27, 0xe6, 0x96, 0x86, 0xb9, 0x83, + 0x30, 0x57, 0xc3, 0xac, 0x55, 0x18, 0x85, 0x98, 0x78, 0xf2, 0x5f, 0x45, 0xb0, 0x8a, 0x4d, 0xc9, + 0xf0, 0x1a, 0x10, 0xb7, 0xd3, 0x74, 0xe2, 0x61, 0x28, 0xce, 0x50, 0x1a, 0x6f, 0x92, 0x10, 0xeb, + 0xf8, 0x86, 0x8e, 0x47, 0x2c, 0xf0, 0x4e, 0xca, 0xe2, 0x3f, 0x1d, 0xd8, 0x54, 0x81, 0xba, 0x7c, + 0xf2, 0xd4, 0x83, 0x0e, 0xad, 0x07, 0x24, 0x20, 0x6a, 0x5d, 0xfc, 0xd2, 0xab, 0xef, 0x8f, 0x54, + 0xd8, 0x81, 0x14, 0x46, 0x9a, 0xe8, 0xfc, 0x64, 0x80, 0x77, 0x6a, 0x2c, 0x78, 0x4c, 0x11, 0xe4, + 0xe8, 0x4b, 0x84, 0x49, 0x64, 0x3e, 0x00, 0xb3, 0x0c, 0xe1, 0x16, 0xa2, 0x05, 0xe3, 0xae, 0x71, + 0x7f, 0xbe, 0xba, 0xda, 0x8b, 0xed, 0xa5, 0x33, 0x18, 0x7d, 0x5b, 0x71, 0xd4, 0xba, 0xe3, 0x6b, + 0x80, 0xe9, 0x81, 0x39, 0xd6, 0x6d, 0xb4, 0x04, 0xad, 0x70, 0x4d, 0x82, 0xd7, 0x7a, 0xb1, 0xbd, + 0xac, 0xc1, 0x3a, 0xe2, 0xf8, 0x29, 0xa8, 0x52, 0xfe, 0xee, 0xea, 0x7c, 0x5b, 0xb3, 0x7f, 0xb8, + 0x3a, 0xdf, 0x1e, 0x5d, 0x61, 0x53, 0x56, 0x53, 0x52, 0xec, 0x67, 0xe0, 0x76, 0xb6, 0x40, 0x1f, + 0xb1, 0x0e, 0xc1, 0x0c, 0x99, 0x55, 0xb0, 0x8c, 0xd1, 0x69, 0x5d, 0x52, 0xeb, 0xaa, 0x08, 0x55, + 0xb1, 0xd5, 0x8b, 0xed, 0xdb, 0xaa, 0x88, 0x1c, 0xc0, 0xf1, 0x97, 0x30, 0x3a, 0x3d, 0x14, 0x0b, + 0x32, 0x97, 0xf3, 0x8f, 0x01, 0x6e, 0xd5, 0x58, 0x50, 0x0b, 0x31, 0x9f, 0x46, 0xf8, 0x13, 0x30, + 0x0b, 0x23, 0xd2, 0xc5, 0x5c, 0xca, 0x5e, 0xd8, 0xd9, 0x74, 0xf5, 0x76, 0x88, 0x4d, 0x4d, 0x9a, + 0xc3, 0x7d, 0x4c, 0x42, 0x5c, 0x7d, 0xf7, 0x55, 0x6c, 0xcf, 0xf4, 0x33, 0x29, 0x9a, 0xe3, 0x6b, + 0xbe, 0xf9, 0x05, 0x58, 0x8a, 0x42, 0xcc, 0x0f, 0xc9, 0xa3, 0x56, 0x8b, 0x22, 0xc6, 0x0a, 0xd7, + 0xf3, 0x12, 0x44, 0xb8, 0xce, 0x49, 0x1d, 0x2a, 0x80, 0xe3, 0x67, 0x09, 0x95, 0x07, 0x39, 0x4f, + 0x37, 0x47, 0x7a, 0x2a, 0x38, 0xce, 0x2a, 0x58, 0xd6, 0x62, 0x13, 0x13, 0x9d, 0x7f, 0x95, 0x01, + 0xd5, 0x2e, 0xc5, 0x6f, 0xc7, 0x80, 0x7d, 0xb0, 0xdc, 0xe8, 0x52, 0xbc, 0x4f, 0x49, 0x94, 0xb5, + 0x60, 0xab, 0x17, 0xdb, 0x05, 0xc5, 0x11, 0x80, 0xfa, 0x11, 0x25, 0x51, 0xdf, 0x84, 0x3c, 0x69, + 0x42, 0x1b, 0x04, 0x4b, 0xdb, 0x20, 0x24, 0xa7, 0x36, 0xfc, 0xa1, 0xcf, 0xc1, 0x31, 0xc4, 0x01, + 0x7a, 0xd4, 0x8a, 0xc2, 0xa9, 0xdc, 0xf8, 0x10, 0xdc, 0x1c, 0x3c, 0x04, 0x2b, 0xbd, 0xd8, 0x5e, + 0x54, 0x48, 0xdd, 0x75, 0x2a, 0x6c, 0x96, 0xc1, 0xbc, 0x68, 0x48, 0x28, 0xf2, 0x6b, 0x95, 0xeb, + 0xbd, 0xd8, 0x5e, 0xe9, 0xf7, 0xaa, 0x0c, 0x39, 0xfe, 0x1c, 0x46, 0xa7, 0xb2, 0x8a, 0x49, 0x4f, + 0x8c, 0xac, 0xbb, 0xa4, 0xd8, 0x05, 0x75, 0x62, 0xfa, 0x52, 0x52, 0x95, 0x17, 0x06, 0x58, 0xaf, + 0xb1, 0xe0, 0x00, 0xf1, 0x2a, 0x3a, 0x22, 0x14, 0x1d, 0x20, 0xdc, 0x7a, 0x42, 0x48, 0xfb, 0x4d, + 0x68, 0xfd, 0x0c, 0x2c, 0x35, 0x09, 0xe6, 0x14, 0x36, 0xb9, 0xdc, 0x35, 0xad, 0xb7, 0xd0, 0x8b, + 0xed, 0x75, 0x85, 0xcf, 0x84, 0x1d, 0x7f, 0x31, 0x79, 0x16, 0x3b, 0x5a, 0xf9, 0x24, 0xa7, 0xfb, + 0xfe, 0x48, 0xdd, 0x0c, 0xf1, 0x52, 0x43, 0x4a, 0x11, 0xc8, 0xd2, 0x31, 0x21, 0x6d, 0xa7, 0x08, + 0xb6, 0x46, 0x69, 0x4c, 0x4d, 0xf8, 0xd9, 0x00, 0x6b, 0x0a, 0x20, 0x47, 0x40, 0x0d, 0x71, 0xd8, + 0x82, 0x1c, 0x4e, 0xe3, 0x81, 0x0f, 0xe6, 0x22, 0x4d, 0xd3, 0xfd, 0x7f, 0xa7, 0xdf, 0xff, 0xb8, + 0x9d, 0xf6, 0x7f, 0x92, 0xbb, 0xba, 0xa1, 0xcf, 0x80, 0x1e, 0x8d, 0x09, 0xd9, 0xf1, 0xd3, 0x3c, + 0x95, 0x85, 0x01, 0xc1, 0xce, 0x1d, 0xf0, 0xde, 0x88, 0x12, 0x53, 0x09, 0xf1, 0x35, 0xb0, 0x52, + 0x63, 0xc1, 0x3e, 0xa1, 0x4d, 0x74, 0x48, 0x21, 0x66, 0x47, 0x88, 0xbe, 0x9d, 0xd3, 0xeb, 0x83, + 0x35, 0xae, 0x0b, 0x18, 0x3e, 0xc1, 0x77, 0x7b, 0xb1, 0xbd, 0xa5, 0x78, 0x09, 0x28, 0x77, 0x8a, + 0x47, 0x91, 0xcd, 0xaf, 0xc0, 0x6a, 0xb2, 0xdc, 0x1f, 0x8b, 0x37, 0x64, 0xc6, 0x62, 0x2f, 0xb6, + 0xad, 0x5c, 0xc6, 0xc1, 0xd1, 0x38, 0x4c, 0xac, 0x3c, 0xcc, 0x35, 0xd2, 0x07, 0x23, 0x1b, 0xe9, + 0x48, 0x58, 0x59, 0x4a, 0xd8, 0x8e, 0x05, 0x0a, 0x79, 0x7f, 0x53, 0xf3, 0x7f, 0x37, 0xe4, 0xf8, + 0xf8, 0xba, 0xd3, 0x82, 0x1c, 0x3d, 0x95, 0x97, 0xa9, 0xb9, 0x07, 0xe6, 0x61, 0x97, 0x1f, 0x13, + 0x1a, 0xf2, 0x33, 0x6d, 0x7f, 0xe1, 0xcf, 0xdf, 0x4a, 0xeb, 0xda, 0x56, 0x5d, 0xcb, 0x01, 0xa7, + 0x21, 0x0e, 0xfc, 0x3e, 0xd4, 0xfc, 0x1c, 0xcc, 0xaa, 0xeb, 0x58, 0x6f, 0xc4, 0x96, 0x3b, 0xf2, + 0x6b, 0x43, 0xbd, 0xa5, 0x3a, 0x2f, 0xf6, 0xe2, 0xd7, 0xab, 0xf3, 0x6d, 0xc3, 0xd7, 0xb4, 0xca, + 0xae, 0x50, 0xd7, 0x4f, 0x28, 0x27, 0x44, 0x88, 0x39, 0xa2, 0xcd, 0x63, 0x18, 0xe2, 0xe7, 0x5d, + 0x44, 0x43, 0xc4, 0xbc, 0x5c, 0xb9, 0xce, 0x26, 0xd8, 0xc8, 0x2d, 0x25, 0xea, 0x76, 0x7e, 0xb9, + 0x05, 0xae, 0xd7, 0x58, 0x60, 0x3e, 0x07, 0x0b, 0x83, 0x1f, 0x05, 0x1f, 0xb9, 0xff, 0xf7, 0x19, + 0xe4, 0x66, 0x6f, 0x68, 0x6b, 0x77, 0x1a, 0x74, 0x7a, 0x9f, 0x3f, 0x03, 0x37, 0xe4, 0x3d, 0x7c, + 0x6f, 0x2c, 0x5b, 0xc0, 0xac, 0xd2, 0x44, 0xb0, 0xc1, 0xec, 0xf2, 0x92, 0x1b, 0x9f, 0x5d, 0xc0, + 0x26, 0xc8, 0x3e, 0x78, 0x7f, 0x48, 0xbb, 0x06, 0xee, 0x8e, 0x09, 0xec, 0xea, 0xa3, 0x27, 0xb1, + 0x6b, 0x78, 0x98, 0x9b, 0x2f, 0x0d, 0xb0, 0x32, 0x34, 0xc4, 0xca, 0x63, 0x53, 0xe5, 0x29, 0xd6, + 0xa7, 0x53, 0x53, 0xd2, 0x12, 0xbe, 0x37, 0xc0, 0xea, 0xf0, 0x65, 0xb2, 0x33, 0x49, 0xc2, 0x2c, + 0xc7, 0xaa, 0x4c, 0xcf, 0x49, 0xab, 0x38, 0x05, 0x4b, 0xd9, 0x49, 0xe8, 0x8e, 0x4d, 0x96, 0xc1, + 0x5b, 0x7b, 0xd3, 0xe1, 0xd3, 0x17, 0x73, 0xb0, 0x98, 0x99, 0x02, 0xe3, 0x7b, 0x66, 0x10, 0x6e, + 0x7d, 0x3c, 0x15, 0x3c, 0x79, 0xab, 0x75, 0xf3, 0xa5, 0x98, 0x00, 0xd5, 0xa7, 0xaf, 0x2e, 0x8a, + 0xc6, 0xeb, 0x8b, 0xa2, 0xf1, 0xf7, 0x45, 0xd1, 0xf8, 0xf1, 0xb2, 0x38, 0xf3, 0xfa, 0xb2, 0x38, + 0xf3, 0xd7, 0x65, 0x71, 0xe6, 0x9b, 0xbd, 0x20, 0xe4, 0xc7, 0xdd, 0x86, 0xdb, 0x24, 0x91, 0x87, + 0x51, 0x97, 0x53, 0x82, 0x4b, 0x84, 0x06, 0xc9, 0x6f, 0xef, 0x64, 0xd7, 0x7b, 0x91, 0x9d, 0x7e, + 0xfc, 0xac, 0x83, 0x58, 0x63, 0x56, 0xfe, 0x49, 0xf0, 0xf0, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xab, 0x2e, 0xa9, 0x6f, 0x19, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/tokenfactory/types/v1beta1/params.pb.go b/x/tokenfactory/types/v1beta1/params.pb.go new file mode 100644 index 000000000..cf863a97c --- /dev/null +++ b/x/tokenfactory/types/v1beta1/params.pb.go @@ -0,0 +1,441 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/tokenfactory/v1beta1/params.proto + +package v1beta1 + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the tokenfactory module. +type Params struct { + // DenomCreationFee defines the fee to be charged on the creation of a new + // denom. The fee is drawn from the MsgCreateDenom's sender account, and + // transferred to the community pool. + DenomCreationFee github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=denom_creation_fee,json=denomCreationFee,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"denom_creation_fee" yaml:"denom_creation_fee"` + // DenomCreationGasConsume defines the gas cost for creating a new denom. + // This is intended as a spam deterrence mechanism. + // + // See: https://github.com/CosmWasm/token-factory/issues/11 + DenomCreationGasConsume uint64 `protobuf:"varint,2,opt,name=denom_creation_gas_consume,json=denomCreationGasConsume,proto3" json:"denom_creation_gas_consume,omitempty" yaml:"denom_creation_gas_consume"` + // FeeCollectorAddress is the address where fees collected from denom creation + // are sent to + FeeCollectorAddress string `protobuf:"bytes,3,opt,name=fee_collector_address,json=feeCollectorAddress,proto3" json:"fee_collector_address,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_cc8299d306f3ff47, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetDenomCreationFee() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.DenomCreationFee + } + return nil +} + +func (m *Params) GetDenomCreationGasConsume() uint64 { + if m != nil { + return m.DenomCreationGasConsume + } + return 0 +} + +func (m *Params) GetFeeCollectorAddress() string { + if m != nil { + return m.FeeCollectorAddress + } + return "" +} + +func init() { + proto.RegisterType((*Params)(nil), "osmosis.tokenfactory.v1beta1.Params") +} + +func init() { + proto.RegisterFile("osmosis/tokenfactory/v1beta1/params.proto", fileDescriptor_cc8299d306f3ff47) +} + +var fileDescriptor_cc8299d306f3ff47 = []byte{ + // 376 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x52, 0xbd, 0x6e, 0xe2, 0x40, + 0x10, 0xf6, 0xc2, 0x09, 0xe9, 0x7c, 0xcd, 0xc9, 0x77, 0xa7, 0x03, 0x74, 0xb2, 0x39, 0x57, 0xa6, + 0xc0, 0x2b, 0x48, 0xaa, 0x14, 0x91, 0x82, 0xa5, 0xa4, 0x8a, 0x14, 0x51, 0x45, 0x69, 0xac, 0xb5, + 0x3d, 0x76, 0x2c, 0xf0, 0x0e, 0xf2, 0x2e, 0x28, 0xbc, 0x45, 0xaa, 0x3c, 0x44, 0xde, 0x21, 0x3d, + 0x25, 0x65, 0x2a, 0x27, 0x82, 0x37, 0xe0, 0x09, 0x22, 0xfc, 0x13, 0x41, 0x92, 0xca, 0x33, 0xf3, + 0x7d, 0xf3, 0xcd, 0xe7, 0x99, 0x55, 0xbb, 0x28, 0x12, 0x14, 0xb1, 0xa0, 0x12, 0xc7, 0xc0, 0x43, + 0xe6, 0x4b, 0x4c, 0x17, 0x74, 0xde, 0xf7, 0x40, 0xb2, 0x3e, 0x9d, 0xb2, 0x94, 0x25, 0xc2, 0x9e, + 0xa6, 0x28, 0x51, 0xfb, 0x57, 0x52, 0xed, 0x7d, 0xaa, 0x5d, 0x52, 0xdb, 0xba, 0x9f, 0xc3, 0xd4, + 0x63, 0x02, 0xde, 0xfb, 0x7d, 0x8c, 0x79, 0xd1, 0xdd, 0x6e, 0x15, 0xb8, 0x9b, 0x67, 0xb4, 0x48, + 0x4a, 0xe8, 0x77, 0x84, 0x11, 0x16, 0xf5, 0x5d, 0x54, 0x54, 0xcd, 0xa7, 0x9a, 0xda, 0xb8, 0xca, + 0xe7, 0x6b, 0x0f, 0x44, 0xd5, 0x02, 0xe0, 0x98, 0xb8, 0x7e, 0x0a, 0x4c, 0xc6, 0xc8, 0xdd, 0x10, + 0xa0, 0x49, 0x3a, 0x75, 0xeb, 0xc7, 0xa0, 0x65, 0x97, 0x62, 0xbb, 0xc9, 0x95, 0x1d, 0xdb, 0xc1, + 0x98, 0x0f, 0x2f, 0x97, 0x99, 0xa1, 0x6c, 0x33, 0xa3, 0xb5, 0x60, 0xc9, 0xe4, 0xc4, 0xfc, 0x2c, + 0x61, 0x3e, 0xbe, 0x18, 0x56, 0x14, 0xcb, 0xdb, 0x99, 0x67, 0xfb, 0x98, 0x94, 0xb6, 0xca, 0x4f, + 0x4f, 0x04, 0x63, 0x2a, 0x17, 0x53, 0x10, 0xb9, 0x9a, 0x18, 0xfd, 0xcc, 0x05, 0x9c, 0xb2, 0xff, + 0x1c, 0x40, 0x0b, 0xd5, 0xf6, 0x07, 0xd1, 0x88, 0x09, 0xd7, 0x47, 0x2e, 0x66, 0x09, 0x34, 0x6b, + 0x1d, 0x62, 0x7d, 0x1b, 0x76, 0x97, 0x99, 0x41, 0xb6, 0x99, 0xf1, 0xff, 0x4b, 0x13, 0x7b, 0x7c, + 0x73, 0xf4, 0xf7, 0x60, 0xc0, 0x05, 0x13, 0x4e, 0x81, 0x68, 0x03, 0xf5, 0x4f, 0x08, 0xe0, 0xfa, + 0x38, 0x99, 0xc0, 0x6e, 0xed, 0x2e, 0x0b, 0x82, 0x14, 0x84, 0x68, 0xd6, 0x3b, 0xc4, 0xfa, 0x3e, + 0xfa, 0x15, 0x02, 0x38, 0x15, 0x76, 0x56, 0x40, 0xc3, 0xeb, 0xe5, 0x5a, 0x27, 0xab, 0xb5, 0x4e, + 0x5e, 0xd7, 0x3a, 0xb9, 0xdf, 0xe8, 0xca, 0x6a, 0xa3, 0x2b, 0xcf, 0x1b, 0x5d, 0xb9, 0x39, 0xdd, + 0xfb, 0x63, 0x0e, 0x33, 0x99, 0x22, 0xef, 0x61, 0x1a, 0x55, 0x31, 0x9d, 0x1f, 0xd3, 0xbb, 0xc3, + 0xf7, 0x90, 0x6f, 0xa1, 0xba, 0xaa, 0xd7, 0xc8, 0x0f, 0x74, 0xf4, 0x16, 0x00, 0x00, 0xff, 0xff, + 0xc4, 0x5e, 0x24, 0x25, 0x3c, 0x02, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.FeeCollectorAddress) > 0 { + i -= len(m.FeeCollectorAddress) + copy(dAtA[i:], m.FeeCollectorAddress) + i = encodeVarintParams(dAtA, i, uint64(len(m.FeeCollectorAddress))) + i-- + dAtA[i] = 0x1a + } + if m.DenomCreationGasConsume != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.DenomCreationGasConsume)) + i-- + dAtA[i] = 0x10 + } + if len(m.DenomCreationFee) > 0 { + for iNdEx := len(m.DenomCreationFee) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DenomCreationFee[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintParams(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DenomCreationFee) > 0 { + for _, e := range m.DenomCreationFee { + l = e.Size() + n += 1 + l + sovParams(uint64(l)) + } + } + if m.DenomCreationGasConsume != 0 { + n += 1 + sovParams(uint64(m.DenomCreationGasConsume)) + } + l = len(m.FeeCollectorAddress) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DenomCreationFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DenomCreationFee = append(m.DenomCreationFee, types.Coin{}) + if err := m.DenomCreationFee[len(m.DenomCreationFee)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DenomCreationGasConsume", wireType) + } + m.DenomCreationGasConsume = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DenomCreationGasConsume |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeCollectorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FeeCollectorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/transfer/keeper/keeper.go b/x/transfer/keeper/keeper.go index 7cfdac975..56e630cd0 100644 --- a/x/transfer/keeper/keeper.go +++ b/x/transfer/keeper/keeper.go @@ -70,6 +70,18 @@ func (k KeeperTransferWrapper) Transfer(goCtx context.Context, msg *wrappedtypes }, nil } +func (k KeeperTransferWrapper) UpdateParams(goCtx context.Context, msg *wrappedtypes.MsgUpdateParams) (*wrappedtypes.MsgUpdateParamsResponse, error) { + newMsg := &types.MsgUpdateParams{ + Signer: msg.Signer, + Params: msg.Params, + } + if _, err := k.Keeper.UpdateParams(goCtx, newMsg); err != nil { + return nil, err + } + + return &wrappedtypes.MsgUpdateParamsResponse{}, nil +} + // NewKeeper creates a new IBC transfer Keeper(KeeperTransferWrapper) instance func NewKeeper( cdc codec.BinaryCodec, key storetypes.StoreKey, paramSpace paramtypes.Subspace, diff --git a/x/transfer/types/query.pb.go b/x/transfer/types/query.pb.go index 499576586..4d562d622 100644 --- a/x/transfer/types/query.pb.go +++ b/x/transfer/types/query.pb.go @@ -6,8 +6,6 @@ package types import ( context "context" fmt "fmt" - math "math" - grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" types "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" @@ -15,6 +13,7 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/transfer/types/tx.go b/x/transfer/types/tx.go index 3e5294a7e..ada5bc1ae 100644 --- a/x/transfer/types/tx.go +++ b/x/transfer/types/tx.go @@ -72,6 +72,36 @@ func MsgOrigTransferHandler(srv interface{}, ctx context.Context, dec func(inter return interceptor(ctx, conv, info, handler) } +// MsgUpdateParamsHandler handler helps to bind `/ibc.applications.transfer.v1.Msg/UpdateParams`. +// +//nolint:revive // we cant rearrange arguments since we need to meet the type requirement +func MsgUpdateParamsHandler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(types.MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + conv := &MsgUpdateParams{ + Signer: in.Signer, + Params: in.Params, + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, conv) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.transfer.v1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + reqT := req.(*types.MsgUpdateParams) + convReq := &MsgUpdateParams{ + Signer: reqT.Signer, + Params: reqT.Params, + } + return srv.(MsgServer).UpdateParams(ctx, convReq) + } + return interceptor(ctx, in, info, handler) +} + var MsgServiceDescOrig = grpc.ServiceDesc{ ServiceName: "ibc.applications.transfer.v1.Msg", HandlerType: (*MsgServer)(nil), @@ -80,6 +110,10 @@ var MsgServiceDescOrig = grpc.ServiceDesc{ MethodName: "Transfer", Handler: MsgOrigTransferHandler, }, + { + MethodName: "UpdateParams", + Handler: MsgUpdateParamsHandler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "ibc/applications/transfer/v1/tx.proto", diff --git a/x/transfer/types/tx.pb.go b/x/transfer/types/tx.pb.go index 095502340..94361dafa 100644 --- a/x/transfer/types/tx.pb.go +++ b/x/transfer/types/tx.pb.go @@ -6,21 +6,20 @@ package types import ( context "context" fmt "fmt" - io "io" - math "math" - math_bits "math/bits" - types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + types3 "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" types1 "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + types2 "github.com/neutron-org/neutron/v4/x/feerefunder/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - - types2 "github.com/neutron-org/neutron/v4/x/feerefunder/types" + io "io" + math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. @@ -144,52 +143,141 @@ func (m *MsgTransferResponse) GetChannel() string { return "" } +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + // signer address + Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"` + // params defines the transfer parameters to update. + // + // NOTE: All parameters must be supplied. + Params types3.Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_c44193c4a9c18e30, []int{2} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.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 *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_c44193c4a9c18e30, []int{3} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.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 *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgTransfer)(nil), "neutron.transfer.MsgTransfer") proto.RegisterType((*MsgTransferResponse)(nil), "neutron.transfer.MsgTransferResponse") + proto.RegisterType((*MsgUpdateParams)(nil), "neutron.transfer.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "neutron.transfer.MsgUpdateParamsResponse") } func init() { proto.RegisterFile("neutron/transfer/v1/tx.proto", fileDescriptor_c44193c4a9c18e30) } var fileDescriptor_c44193c4a9c18e30 = []byte{ - // 578 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xcf, 0x4f, 0xd4, 0x40, - 0x14, 0x6e, 0xdd, 0xe5, 0xd7, 0x6c, 0x20, 0x38, 0x28, 0x0e, 0x0d, 0xb4, 0xa4, 0x89, 0x09, 0x21, - 0x71, 0xc6, 0x45, 0x8d, 0x09, 0x27, 0xb3, 0x24, 0x46, 0x12, 0x49, 0x48, 0xc3, 0xc9, 0x83, 0xd8, - 0x96, 0xb7, 0xdd, 0x46, 0x3a, 0xb3, 0xce, 0x4c, 0x37, 0x70, 0x33, 0x9e, 0x3c, 0xfa, 0x27, 0xf0, - 0x27, 0xf0, 0x67, 0x70, 0xe4, 0xe8, 0x69, 0x63, 0xe0, 0x80, 0xe7, 0xbd, 0x7a, 0x31, 0x6d, 0xa7, - 0xcb, 0xae, 0x07, 0x4f, 0xf3, 0xde, 0xf7, 0x7d, 0x6f, 0xde, 0x9b, 0x6f, 0x66, 0xd0, 0x3a, 0x87, - 0x5c, 0x4b, 0xc1, 0x99, 0x96, 0x21, 0x57, 0x5d, 0x90, 0x6c, 0xd0, 0x66, 0xfa, 0x8c, 0xf6, 0xa5, - 0xd0, 0x02, 0x2f, 0x1b, 0x96, 0xd6, 0xac, 0xe3, 0xc6, 0x42, 0x65, 0x42, 0xb1, 0x28, 0x54, 0xc0, - 0x06, 0xed, 0x08, 0x74, 0xd8, 0x66, 0xb1, 0x48, 0x79, 0x55, 0xe1, 0x3c, 0x31, 0x7c, 0xa6, 0x92, - 0x62, 0xa7, 0x4c, 0x25, 0x86, 0x78, 0x94, 0x88, 0x44, 0x94, 0x21, 0x2b, 0x22, 0x83, 0x7a, 0x69, - 0x14, 0xb3, 0x58, 0x48, 0x60, 0xf1, 0x69, 0x0a, 0x5c, 0x17, 0x35, 0x55, 0x64, 0x04, 0x1b, 0xf5, - 0x7c, 0x5d, 0x00, 0x09, 0xdd, 0x9c, 0x9f, 0x80, 0x2c, 0xe2, 0x8a, 0xf6, 0xff, 0x34, 0x50, 0xeb, - 0x40, 0x25, 0x47, 0x66, 0x3c, 0xfc, 0x1a, 0xb5, 0x94, 0xc8, 0x65, 0x0c, 0xc7, 0x7d, 0x21, 0x35, - 0xb1, 0x37, 0xed, 0xad, 0x85, 0xce, 0xea, 0x68, 0xe8, 0xe1, 0xf3, 0x30, 0x3b, 0xdd, 0xf5, 0x27, - 0x48, 0x3f, 0x40, 0x55, 0x76, 0x28, 0xa4, 0xc6, 0x6f, 0xd0, 0x92, 0xe1, 0xe2, 0x5e, 0xc8, 0x39, - 0x9c, 0x92, 0x07, 0x65, 0xed, 0xda, 0x68, 0xe8, 0x3d, 0x9e, 0xaa, 0x35, 0xbc, 0x1f, 0x2c, 0x56, - 0xc0, 0x5e, 0x95, 0xe3, 0x57, 0x68, 0x46, 0x8b, 0xcf, 0xc0, 0x49, 0x63, 0xd3, 0xde, 0x6a, 0xed, - 0xac, 0xd1, 0xca, 0x09, 0x5a, 0x38, 0x45, 0x8d, 0x53, 0x74, 0x4f, 0xa4, 0xbc, 0xd3, 0xbc, 0x1a, - 0x7a, 0x56, 0x50, 0xa9, 0xf1, 0x2a, 0x9a, 0x55, 0x50, 0x9c, 0x8a, 0x34, 0x8b, 0x86, 0x81, 0xc9, - 0xb0, 0x83, 0xe6, 0x25, 0xc4, 0x90, 0x0e, 0x40, 0x92, 0x99, 0x92, 0x19, 0xe7, 0xf8, 0x13, 0x5a, - 0xd2, 0x69, 0x06, 0x22, 0xd7, 0xc7, 0x3d, 0x48, 0x93, 0x9e, 0x26, 0xb3, 0x65, 0x4f, 0x87, 0xa6, - 0x51, 0x4c, 0x0b, 0x3b, 0xa9, 0x31, 0x71, 0xd0, 0xa6, 0xef, 0x4a, 0x45, 0x67, 0xa3, 0x68, 0x7a, - 0x7f, 0x98, 0xe9, 0x7a, 0x3f, 0x58, 0x34, 0x40, 0xa5, 0xc6, 0xfb, 0xe8, 0x61, 0xad, 0x28, 0x56, - 0xa5, 0xc3, 0xac, 0x4f, 0xe6, 0x36, 0xed, 0xad, 0x66, 0x67, 0x7d, 0x34, 0xf4, 0xc8, 0xf4, 0x26, - 0x63, 0x89, 0x1f, 0x2c, 0x1b, 0xec, 0xa8, 0x86, 0x30, 0x46, 0xcd, 0x0c, 0x32, 0x41, 0xe6, 0xcb, - 0x43, 0x94, 0x31, 0x7e, 0x8e, 0x1a, 0x5d, 0x00, 0xb2, 0x50, 0x4e, 0x4d, 0x68, 0xfd, 0xca, 0x26, - 0xee, 0x98, 0xbe, 0x05, 0x30, 0x46, 0x15, 0xd2, 0xdd, 0x95, 0xef, 0x17, 0x9e, 0xf5, 0xfb, 0xc2, - 0xb3, 0xbe, 0xdd, 0x5d, 0x6e, 0x1b, 0x8f, 0xfc, 0x43, 0xb4, 0x32, 0x71, 0xf9, 0x01, 0xa8, 0xbe, - 0xe0, 0x0a, 0xb0, 0x87, 0x5a, 0x0a, 0xbe, 0xe4, 0xc0, 0x63, 0x38, 0x4e, 0x4f, 0xca, 0x47, 0xd0, - 0x0c, 0x50, 0x0d, 0xed, 0x9f, 0x60, 0x82, 0xe6, 0xa6, 0x6e, 0x39, 0xa8, 0xd3, 0x9d, 0x8f, 0xa8, - 0x71, 0xa0, 0x12, 0x7c, 0x88, 0xe6, 0xc7, 0x4f, 0x6a, 0x83, 0xfe, 0xfb, 0x09, 0xe8, 0x44, 0x53, - 0xe7, 0xe9, 0x7f, 0xe9, 0x7a, 0x26, 0x67, 0xe6, 0xeb, 0xdd, 0xe5, 0xb6, 0xdd, 0x79, 0x7f, 0x75, - 0xe3, 0xda, 0xd7, 0x37, 0xae, 0xfd, 0xeb, 0xc6, 0xb5, 0x7f, 0xdc, 0xba, 0xd6, 0xf5, 0xad, 0x6b, - 0xfd, 0xbc, 0x75, 0xad, 0x0f, 0x3b, 0x49, 0xaa, 0x7b, 0x79, 0x44, 0x63, 0x91, 0x31, 0xb3, 0xe3, - 0x33, 0x21, 0x93, 0x3a, 0x66, 0x83, 0x97, 0xec, 0xec, 0xfe, 0x93, 0xea, 0xf3, 0x3e, 0xa8, 0x68, - 0xb6, 0xfc, 0x04, 0x2f, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0xe4, 0x19, 0x68, 0xe8, 0xc5, 0x03, - 0x00, 0x00, + // 686 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x4f, 0x6f, 0xd3, 0x4a, + 0x10, 0x8f, 0x5f, 0xd2, 0xb4, 0xdd, 0xbc, 0xfe, 0x79, 0xdb, 0xf7, 0x5a, 0x37, 0x6a, 0xed, 0x3e, + 0x0b, 0xa4, 0x52, 0xc4, 0x9a, 0x04, 0x10, 0x52, 0x4f, 0x28, 0x95, 0x10, 0x95, 0xa8, 0x14, 0x59, + 0xe5, 0x82, 0x90, 0x8a, 0xe3, 0x4c, 0x1c, 0x8b, 0x78, 0xd7, 0xec, 0x6e, 0xa2, 0xf6, 0x82, 0x10, + 0xa7, 0x1e, 0xf9, 0x08, 0xfd, 0x08, 0xfd, 0x00, 0x7c, 0x80, 0x1e, 0x7b, 0xe4, 0x14, 0xa1, 0xf6, + 0x50, 0xce, 0xbd, 0x72, 0x41, 0x5e, 0xaf, 0xd3, 0xa4, 0x42, 0x70, 0xca, 0xcc, 0xfc, 0x7e, 0x33, + 0xe3, 0xf9, 0xcd, 0x6c, 0xd0, 0x1a, 0x85, 0xbe, 0xe4, 0x8c, 0xba, 0x92, 0xfb, 0x54, 0x74, 0x80, + 0xbb, 0x83, 0x9a, 0x2b, 0x0f, 0x49, 0xc2, 0x99, 0x64, 0x78, 0x51, 0xa3, 0x24, 0x47, 0xab, 0x56, + 0xc0, 0x44, 0xcc, 0x84, 0xdb, 0xf2, 0x05, 0xb8, 0x83, 0x5a, 0x0b, 0xa4, 0x5f, 0x73, 0x03, 0x16, + 0xd1, 0x2c, 0xa3, 0xba, 0xa2, 0xf1, 0x58, 0x84, 0x69, 0xa5, 0x58, 0x84, 0x1a, 0xf8, 0x37, 0x64, + 0x21, 0x53, 0xa6, 0x9b, 0x5a, 0x3a, 0x7a, 0x3f, 0x6a, 0x05, 0xae, 0x9f, 0x24, 0xbd, 0x28, 0xf0, + 0x65, 0xc4, 0xa8, 0x98, 0xfc, 0x0e, 0x6d, 0x6b, 0xb2, 0x9d, 0x92, 0x03, 0xc6, 0xc1, 0x0d, 0x7a, + 0x11, 0x50, 0x99, 0x52, 0x32, 0x4b, 0x13, 0xd6, 0xf3, 0x61, 0x3a, 0x00, 0x1c, 0x3a, 0x7d, 0xda, + 0x06, 0x9e, 0xda, 0x19, 0xec, 0xfc, 0x28, 0xa2, 0xca, 0x9e, 0x08, 0xf7, 0x75, 0x55, 0xfc, 0x14, + 0x55, 0x04, 0xeb, 0xf3, 0x00, 0x0e, 0x12, 0xc6, 0xa5, 0x69, 0x6c, 0x18, 0x9b, 0xb3, 0x8d, 0xe5, + 0xeb, 0xa1, 0x8d, 0x8f, 0xfc, 0xb8, 0xb7, 0xed, 0x8c, 0x81, 0x8e, 0x87, 0x32, 0xaf, 0xc9, 0xb8, + 0xc4, 0xcf, 0xd0, 0xbc, 0xc6, 0x82, 0xae, 0x4f, 0x29, 0xf4, 0xcc, 0xbf, 0x54, 0xee, 0xea, 0xf5, + 0xd0, 0xfe, 0x6f, 0x22, 0x57, 0xe3, 0x8e, 0x37, 0x97, 0x05, 0x76, 0x32, 0x1f, 0x3f, 0x41, 0x53, + 0x92, 0xbd, 0x03, 0x6a, 0x16, 0x37, 0x8c, 0xcd, 0x4a, 0x7d, 0x95, 0x64, 0xb2, 0x91, 0x54, 0x56, + 0xa2, 0x65, 0x25, 0x3b, 0x2c, 0xa2, 0x8d, 0xd2, 0xd9, 0xd0, 0x2e, 0x78, 0x19, 0x1b, 0x2f, 0xa3, + 0xb2, 0x80, 0x74, 0x2a, 0xb3, 0x94, 0x36, 0xf4, 0xb4, 0x87, 0xab, 0x68, 0x86, 0x43, 0x00, 0xd1, + 0x00, 0xb8, 0x39, 0xa5, 0x90, 0x91, 0x8f, 0xdf, 0xa2, 0x79, 0x19, 0xc5, 0xc0, 0xfa, 0xf2, 0xa0, + 0x0b, 0x51, 0xd8, 0x95, 0x66, 0x59, 0xf5, 0xac, 0x92, 0xa8, 0x15, 0x90, 0x54, 0x4e, 0xa2, 0x45, + 0x1c, 0xd4, 0xc8, 0x0b, 0xc5, 0x68, 0xac, 0xa7, 0x4d, 0x6f, 0x86, 0x99, 0xcc, 0x77, 0xbc, 0x39, + 0x1d, 0xc8, 0xd8, 0x78, 0x17, 0xfd, 0x93, 0x33, 0xd2, 0x5f, 0x21, 0xfd, 0x38, 0x31, 0xa7, 0x37, + 0x8c, 0xcd, 0x52, 0x63, 0xed, 0x7a, 0x68, 0x9b, 0x93, 0x45, 0x46, 0x14, 0xc7, 0x5b, 0xd4, 0xb1, + 0xfd, 0x3c, 0x84, 0x31, 0x2a, 0xc5, 0x10, 0x33, 0x73, 0x46, 0x0d, 0xa1, 0x6c, 0xfc, 0x10, 0x15, + 0x3b, 0x00, 0xe6, 0xac, 0xfa, 0x6a, 0x93, 0xe4, 0x27, 0x39, 0xb6, 0x63, 0xf2, 0x1c, 0x40, 0x0b, + 0x95, 0x52, 0xb7, 0x97, 0x8e, 0x4f, 0xec, 0xc2, 0xf7, 0x13, 0xbb, 0xf0, 0xe9, 0xea, 0x74, 0x4b, + 0x6b, 0xe4, 0x34, 0xd1, 0xd2, 0xd8, 0xf2, 0x3d, 0x10, 0x09, 0xa3, 0x02, 0xb0, 0x8d, 0x2a, 0x02, + 0xde, 0xf7, 0x81, 0x06, 0x70, 0x10, 0xb5, 0xd5, 0x11, 0x94, 0x3c, 0x94, 0x87, 0x76, 0xdb, 0xd8, + 0x44, 0xd3, 0x13, 0x5b, 0xf6, 0x72, 0xd7, 0xf9, 0x80, 0x16, 0xf6, 0x44, 0xf8, 0x2a, 0x69, 0xfb, + 0x12, 0x9a, 0x3e, 0xf7, 0x63, 0xa1, 0x16, 0x14, 0x85, 0x14, 0x78, 0x76, 0x4d, 0x9e, 0xf6, 0x70, + 0x03, 0x95, 0x13, 0xc5, 0x50, 0x35, 0x2a, 0xf5, 0x3b, 0x4a, 0xfc, 0xf1, 0xc3, 0x1f, 0x3d, 0xb1, + 0x74, 0x0d, 0x59, 0x35, 0x3d, 0x92, 0xce, 0xdc, 0x5e, 0x38, 0x1e, 0x4d, 0xa4, 0x8a, 0x3a, 0xab, + 0x68, 0xe5, 0x56, 0xff, 0x7c, 0xaa, 0xfa, 0x17, 0x03, 0x15, 0xf7, 0x44, 0x88, 0x9b, 0x68, 0x66, + 0x74, 0xee, 0xeb, 0xe4, 0xf6, 0x6b, 0x26, 0x63, 0x82, 0x54, 0xef, 0xfe, 0x16, 0x1e, 0xe9, 0xf5, + 0x06, 0xfd, 0x3d, 0x31, 0xf1, 0xff, 0xbf, 0x4c, 0x1b, 0xa7, 0x54, 0xef, 0xfd, 0x91, 0x92, 0x57, + 0xaf, 0x4e, 0x7d, 0xbc, 0x3a, 0xdd, 0x32, 0x1a, 0x2f, 0xcf, 0x2e, 0x2c, 0xe3, 0xfc, 0xc2, 0x32, + 0xbe, 0x5d, 0x58, 0xc6, 0xe7, 0x4b, 0xab, 0x70, 0x7e, 0x69, 0x15, 0xbe, 0x5e, 0x5a, 0x85, 0xd7, + 0xf5, 0x30, 0x92, 0xdd, 0x7e, 0x8b, 0x04, 0x2c, 0x76, 0x75, 0xd5, 0x07, 0x8c, 0x87, 0xb9, 0xed, + 0x0e, 0x1e, 0xbb, 0x87, 0x37, 0xff, 0x21, 0xf2, 0x28, 0x01, 0xd1, 0x2a, 0xab, 0xe7, 0xff, 0xe8, + 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x33, 0x1a, 0x12, 0x42, 0xec, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -206,6 +294,8 @@ const _ = grpc.SupportPackageIsVersion4 type MsgClient interface { // Transfer defines a rpc handler method for MsgTransfer. Transfer(ctx context.Context, in *MsgTransfer, opts ...grpc.CallOption) (*MsgTransferResponse, error) + // UpdateParams defines a rpc handler for MsgUpdateParams. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) } type msgClient struct { @@ -225,10 +315,21 @@ func (c *msgClient) Transfer(ctx context.Context, in *MsgTransfer, opts ...grpc. return out, nil } +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/neutron.transfer.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // Transfer defines a rpc handler method for MsgTransfer. Transfer(context.Context, *MsgTransfer) (*MsgTransferResponse, error) + // UpdateParams defines a rpc handler for MsgUpdateParams. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -238,6 +339,9 @@ type UnimplementedMsgServer struct { func (*UnimplementedMsgServer) Transfer(ctx context.Context, req *MsgTransfer) (*MsgTransferResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Transfer not implemented") } +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -261,6 +365,24 @@ func _Msg_Transfer_Handler(srv interface{}, ctx context.Context, dec func(interf return interceptor(ctx, in, info, handler) } +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/neutron.transfer.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "neutron.transfer.Msg", HandlerType: (*MsgServer)(nil), @@ -269,6 +391,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "Transfer", Handler: _Msg_Transfer_Handler, }, + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "neutron/transfer/v1/tx.proto", @@ -402,6 +528,69 @@ func (m *MsgTransferResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgUpdateParams) 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 *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) 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 *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) 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 @@ -467,6 +656,30 @@ func (m *MsgTransferResponse) Size() (n int) { return n } +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) 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 } @@ -902,6 +1115,171 @@ func (m *MsgTransferResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgUpdateParams) 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: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", 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.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 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.Params.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 *MsgUpdateParamsResponse) 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: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: 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