From 1c5353f9873878e84a4223aa46f158733c9c280d Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 6 Nov 2023 19:37:49 +0100 Subject: [PATCH 01/10] docs: full git diff --- cosmos-sdk.diff | 7511 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 7511 insertions(+) create mode 100644 cosmos-sdk.diff diff --git a/cosmos-sdk.diff b/cosmos-sdk.diff new file mode 100644 index 000000000000..a0ec60a2fa1d --- /dev/null +++ b/cosmos-sdk.diff @@ -0,0 +1,7511 @@ +diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS +index 4b9db54900..964f80acb8 100644 +--- a/.github/CODEOWNERS ++++ b/.github/CODEOWNERS +@@ -4,4 +4,4 @@ + # most precedence. + + # Primary repo maintainers +-* @cosmos/sdk-core-dev ++* @liamsi @evan-forbes +diff --git a/.github/dependabot.yml b/.github/dependabot.yml +index b2766ba8d1..75670d241f 100644 +--- a/.github/dependabot.yml ++++ b/.github/dependabot.yml +@@ -1,62 +1,12 @@ + version: 2 + updates: +-- package-ecosystem: github-actions +- directory: "/" +- schedule: +- interval: daily +- open-pull-requests-limit: 10 +-- package-ecosystem: npm +- directory: "/docs" +- schedule: +- interval: daily +- open-pull-requests-limit: 10 +- reviewers: +- - fadeev +-- package-ecosystem: gomod +- directory: "/" +- schedule: +- interval: daily +- open-pull-requests-limit: 10 +- labels: +- - "A:automerge" +- - dependencies +-- package-ecosystem: gomod +- directory: "/db" +- schedule: +- interval: daily +- open-pull-requests-limit: 10 +- labels: +- - "A:automerge" +- - dependencies +-- package-ecosystem: gomod +- directory: "/api" +- schedule: +- interval: daily +- open-pull-requests-limit: 10 +- labels: +- - "A:automerge" +- - dependencies +-- package-ecosystem: gomod +- directory: "/orm" +- schedule: +- interval: daily +- open-pull-requests-limit: 10 +- labels: +- - "A:automerge" +- - dependencies +-- package-ecosystem: gomod +- directory: "/container" +- schedule: +- interval: daily +- open-pull-requests-limit: 10 +- labels: +- - "A:automerge" +- - dependencies +-- package-ecosystem: gomod +- directory: "/cosmovisor" +- schedule: +- interval: daily +- open-pull-requests-limit: 10 +- labels: +- - "A:automerge" +- - dependencies ++ - package-ecosystem: gomod ++ directory: "/" ++ schedule: ++ interval: daily ++ open-pull-requests-limit: 10 ++ labels: ++ - automerge ++ - dependencies ++ allow: ++ - dependency-name: "*/celestiaorg/*" +diff --git a/.github/labeler.yml b/.github/labeler.yml +deleted file mode 100644 +index e34b8d5eeb..0000000000 +--- a/.github/labeler.yml ++++ /dev/null +@@ -1,65 +0,0 @@ +-"C:x/auth": +- - x/auth/**/* +-"C:x/authz": +- - x/authz/**/* +-"C:x/bank": +- - x/bank/**/* +-"C:x/capability": +- - x/capability/**/* +-"C:x/crisis": +- - x/crisis/**/* +-"C:x/distribution": +- - x/distribution/**/* +-"C:x/evidence": +- - x/evidence/**/* +-"C:x/feegrant": +- - x/feegrant/**/* +-"C:x/genutil": +- - x/genutil/**/* +-"C:x/gov": +- - x/gov/**/* +-"C:x/group": +- - x/group/**/* +-"C:x/mint": +- - x/mint/**/* +-"C:x/nft": +- - x/nft/**/* +-"C:x/params": +- - x/params/**/* +-"C:Simulations": +- - x/simulation/**/* +- - x/*/simulation/**/* +-"C:x/slashing": +- - x/slashing/**/* +-"C:x/staking": +- - x/staking/**/* +-"C:x/upgrade": +- - x/upgrade/**/* +-"C:Cosmovisor": +- - cosmovisor/**/* +-"C:Rosetta": +- - contrib/rosetta/**/* +-"C:Keys": +- - client/keys/**/* +-"Type: Build": +- - Makefile +- - Dockerfile +- - docker-compose.yml +- - scripts/* +-"Type: CI": +- - .github/**/*.yml +- - buf.yaml +- - .mergify.yml +- - .golangci.yml +-"C:CLI": +- - client/**/* +- - x/*/client/**/* +-"Type: ADR": +- - docs/architecture/**/* +-"C:container": +- - container/**/* +-"C:Store": +- - store/**/* +- - db/**/* +-"C:orm": +- - orm/**/* +diff --git a/.github/workflows/atlas.yml b/.github/workflows/atlas.yml +index 5c59de0308..e9ad4d0af8 100644 +--- a/.github/workflows/atlas.yml ++++ b/.github/workflows/atlas.yml +@@ -3,7 +3,8 @@ name: Atlas + on: + push: + branches: +- - main ++ - v[0-9]+.[0-9]+.x-celestia ++ - release/** + paths: + - "x/**/atlas/*" + pull_request: +diff --git a/.github/workflows/cosmovisor-release.yml b/.github/workflows/cosmovisor-release.yml +deleted file mode 100644 +index f28ca050bf..0000000000 +--- a/.github/workflows/cosmovisor-release.yml ++++ /dev/null +@@ -1,35 +0,0 @@ +-name: Release Cosmovisor +- +-on: +- push: +- tags: +- - "cosmovisor/v*.*.*" +-jobs: +- goreleaser: +- runs-on: ubuntu-latest +- steps: +- - uses: actions/checkout@v3 +- with: +- fetch-depth: 0 +- - uses: actions/setup-go@v3 +- with: +- go-version: 1.19 +- # get 'v*.*.*' part from 'cosmovisor/v*.*.*' and save to $GITHUB_ENV +- - name: Set env +- run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/cosmovisor/}" >> $GITHUB_ENV +- # remove the possible pre-existing same tag for cosmos-sdk related tags instead of cosmovisor tags +- # Because goreleaser enforces semantic versioning and will error on non compliant tags.(https://goreleaser.com/limitations/semver/) +- - name: Tag without prefix locally to avoid error in goreleaser +- run: |- +- git tag -d ${{ env.RELEASE_VERSION }} || echo "No such a tag exists before" +- git tag ${{ env.RELEASE_VERSION }} HEAD +- - name: Run GoReleaser +- uses: goreleaser/goreleaser-action@v3 +- with: +- # stick to version v0.179.0(https://github.com/cosmos/cosmos-sdk/issues/11125) +- version: v0.179.0 +- args: release --rm-dist --skip-validate +- workdir: cosmovisor +- env: +- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +- GORELEASER_CURRENT_TAG: cosmovisor/${{ env.RELEASE_VERSION }} +diff --git a/.github/workflows/dependencies-review.yml b/.github/workflows/dependencies-review.yml +deleted file mode 100644 +index 52926d5742..0000000000 +--- a/.github/workflows/dependencies-review.yml ++++ /dev/null +@@ -1,14 +0,0 @@ +-name: "Dependency Review" +-on: [pull_request] +- +-permissions: +- contents: read +- +-jobs: +- dependency-review: +- runs-on: ubuntu-latest +- steps: +- - name: "Checkout Repository" +- uses: actions/checkout@v3 +- - name: "Dependency Review" +- uses: actions/dependency-review-action@v1 +diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml +index 6b80a78cad..f13b5e644b 100644 +--- a/.github/workflows/docker.yml ++++ b/.github/workflows/docker.yml +@@ -1,10 +1,10 @@ +-name: Build & Push +-# Build & Push builds the simapp docker image on every push to main and +-# and pushes the image to https://hub.docker.com/r/interchainio/simapp/tags ++name: Build Simapp Docker ++# Builds the simapp docker image on every push to default branch. + on: + push: + branches: +- - main ++ - v[0-9]+.[0-9]+.x-celestia ++ - release/** + tags: + - "v[0-9]+.[0-9]+.[0-9]+" # Push events to matching v*, i.e. v1.0, v20.15.10 + - "v[0-9]+.[0-9]+.[0-9]+-rc*" # Push events to matching v*, i.e. v1.0-rc1, v20.15.10-rc5 +@@ -44,15 +44,7 @@ jobs: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + +- - name: Login to DockerHub +- if: ${{ github.event_name != 'pull_request' }} +- uses: docker/login-action@v2 ++ - name: Build but do not Publish to Docker Hub ++ uses: docker/build-push-action@v2 + with: +- username: ${{ secrets.DOCKER_USERNAME }} +- password: ${{ secrets.DOCKERHUB_TOKEN }} +- +- - name: Publish to Docker Hub +- uses: docker/build-push-action@v3 +- with: +- push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.prep.outputs.tags }} +diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml +deleted file mode 100644 +index 2f40ea5d36..0000000000 +--- a/.github/workflows/labeler.yml ++++ /dev/null +@@ -1,11 +0,0 @@ +-name: "Pull Request Labeler" +-on: +- - pull_request_target +- +-jobs: +- labeler: +- runs-on: ubuntu-latest +- steps: +- - uses: actions/labeler@main +- with: +- repo-token: "${{ secrets.GITHUB_TOKEN }}" +\ No newline at end of file +diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml +index fe7226e9bb..57cfe37a8c 100644 +--- a/.github/workflows/lint.yml ++++ b/.github/workflows/lint.yml +@@ -4,7 +4,8 @@ on: + tags: + - v* + branches: +- - main ++ - v[0-9]+.[0-9]+.x-celestia ++ - release/** + pull_request: + permissions: + contents: read +diff --git a/.github/workflows/release-sims.yml b/.github/workflows/release-sims.yml +index 9df30442eb..bb2f6b968d 100644 +--- a/.github/workflows/release-sims.yml ++++ b/.github/workflows/release-sims.yml +@@ -21,8 +21,8 @@ jobs: + steps: + - name: install runsim + run: | +- export GO111MODULE="on" && go get github.com/cosmos/tools/cmd/runsim@v1.0.0 +- - uses: actions/cache@v3 ++ export GO111MODULE="on" && go install github.com/cosmos/tools/cmd/runsim@v1.0.0 ++ - uses: actions/cache@v3.0.2 + with: + path: ~/go/bin + key: ${{ runner.os }}-go-runsim-binary +diff --git a/.github/workflows/sims.yml b/.github/workflows/sims.yml +index 6a6e3723f6..c166abfa59 100644 +--- a/.github/workflows/sims.yml ++++ b/.github/workflows/sims.yml +@@ -2,10 +2,11 @@ name: Sims + # Sims workflow runs multiple types of simulations (nondeterminism, import-export, after-import, multi-seed-short) + # This workflow will run on all Pull Requests, if a .go, .mod or .sum file have been changed + on: +- schedule: +- - cron: "* */2 * * *" +- release: +- types: [published] ++ pull_request: ++ push: ++ branches: ++ - v[0-9]+.[0-9]+.x-celestia ++ - release/** + + jobs: + cleanup-runs: +@@ -37,7 +38,7 @@ jobs: + - name: Display go version + run: go version + - name: Install runsim +- run: go install github.com/cosmos/tools/cmd/runsim@v1.0.0 ++ run: export GO111MODULE="on" && go install github.com/cosmos/tools/cmd/runsim@v1.0.0 + - uses: actions/cache@v3 + with: + path: ~/go/bin +diff --git a/.github/workflows/test-race.yml b/.github/workflows/test-race.yml +index 642ca23bbd..d6d5849f43 100644 +--- a/.github/workflows/test-race.yml ++++ b/.github/workflows/test-race.yml +@@ -51,9 +51,6 @@ jobs: + - name: Build + run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make build + +- - name: Build cosmovisor +- run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make cosmovisor +- + split-test-files: + runs-on: ubuntu-latest + steps: +diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml +index 2b1a8bc600..8feec5f9ff 100644 +--- a/.github/workflows/test.yml ++++ b/.github/workflows/test.yml +@@ -5,7 +5,8 @@ on: + pull_request: + push: + branches: +- - main ++ - v[0-9]+.[0-9]+.x-celestia ++ - release/** + + permissions: + contents: read +@@ -38,9 +39,6 @@ jobs: + - name: Build + run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make build + +- - name: Build cosmovisor +- run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make cosmovisor +- + test-submodules: + runs-on: ubuntu-latest + container: tendermintdev/docker-tm-db-testing +@@ -177,23 +175,6 @@ jobs: + file: ./coverage.txt + if: env.GIT_DIFF + +- test-rosetta: +- runs-on: ubuntu-latest +- timeout-minutes: 10 +- steps: +- - uses: actions/checkout@v3 +- - uses: technote-space/get-diff-action@v6.0.1 +- id: git_diff +- with: +- PATTERNS: | +- **/**.go +- go.mod +- go.sum +- - name: test rosetta +- run: | +- make test-rosetta +- # if: env.GIT_DIFF +- + liveness-test: + runs-on: ubuntu-latest + timeout-minutes: 15 +diff --git a/.golangci.yml b/.golangci.yml +index 08df5b3583..a2155d7176 100644 +--- a/.golangci.yml ++++ b/.golangci.yml +@@ -19,7 +19,7 @@ linters: + - misspell + - nakedret + - nolintlint +- - staticcheck ++ # - staticcheck disabling due to the sheer number of "this package has been moved to it's own module" errors TODO: reenable + - stylecheck + - typecheck + - unconvert +diff --git a/CHANGELOG.md b/CHANGELOG.md +index 0c09d1af02..0592756764 100644 +--- a/CHANGELOG.md ++++ b/CHANGELOG.md +@@ -37,6 +37,13 @@ Ref: https://keepachangelog.com/en/1.0.0/ + + ## [Unreleased] + ++### Improvements ++ ++* (x/gov) [#17387](https://github.com/cosmos/cosmos-sdk/pull/17387) Add `MsgSubmitProposal` `SetMsgs` method. ++* (x/gov) [#17354](https://github.com/cosmos/cosmos-sdk/issues/17354) Emit `VoterAddr` in `proposal_vote` event. ++* (x/genutil) [#17296](https://github.com/cosmos/cosmos-sdk/pull/17296) Add `MigrateHandler` to allow reuse migrate genesis related function. ++ * In v0.46, v0.47 this function is additive to the `genesis migrate` command. However in v0.50+, adding custom migrations to the `genesis migrate` command is directly possible. ++ + ## [v0.46.14](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.46.14) - 2023-07-17 + + ### Features +@@ -499,8 +506,8 @@ replace github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8 + + ### Improvements + +-* (types) [\#12201](https://github.com/cosmos/cosmos-sdk/pull/12201) Add `MustAccAddressFromBech32` util function +-* [\#11696](https://github.com/cosmos/cosmos-sdk/pull/11696) Rename `helpers.GenTx` to `GenSignedMockTx` to avoid confusion with genutil's `GenTxCmd`. ++* [\#12576](https://github.com/cosmos/cosmos-sdk/pull/12576) Remove dependency on cosmos/keyring and upgrade to 99designs/keyring v1.2.1 ++* [\#11693](https://github.com/cosmos/cosmos-sdk/pull/11693) Add validation for gentx cmd. + * (x/auth/vesting) [\#11652](https://github.com/cosmos/cosmos-sdk/pull/11652) Add util functions for `Period(s)` + * [\#11630](https://github.com/cosmos/cosmos-sdk/pull/11630) Add SafeSub method to sdk.Coin. + * [\#11511](https://github.com/cosmos/cosmos-sdk/pull/11511) Add api server flags to start command. +diff --git a/Makefile b/Makefile +index 464ed93248..8c3bb74f94 100644 +--- a/Makefile ++++ b/Makefile +@@ -120,10 +120,7 @@ $(BUILD_TARGETS): go.sum $(BUILDDIR)/ + $(BUILDDIR)/: + mkdir -p $(BUILDDIR)/ + +-cosmovisor: +- $(MAKE) -C cosmovisor cosmovisor +- +-.PHONY: build build-linux cosmovisor ++.PHONY: build build-linux + + mockgen_cmd=go run github.com/golang/mock/mockgen + +diff --git a/baseapp/abci.go b/baseapp/abci.go +index 7147d6d885..00d908f058 100644 +--- a/baseapp/abci.go ++++ b/baseapp/abci.go +@@ -53,6 +53,7 @@ func (app *BaseApp) InitChain(req abci.RequestInitChain) (res abci.ResponseInitC + // initialize the deliver state and check state with a correct header + app.setDeliverState(initHeader) + app.setCheckState(initHeader) ++ app.chainID = req.ChainId + + // Store the consensus params in the BaseApp's paramstore. Note, this must be + // done after the deliver state and context have been set as it's persisted +@@ -295,6 +296,25 @@ func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) (res abci.ResponseDeliv + } + } + ++// PreprocessTxs fullfills the celestia-core version of the ACBI interface. It ++// allows for arbitrary processing steps before transaction data is included in ++// the block. ++func (app *BaseApp) PrepareProposal(req abci.RequestPrepareProposal) abci.ResponsePrepareProposal { ++ // TODO(evan): fully implement ++ // pass through txs w/o processing for now ++ return abci.ResponsePrepareProposal{ ++ BlockData: req.BlockData, ++ } ++} ++ ++// ProcessProposal fulfills the celestia-core version of the ABCI++ interface. ++// It allows for arbitrary processing to occur after receiving a proposal block ++func (app *BaseApp) ProcessProposal(req abci.RequestProcessProposal) abci.ResponseProcessProposal { ++ return abci.ResponseProcessProposal{ ++ Result: abci.ResponseProcessProposal_ACCEPT, ++ } ++} ++ + // Commit implements the ABCI interface. It will commit all state that exists in + // the deliver state's multi-store and includes the resulting commit ID in the + // returned abci.ResponseCommit. Commit will set the check state based on the +diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go +index b42a56efca..41cc39eb62 100644 +--- a/baseapp/baseapp.go ++++ b/baseapp/baseapp.go +@@ -111,6 +111,10 @@ type BaseApp struct { // nolint: maligned + // abciListeners for hooking into the ABCI message processing of the BaseApp + // and exposing the requests and responses to external consumers + abciListeners []ABCIListener ++ ++ // chainID is the chainID of the chain that is set upon starting the chain ++ // via InitChain. ++ chainID string + } + + type appStore struct { +@@ -221,6 +225,10 @@ func (app *BaseApp) Trace() bool { + return app.trace + } + ++func (app *BaseApp) GetChainID() string { ++ return app.chainID ++} ++ + // MsgServiceRouter returns the MsgServiceRouter of a BaseApp. + func (app *BaseApp) MsgServiceRouter() *MsgServiceRouter { return app.msgServiceRouter } + +@@ -474,6 +482,8 @@ func (app *BaseApp) GetConsensusParams(ctx sdk.Context) *abci.ConsensusParams { + cp.Validator = &vp + } + ++ cp.Version = &tmproto.VersionParams{AppVersion: app.appVersion} ++ + return cp + } + +@@ -577,6 +587,17 @@ func (app *BaseApp) getState(mode runTxMode) *state { + return app.checkState + } + ++// NewProposalContext returns a context with a branched version of the state ++// that is safe to query during ProcessProposal. ++func (app *BaseApp) NewProposalContext(header tmproto.Header) sdk.Context { ++ // use custom query multistore if provided ++ ms := app.cms.CacheMultiStore() ++ ctx := sdk.NewContext(ms, header, false, app.logger).WithBlockGasMeter(storetypes.NewInfiniteGasMeter()) ++ ctx = ctx.WithConsensusParams(app.GetConsensusParams(ctx)) ++ ++ return ctx ++} ++ + // retrieve the context for the tx w/ txBytes and other memoized values. + func (app *BaseApp) getContextForTx(mode runTxMode, txBytes []byte) sdk.Context { + ctx := app.getState(mode).ctx. +diff --git a/client/config/config.go b/client/config/config.go +index f9e48c989d..806ef29048 100644 +--- a/client/config/config.go ++++ b/client/config/config.go +@@ -11,7 +11,7 @@ import ( + // Default constants + const ( + chainID = "" +- keyringBackend = "os" ++ keyringBackend = "test" + output = "text" + node = "tcp://localhost:26657" + broadcastMode = "sync" +diff --git a/client/flags/flags.go b/client/flags/flags.go +index 6dacc23737..96306f5ca4 100644 +--- a/client/flags/flags.go ++++ b/client/flags/flags.go +@@ -15,11 +15,11 @@ const ( + // failures due to state changes that might occur between the tx simulation + // and the actual run. + DefaultGasAdjustment = 1.0 +- DefaultGasLimit = 200000 ++ DefaultGasLimit = 210000 + GasFlagAuto = "auto" + + // DefaultKeyringBackend +- DefaultKeyringBackend = keyring.BackendOS ++ DefaultKeyringBackend = keyring.BackendTest + + // BroadcastBlock defines a tx broadcasting mode where the client waits for + // the tx to be committed in a block. +diff --git a/client/grpc/tmservice/types.pb.go b/client/grpc/tmservice/types.pb.go +index e9bb255f21..5473ff3db3 100644 +--- a/client/grpc/tmservice/types.pb.go ++++ b/client/grpc/tmservice/types.pb.go +@@ -32,10 +32,9 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + // Block is tendermint type Block, with the Header proposer address + // field converted to bech32 string. + type Block struct { +- Header Header `protobuf:"bytes,1,opt,name=header,proto3" json:"header"` +- Data types.Data `protobuf:"bytes,2,opt,name=data,proto3" json:"data"` +- Evidence types.EvidenceList `protobuf:"bytes,3,opt,name=evidence,proto3" json:"evidence"` +- LastCommit *types.Commit `protobuf:"bytes,4,opt,name=last_commit,json=lastCommit,proto3" json:"last_commit,omitempty"` ++ Header Header `protobuf:"bytes,1,opt,name=header,proto3" json:"header"` ++ Data types.Data `protobuf:"bytes,2,opt,name=data,proto3" json:"data"` ++ LastCommit *types.Commit `protobuf:"bytes,4,opt,name=last_commit,json=lastCommit,proto3" json:"last_commit,omitempty"` + } + + func (m *Block) Reset() { *m = Block{} } +@@ -85,13 +84,6 @@ func (m *Block) GetData() types.Data { + return types.Data{} + } + +-func (m *Block) GetEvidence() types.EvidenceList { +- if m != nil { +- return m.Evidence +- } +- return types.EvidenceList{} +-} +- + func (m *Block) GetLastCommit() *types.Commit { + if m != nil { + return m.LastCommit +@@ -266,46 +258,45 @@ func init() { + } + + var fileDescriptor_bb9931519c08e0d6 = []byte{ +- // 623 bytes of a gzipped FileDescriptorProto +- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xc1, 0x6e, 0xd3, 0x4c, +- 0x14, 0x85, 0xe3, 0xbf, 0x69, 0xe2, 0x4e, 0x9a, 0xb6, 0xff, 0xa8, 0xaa, 0xdc, 0x00, 0x4e, 0x55, +- 0x44, 0x29, 0x95, 0xb0, 0xdb, 0xb2, 0x81, 0x05, 0x12, 0x24, 0x41, 0x6a, 0xa5, 0xae, 0x2c, 0xc4, +- 0x82, 0x4d, 0x34, 0xb6, 0x07, 0x7b, 0x54, 0xdb, 0x63, 0x79, 0x26, 0x11, 0xbc, 0x45, 0x1f, 0xab, +- 0xcb, 0x2e, 0x59, 0x15, 0x94, 0x4a, 0x3c, 0x05, 0x0b, 0x34, 0x77, 0xc6, 0x6d, 0x42, 0x24, 0x56, +- 0xb1, 0xcf, 0xfd, 0xce, 0xf1, 0xdc, 0x7b, 0x47, 0x41, 0x47, 0x11, 0x17, 0x39, 0x17, 0x7e, 0x48, +- 0x04, 0xf5, 0x25, 0x2d, 0x62, 0x5a, 0xe5, 0xac, 0x90, 0xfe, 0xf4, 0x24, 0xa4, 0x92, 0x9c, 0xf8, +- 0xf2, 0x5b, 0x49, 0x85, 0x57, 0x56, 0x5c, 0x72, 0xec, 0x6a, 0xd6, 0x53, 0xac, 0xf7, 0xc0, 0x7a, +- 0x86, 0xed, 0x6d, 0x27, 0x3c, 0xe1, 0x80, 0xfa, 0xea, 0x49, 0xbb, 0x7a, 0x8f, 0xe7, 0x52, 0x21, +- 0x6d, 0x3e, 0xb3, 0xd7, 0x5f, 0xaa, 0xd2, 0x29, 0x8b, 0x69, 0x11, 0x51, 0x03, 0xb8, 0xf3, 0x87, +- 0xa2, 0x95, 0x60, 0xbc, 0x58, 0x0c, 0x48, 0x38, 0x4f, 0x32, 0xea, 0xc3, 0x5b, 0x38, 0xf9, 0xe2, +- 0x4b, 0x96, 0x53, 0x21, 0x49, 0x5e, 0x6a, 0x60, 0xff, 0xb7, 0x85, 0x56, 0x07, 0x19, 0x8f, 0x2e, +- 0xf1, 0x08, 0xb5, 0x52, 0x4a, 0x62, 0x5a, 0x39, 0xd6, 0x9e, 0x75, 0xd8, 0x39, 0x3d, 0xf0, 0xfe, +- 0xdd, 0x90, 0x77, 0x06, 0xf4, 0xa0, 0x79, 0x7d, 0xdb, 0x6f, 0x04, 0xc6, 0x8b, 0x8f, 0x51, 0x33, +- 0x26, 0x92, 0x38, 0xff, 0x41, 0xc6, 0xce, 0xbc, 0x4f, 0x9f, 0x6b, 0x44, 0x24, 0x31, 0x1e, 0x20, +- 0xf1, 0x3b, 0x64, 0xd7, 0x4d, 0x39, 0x2b, 0xe0, 0x72, 0x97, 0x5d, 0x1f, 0x0c, 0x71, 0xc1, 0x84, +- 0x34, 0xee, 0x7b, 0x17, 0x7e, 0x83, 0x3a, 0x19, 0x11, 0x72, 0x1c, 0xf1, 0x3c, 0x67, 0xd2, 0x69, +- 0x42, 0x88, 0xb3, 0x1c, 0x32, 0x84, 0x7a, 0x80, 0x14, 0xac, 0x9f, 0xf7, 0x7f, 0x35, 0x51, 0x4b, +- 0xf7, 0x81, 0xdf, 0xa2, 0xb6, 0x99, 0xa0, 0x19, 0xc0, 0x93, 0x85, 0xa6, 0x75, 0xc9, 0x1b, 0xf2, +- 0x42, 0xd0, 0x42, 0x4c, 0x84, 0x39, 0x45, 0xed, 0xc1, 0x07, 0xc8, 0x8e, 0x52, 0xc2, 0x8a, 0x31, +- 0x8b, 0xa1, 0xf9, 0xb5, 0x41, 0x67, 0x76, 0xdb, 0x6f, 0x0f, 0x95, 0x76, 0x3e, 0x0a, 0xda, 0x50, +- 0x3c, 0x8f, 0xf1, 0x8e, 0x1a, 0x33, 0x4b, 0x52, 0x09, 0xcd, 0xae, 0x04, 0xe6, 0x0d, 0xbf, 0x46, +- 0x4d, 0xb5, 0x1b, 0x73, 0xfa, 0x9e, 0xa7, 0x17, 0xe7, 0xd5, 0x8b, 0xf3, 0x3e, 0xd6, 0x8b, 0x1b, +- 0xd8, 0xea, 0xc3, 0x57, 0x3f, 0xfa, 0x56, 0x00, 0x0e, 0x3c, 0x44, 0x5d, 0x68, 0x3f, 0x54, 0x6b, +- 0x54, 0x9f, 0x5f, 0x85, 0x88, 0xdd, 0xe5, 0x01, 0xc0, 0xa2, 0xcf, 0x47, 0xe6, 0xe8, 0x30, 0x34, +- 0x2d, 0xc5, 0xf8, 0x10, 0x6d, 0xcd, 0xcd, 0x70, 0x9c, 0x12, 0x91, 0x3a, 0xad, 0x3d, 0xeb, 0x70, +- 0x3d, 0xd8, 0x78, 0x18, 0xd7, 0x19, 0x11, 0x29, 0x7e, 0x84, 0xd6, 0xd4, 0xde, 0x34, 0xd2, 0x06, +- 0xc4, 0x56, 0x02, 0x14, 0x9f, 0xa3, 0xcd, 0x29, 0xc9, 0x58, 0x4c, 0x24, 0xaf, 0x84, 0x46, 0x6c, +- 0x9d, 0xf2, 0x20, 0x03, 0x78, 0x8c, 0xb6, 0x0b, 0xfa, 0x55, 0x8e, 0xff, 0xa6, 0xd7, 0x80, 0xc6, +- 0xaa, 0xf6, 0x69, 0xd1, 0xf1, 0x0c, 0x6d, 0x44, 0xf5, 0xf0, 0x35, 0x8b, 0x80, 0xed, 0xde, 0xab, +- 0x80, 0xed, 0x22, 0x9b, 0x94, 0xa5, 0x06, 0x3a, 0x00, 0xb4, 0x49, 0x59, 0x42, 0xe9, 0x08, 0xfd, +- 0x0f, 0x3d, 0x56, 0x54, 0x4c, 0x32, 0x69, 0x42, 0xd6, 0x81, 0xd9, 0x54, 0x85, 0x40, 0xeb, 0xc0, +- 0x3e, 0x45, 0xdd, 0xfa, 0x7e, 0x69, 0xae, 0x0b, 0xdc, 0x7a, 0x2d, 0x02, 0xf4, 0x02, 0x6d, 0x95, +- 0x15, 0x2f, 0xb9, 0xa0, 0xd5, 0x98, 0xc4, 0x71, 0x45, 0x85, 0x70, 0x36, 0xd4, 0xee, 0x83, 0xcd, +- 0x5a, 0x7f, 0xaf, 0xe5, 0xc1, 0xc5, 0xf5, 0xcc, 0xb5, 0x6e, 0x66, 0xae, 0xf5, 0x73, 0xe6, 0x5a, +- 0x57, 0x77, 0x6e, 0xe3, 0xe6, 0xce, 0x6d, 0x7c, 0xbf, 0x73, 0x1b, 0x9f, 0x4f, 0x13, 0x26, 0xd3, +- 0x49, 0xe8, 0x45, 0x3c, 0xf7, 0xcd, 0xdf, 0x8d, 0xfe, 0x79, 0x29, 0xe2, 0x4b, 0x3f, 0xca, 0x18, +- 0x2d, 0xa4, 0x9f, 0x54, 0x65, 0xe4, 0xcb, 0x5c, 0xd0, 0x6a, 0xca, 0x22, 0x1a, 0xb6, 0xe0, 0x5a, +- 0xbc, 0xfa, 0x13, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x09, 0x93, 0xea, 0xa0, 0x04, 0x00, 0x00, ++ // 598 bytes of a gzipped FileDescriptorProto ++ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xcd, 0x6e, 0xd3, 0x4e, ++ 0x14, 0xc5, 0xe3, 0x7f, 0xd3, 0x7c, 0x4c, 0xbe, 0xfa, 0x1f, 0x55, 0x95, 0x1b, 0xc0, 0x89, 0x8a, ++ 0x28, 0xa1, 0x12, 0x76, 0x5b, 0x36, 0xb0, 0x60, 0x41, 0x92, 0x45, 0x23, 0xb1, 0xb2, 0x10, 0x0b, ++ 0x36, 0xd1, 0xd8, 0x1e, 0xec, 0x51, 0x6d, 0x8f, 0xe5, 0x99, 0x44, 0xf0, 0x16, 0x7d, 0x1e, 0x9e, ++ 0xa0, 0xcb, 0x2e, 0x59, 0x15, 0x94, 0x48, 0x3c, 0x07, 0x9a, 0x3b, 0x36, 0x49, 0xa8, 0xc4, 0x2a, ++ 0x33, 0xf7, 0xfe, 0xce, 0x9d, 0x33, 0x67, 0x22, 0xa3, 0x33, 0x9f, 0x8b, 0x84, 0x0b, 0xc7, 0x23, ++ 0x82, 0x3a, 0x92, 0xa6, 0x01, 0xcd, 0x13, 0x96, 0x4a, 0x67, 0x79, 0xe1, 0x51, 0x49, 0x2e, 0x1c, ++ 0xf9, 0x35, 0xa3, 0xc2, 0xce, 0x72, 0x2e, 0x39, 0xb6, 0x34, 0x6b, 0x2b, 0xd6, 0xde, 0xb0, 0x76, ++ 0xc1, 0xf6, 0x0f, 0x43, 0x1e, 0x72, 0x40, 0x1d, 0xb5, 0xd2, 0xaa, 0xfe, 0xe3, 0xad, 0xa9, 0x30, ++ 0x6d, 0x7b, 0x66, 0xdf, 0xda, 0x3e, 0x93, 0xe6, 0x82, 0xf1, 0x74, 0xa7, 0x3f, 0x08, 0x39, 0x0f, ++ 0x63, 0xea, 0xc0, 0xce, 0x5b, 0x7c, 0x76, 0x24, 0x4b, 0xa8, 0x90, 0x24, 0xc9, 0x34, 0x70, 0xf2, ++ 0xcd, 0x40, 0xfb, 0xe3, 0x98, 0xfb, 0xd7, 0x78, 0x8a, 0x6a, 0x11, 0x25, 0x01, 0xcd, 0x4d, 0x63, ++ 0x68, 0x8c, 0x5a, 0x97, 0xa7, 0xf6, 0xbf, 0xfd, 0xda, 0x57, 0x40, 0x8f, 0xab, 0xb7, 0xf7, 0x83, ++ 0x8a, 0x5b, 0x68, 0xf1, 0x39, 0xaa, 0x06, 0x44, 0x12, 0xf3, 0x3f, 0x98, 0x71, 0xb4, 0xad, 0xd3, ++ 0xbe, 0xa6, 0x44, 0x92, 0x42, 0x03, 0x24, 0x7e, 0x83, 0x5a, 0x31, 0x11, 0x72, 0xee, 0xf3, 0x24, ++ 0x61, 0xd2, 0xac, 0x82, 0xd0, 0x7c, 0x28, 0x9c, 0x40, 0xdf, 0x45, 0x0a, 0xd6, 0xeb, 0x93, 0x5f, ++ 0x55, 0x54, 0xd3, 0x2e, 0xf0, 0x5b, 0x54, 0x2f, 0xee, 0x5f, 0xd8, 0x7f, 0xb2, 0x63, 0x59, 0xb7, ++ 0xec, 0x09, 0x4f, 0x05, 0x4d, 0xc5, 0x42, 0x14, 0x0e, 0x4a, 0x0d, 0x3e, 0x45, 0x0d, 0x3f, 0x22, ++ 0x2c, 0x9d, 0xb3, 0x00, 0xac, 0x37, 0xc7, 0xad, 0xd5, 0xfd, 0xa0, 0x3e, 0x51, 0xb5, 0xd9, 0xd4, ++ 0xad, 0x43, 0x73, 0x16, 0xe0, 0x23, 0x15, 0x12, 0x0b, 0x23, 0x69, 0xee, 0x0d, 0x8d, 0xd1, 0x9e, ++ 0x5b, 0xec, 0xf0, 0x6b, 0x54, 0x55, 0xc9, 0x16, 0xee, 0xfb, 0xb6, 0x8e, 0xdd, 0x2e, 0x63, 0xb7, ++ 0x3f, 0x94, 0xb1, 0x8f, 0x1b, 0xea, 0xe0, 0x9b, 0x1f, 0x03, 0xc3, 0x05, 0x05, 0x9e, 0xa0, 0x0e, ++ 0x5c, 0xdf, 0x53, 0x8f, 0xa0, 0x8e, 0xdf, 0x87, 0x11, 0xc7, 0x0f, 0x03, 0x80, 0x67, 0x9a, 0x4d, ++ 0x0b, 0xeb, 0x10, 0x9a, 0x2e, 0x05, 0x78, 0x84, 0x0e, 0xb6, 0x32, 0x9c, 0x47, 0x44, 0x44, 0x66, ++ 0x6d, 0x68, 0x8c, 0xda, 0x6e, 0x77, 0x13, 0xd7, 0x15, 0x11, 0x11, 0x7e, 0x84, 0x9a, 0x2a, 0x75, ++ 0x8d, 0xd4, 0x01, 0x69, 0xa8, 0x02, 0x34, 0x9f, 0xa3, 0xde, 0x92, 0xc4, 0x2c, 0x20, 0x92, 0xe7, ++ 0x42, 0x23, 0x0d, 0x3d, 0x65, 0x53, 0x06, 0xf0, 0x1c, 0x1d, 0xa6, 0xf4, 0x8b, 0x9c, 0xff, 0x4d, ++ 0x37, 0x81, 0xc6, 0xaa, 0xf7, 0x71, 0x57, 0xf1, 0x0c, 0x75, 0xfd, 0x32, 0x7c, 0xcd, 0x22, 0x60, ++ 0x3b, 0x7f, 0xaa, 0x80, 0x1d, 0xa3, 0x06, 0xc9, 0x32, 0x0d, 0xb4, 0x00, 0xa8, 0x93, 0x2c, 0x83, ++ 0xd6, 0x19, 0xfa, 0x1f, 0xee, 0x98, 0x53, 0xb1, 0x88, 0x65, 0x31, 0xa4, 0x0d, 0x4c, 0x4f, 0x35, ++ 0x5c, 0x5d, 0x07, 0xf6, 0x29, 0xea, 0xd0, 0x25, 0x0b, 0x68, 0xea, 0x53, 0xcd, 0x75, 0x80, 0x6b, ++ 0x97, 0x45, 0x80, 0x5e, 0xa0, 0x83, 0x2c, 0xe7, 0x19, 0x17, 0x34, 0x9f, 0x93, 0x20, 0xc8, 0xa9, ++ 0x10, 0x66, 0x57, 0xbd, 0xbd, 0xdb, 0x2b, 0xeb, 0xef, 0x74, 0x79, 0xfc, 0xfe, 0x76, 0x65, 0x19, ++ 0x77, 0x2b, 0xcb, 0xf8, 0xb9, 0xb2, 0x8c, 0x9b, 0xb5, 0x55, 0xb9, 0x5b, 0x5b, 0x95, 0xef, 0x6b, ++ 0xab, 0xf2, 0xe9, 0x32, 0x64, 0x32, 0x5a, 0x78, 0xb6, 0xcf, 0x13, 0xa7, 0xf8, 0x16, 0xe8, 0x9f, ++ 0x97, 0x22, 0xb8, 0x76, 0xfc, 0x98, 0xd1, 0x54, 0x3a, 0x61, 0x9e, 0xf9, 0x8e, 0x4c, 0x04, 0xcd, ++ 0x97, 0xcc, 0xa7, 0x5e, 0x0d, 0xfe, 0x16, 0xaf, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x61, ++ 0xed, 0x16, 0x3d, 0x04, 0x00, 0x00, + } + + func (m *Block) Marshal() (dAtA []byte, err error) { +@@ -340,16 +331,6 @@ func (m *Block) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i-- + dAtA[i] = 0x22 + } +- { +- size, err := m.Evidence.MarshalToSizedBuffer(dAtA[:i]) +- if err != nil { +- return 0, err +- } +- i -= size +- i = encodeVarintTypes(dAtA, i, uint64(size)) +- } +- i-- +- dAtA[i] = 0x1a + { + size, err := m.Data.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { +@@ -466,12 +447,12 @@ func (m *Header) MarshalToSizedBuffer(dAtA []byte) (int, error) { + } + i-- + dAtA[i] = 0x2a +- n6, err6 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) +- if err6 != nil { +- return 0, err6 ++ n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) ++ if err5 != nil { ++ return 0, err5 + } +- i -= n6 +- i = encodeVarintTypes(dAtA, i, uint64(n6)) ++ i -= n5 ++ i = encodeVarintTypes(dAtA, i, uint64(n5)) + i-- + dAtA[i] = 0x22 + if m.Height != 0 { +@@ -520,8 +501,6 @@ func (m *Block) Size() (n int) { + n += 1 + l + sovTypes(uint64(l)) + l = m.Data.Size() + n += 1 + l + sovTypes(uint64(l)) +- l = m.Evidence.Size() +- n += 1 + l + sovTypes(uint64(l)) + if m.LastCommit != nil { + l = m.LastCommit.Size() + n += 1 + l + sovTypes(uint64(l)) +@@ -688,39 +667,6 @@ func (m *Block) Unmarshal(dAtA []byte) error { + return err + } + iNdEx = postIndex +- case 3: +- if wireType != 2 { +- return fmt.Errorf("proto: wrong wireType = %d for field Evidence", wireType) +- } +- var msglen int +- for shift := uint(0); ; shift += 7 { +- if shift >= 64 { +- return ErrIntOverflowTypes +- } +- if iNdEx >= l { +- return io.ErrUnexpectedEOF +- } +- b := dAtA[iNdEx] +- iNdEx++ +- msglen |= int(b&0x7F) << shift +- if b < 0x80 { +- break +- } +- } +- if msglen < 0 { +- return ErrInvalidLengthTypes +- } +- postIndex := iNdEx + msglen +- if postIndex < 0 { +- return ErrInvalidLengthTypes +- } +- if postIndex > l { +- return io.ErrUnexpectedEOF +- } +- if err := m.Evidence.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { +- return err +- } +- iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastCommit", wireType) +diff --git a/client/grpc/tmservice/util.go b/client/grpc/tmservice/util.go +index aeffaa84c3..932ce60db8 100644 +--- a/client/grpc/tmservice/util.go ++++ b/client/grpc/tmservice/util.go +@@ -32,7 +32,6 @@ func convertBlock(tmblock *tmprototypes.Block) *Block { + b.Header = convertHeader(tmblock.Header) + b.LastCommit = tmblock.LastCommit + b.Data = tmblock.Data +- b.Evidence = tmblock.Evidence + + return b + } +diff --git a/client/tx_config.go b/client/tx_config.go +index 5c5fd2695e..2b319fa6ca 100644 +--- a/client/tx_config.go ++++ b/client/tx_config.go +@@ -13,6 +13,7 @@ type ( + TxEncodingConfig interface { + TxEncoder() sdk.TxEncoder + TxDecoder() sdk.TxDecoder ++ SetTxDecoder(sdk.TxDecoder) + TxJSONEncoder() sdk.TxEncoder + TxJSONDecoder() sdk.TxDecoder + MarshalSignatureJSON([]signingtypes.SignatureV2) ([]byte, error) +diff --git a/client/v2/internal/buf.lock b/client/v2/internal/buf.lock +index 373428d3a3..3278c9b656 100644 +--- a/client/v2/internal/buf.lock ++++ b/client/v2/internal/buf.lock +@@ -4,16 +4,20 @@ deps: + - remote: buf.build + owner: cosmos + repository: cosmos-proto ++ branch: main + commit: 1935555c206d4afb9e94615dfd0fad31 + - remote: buf.build + owner: cosmos + repository: cosmos-sdk +- commit: 8cb30a2c4de74dc9bd8d260b1e75e176 ++ branch: main ++ commit: 86d2a697b026488089f13a71ceb3815c + - remote: buf.build + owner: cosmos + repository: gogo-proto ++ branch: main + commit: bee5511075b7499da6178d9e4aaa628b + - remote: buf.build + owner: googleapis + repository: googleapis +- commit: 62f35d8aed1149c291d606d958a7ce32 ++ branch: main ++ commit: 40f07f5b563941f2b20b991a7aedd53d +diff --git a/contrib/devtools/Makefile b/contrib/devtools/Makefile +index f8a5de4edd..62765e7476 100644 +--- a/contrib/devtools/Makefile ++++ b/contrib/devtools/Makefile +@@ -57,17 +57,17 @@ tools-stamp: statik runsim + # in a row. + touch $@ + +-# Install the runsim binary ++# Install the runsim binary. + statik: $(STATIK) + $(STATIK): + @echo "Installing statik..." +- @go install github.com/rakyll/statik@v0.1.6 ++ @(cd /tmp && go install github.com/rakyll/statik@v0.1.6) + +-# Install the runsim binary ++# Install the runsim binary. + runsim: $(RUNSIM) + $(RUNSIM): + @echo "Installing runsim..." +- @go install github.com/cosmos/tools/cmd/runsim@v1.0.0 ++ @(cd /tmp && go install github.com/cosmos/tools/cmd/runsim@v1.0.0) + + tools-clean: + rm -f $(STATIK) $(GOLANGCI_LINT) $(RUNSIM) +diff --git a/cosmovisor/.gitignore b/cosmovisor/.gitignore +deleted file mode 100644 +index fe1602e647..0000000000 +--- a/cosmovisor/.gitignore ++++ /dev/null +@@ -1 +0,0 @@ +-/cosmovisor +diff --git a/cosmovisor/.goreleaser.yml b/cosmovisor/.goreleaser.yml +deleted file mode 100644 +index 3cb3f9a5f8..0000000000 +--- a/cosmovisor/.goreleaser.yml ++++ /dev/null +@@ -1,40 +0,0 @@ +-project_name: cosmovisor +- +-release: +- disable: false +- name_template: "{{.Tag}}" +- +-before: +- hooks: +- - go mod tidy +- +-builds: +- - main: ./cmd/cosmovisor +- ldflags: +- - -X 'github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor/cmd.Version={{ replace .Version "cosmovisor/" "" }}' +- goos: +- - linux +- - windows +- - darwin +- goarch: +- - amd64 +- - arm64 +- env: +- - CGO_ENABLED=0 +- +-archives: +- - name_template: '{{ replace .Version "cosmovisor/" "cosmovisor-" }}-{{ .Os }}-{{ .Arch }}' +- format_overrides: +- - goos: windows +- format: zip +- +-checksum: +- name_template: 'SHA256SUMS-{{ replace .Version "cosmovisor/" "cosmovisor-" }}.txt' +- algorithm: sha256 +-changelog: +- skip: true +- sort: asc +- filters: +- exclude: +- - '^docs:' +- - '^test:' +diff --git a/cosmovisor/CHANGELOG.md b/cosmovisor/CHANGELOG.md +deleted file mode 100644 +index 60be657971..0000000000 +--- a/cosmovisor/CHANGELOG.md ++++ /dev/null +@@ -1,85 +0,0 @@ +- +- +-# Changelog +- +-## [Unreleased] +- +- +-### Features +- +-* [\#11823](https://github.com/cosmos/cosmos-sdk/pull/11823) Refactor `cosmovisor` CLI to use `cobra`. +-* [\#11731](https://github.com/cosmos/cosmos-sdk/pull/11731) `cosmovisor version -o json` returns the cosmovisor version and the result of `simd --output json --long` in one JSON object. +- +-## v1.1.0 2022-10-02 +- +-### Features +- +-* [\#10285](https://github.com/cosmos/cosmos-sdk/pull/10316) Added `run` command to run the associated app. +-* [\#10649](https://github.com/cosmos/cosmos-sdk/pull/10649) Customize backup directory. Added new env variable: `DAEMON_BACKUP_DIR`. If it is set, cosmovisor will backup the app data in ``DAEMON_BACKUP_DIR` before running the update. +- +-### Deprecated +- +-* [\#10285](https://github.com/cosmos/cosmos-sdk/pull/10316) Running `cosmovisor` without the `run` argument. +- +-### Bug Fixes +- +-* [\#10458](https://github.com/cosmos/cosmos-sdk/pull/10458) Fix version when using 'go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0' to install cosmovisor. +- +-## v1.0.0 2021-09-30 +- +-### Features +- +-* [\#8590](https://github.com/cosmos/cosmos-sdk/pull/8590) File watcher for cosmovisor. Instead of parsing logs from stdin and stderr, we watch the `/data/upgrade-info.json` file updates using polling mechanism. +-* [\#9999](https://github.com/cosmos/cosmos-sdk/pull/10103) Added `version` command that returns the cosmovisor version and the application version. +-* [\#9973](https://github.com/cosmos/cosmos-sdk/pull/10056) Added support for pre-upgrade command in Cosmovisor to be called before the binary is upgraded. Added new environmental variable `DAEMON_PREUPGRADE_MAX_RETRIES` that holds the maximum number of times to reattempt pre-upgrade before failing. +-* [\#10126](https://github.com/cosmos/cosmos-sdk/pull/10229) Added `help`. +- +-### Improvements +- +-* [\#10018](https://github.com/cosmos/cosmos-sdk/pull/10018) Strict boolean argument parsing: cosmovisor will fail if user will not set correctly a boolean variable. Correct values are: "true", "false", "" (not setting) - all case not sensitive. +-* [\#10036](https://github.com/cosmos/cosmos-sdk/pull/10036) Improve logs when downloading the binary. +-* [\#10217](https://github.com/cosmos/cosmos-sdk/pull/10217) Replacing logging to use zerolog. +- +-### CLI Breaking +- +-* [\#10128](https://github.com/cosmos/cosmos-sdk/pull/10128) Change default value of `DAEMON_RESTART_AFTER_UPGRADE` to `true`. +- +-## v0.1 2021-08-06 +- +-This is the first release and we started this changelog on 2021-07-01. See the [README](https://github.com/cosmos/cosmos-sdk/blob/release/cosmovisor/v0.1.x/cosmovisor/CHANGELOG.md) file for the full list of features. +- +-## Features +- +-* [\#9652](https://github.com/cosmos/cosmos-sdk/pull/9652) Add backup option for cosmovisor. +diff --git a/cosmovisor/Makefile b/cosmovisor/Makefile +deleted file mode 100644 +index d904c990cc..0000000000 +--- a/cosmovisor/Makefile ++++ /dev/null +@@ -1,13 +0,0 @@ +-#!/usr/bin/make -f +- +-VERSION := $(shell echo $(shell git describe --always --match "cosmovisor/v*") | sed 's/^cosmovisor[/]//') +- +-all: cosmovisor test +- +-cosmovisor: +- go build -ldflags="-X 'github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor/cmd.Version=$(VERSION)'" -mod=readonly ./cmd/cosmovisor +- +-test: +- go test -mod=readonly -race ./... +- +-.PHONY: all cosmovisor test +diff --git a/cosmovisor/README.md b/cosmovisor/README.md +deleted file mode 100644 +index 29dc3d000b..0000000000 +--- a/cosmovisor/README.md ++++ /dev/null +@@ -1,322 +0,0 @@ +-# Cosmosvisor +- +-`cosmovisor` is a small process manager for Cosmos SDK application binaries that monitors the governance module for incoming chain upgrade proposals. If it sees a proposal that gets approved, `cosmovisor` can automatically download the new binary, stop the current binary, switch from the old binary to the new one, and finally restart the node with the new binary. +- +-## Design +- +-Cosmovisor is designed to be used as a wrapper for a `Cosmos SDK` app: +- +-* it will pass arguments to the associated app (configured by `DAEMON_NAME` env variable). +- Running `cosmovisor run arg1 arg2 ....` will run `app arg1 arg2 ...`; +-* it will manage an app by restarting and upgrading if needed; +-* it is configured using environment variables, not positional arguments. +- +-*Note: If new versions of the application are not set up to run in-place store migrations, migrations will need to be run manually before restarting `cosmovisor` with the new binary. For this reason, we recommend applications adopt in-place store migrations.* +- +-*Note: If validators would like to enable the auto-download option (which [we don't recommend](#auto-download)), and they are currently running an application using Cosmos SDK `v0.42`, they will need to use Cosmovisor [`v0.1`](https://github.com/cosmos/cosmos-sdk/releases/tag/cosmovisor%2Fv0.1.0). Later versions of Cosmovisor do not support Cosmos SDK `v0.44.3` or earlier if the auto-download option is enabled.* +- +-## Contributing +- +-Cosmovisor is part of the Cosmos SDK monorepo, but it's a separate module with it's own release schedule. +- +-Release branches have the following format `release/cosmovisor/vA.B.x`, where A and B are a number (e.g. `release/cosmovisor/v0.1.x`). Releases are tagged using the following format: `cosmovisor/vA.B.C`. +- +-## Setup +- +-### Installation +- +-To install the latest version of `cosmovisor`, run the following command: +- +-```sh +-go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@latest +-``` +- +-To install a previous version, you can specify the version. IMPORTANT: Chains that use Cosmos-SDK v0.44.3 or earlier (eg v0.44.2) and want to use auto-download feature MUST use Cosmovisor v0.1.0 +- +-```sh +-go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v0.1.0 +-``` +- +-You can run `cosmovisor version` to check the Cosmovisor version (works only with Cosmovisor >1.1.0). +- +-You can also install from source by pulling the cosmos-sdk repository and switching to the correct version and building as follows: +- +-```sh +-git clone git@github.com:cosmos/cosmos-sdk +-cd cosmos-sdk +-git checkout cosmovisor/vx.x.x +-make cosmovisor +-``` +- +-This will build cosmovisor in `/cosmovisor` directory. Afterwards you may want to put it into your machine's PATH like as follows: +- +-```sh +-cp cosmovisor/cosmovisor ~/go/bin/cosmovisor +-``` +- +-*Note: If you are using go `v1.15` or earlier, you will need to use `go get`, and you may want to run the command outside a project directory.* +- +-### Command Line Arguments And Environment Variables +- +-The first argument passed to `cosmovisor` is the action for `cosmovisor` to take. Options are: +- +-* `help`, `--help`, or `-h` - Output `cosmovisor` help information and check your `cosmovisor` configuration. +-* `run` - Run the configured binary using the rest of the provided arguments. +-* `version` - Output the `cosmovisor` version and also run the binary with the `version` argument. +- +-All arguments passed to `cosmovisor run` will be passed to the application binary (as a subprocess). `cosmovisor` will return `/dev/stdout` and `/dev/stderr` of the subprocess as its own. For this reason, `cosmovisor run` cannot accept any command-line arguments other than those available to the application binary. +- +-*Note: Use of `cosmovisor` without one of the action arguments is deprecated. For backwards compatibility, if the first argument is not an action argument, `run` is assumed. However, this fallback might be removed in future versions, so it is recommended that you always provide `run`. +- +-`cosmovisor` reads its configuration from environment variables: +- +-* `DAEMON_HOME` is the location where the `cosmovisor/` directory is kept that contains the genesis binary, the upgrade binaries, and any additional auxiliary files associated with each binary (e.g. `$HOME/.gaiad`, `$HOME/.regend`, `$HOME/.simd`, etc.). +-* `DAEMON_NAME` is the name of the binary itself (e.g. `gaiad`, `regend`, `simd`, etc.). +-* `DAEMON_ALLOW_DOWNLOAD_BINARIES` (*optional*), if set to `true`, will enable auto-downloading of new binaries (for security reasons, this is intended for full nodes rather than validators). By default, `cosmovisor` will not auto-download new binaries. +-* `DAEMON_RESTART_AFTER_UPGRADE` (*optional*, default = `true`), if `true`, restarts the subprocess with the same command-line arguments and flags (but with the new binary) after a successful upgrade. Otherwise (`false`), `cosmovisor` stops running after an upgrade and requires the system administrator to manually restart it. Note restart is only after the upgrade and does not auto-restart the subprocess after an error occurs. +-* `DAEMON_POLL_INTERVAL` is the interval length for polling the upgrade plan file. The value can either be a number (in milliseconds) or a duration (e.g. `1s`). Default: 300 milliseconds. +-* `DAEMON_BACKUP_DIR` option to set a custom backup directory. If not set, `DAEMON_HOME` is used. +-* `UNSAFE_SKIP_BACKUP` (defaults to `false`), if set to `true`, upgrades directly without performing a backup. Otherwise (`false`, default) backs up the data before trying the upgrade. The default value of false is useful and recommended in case of failures and when a backup needed to rollback. We recommend using the default backup option `UNSAFE_SKIP_BACKUP=false`. +-* `DAEMON_PREUPGRADE_MAX_RETRIES` (defaults to `0`). The maximum number of times to call `pre-upgrade` in the application after exit status of `31`. After the maximum number of retries, cosmovisor fails the upgrade. +- +-### Folder Layout +- +-`$DAEMON_HOME/cosmovisor` is expected to belong completely to `cosmovisor` and the subprocesses that are controlled by it. The folder content is organized as follows: +- +-```text +-. +-├── current -> genesis or upgrades/ +-├── genesis +-│   └── bin +-│   └── $DAEMON_NAME +-└── upgrades +- └── +- ├── bin +- │   └── $DAEMON_NAME +- └── upgrade-info.json +-``` +- +-The `cosmovisor/` directory incudes a subdirectory for each version of the application (i.e. `genesis` or `upgrades/`). Within each subdirectory is the application binary (i.e. `bin/$DAEMON_NAME`) and any additional auxiliary files associated with each binary. `current` is a symbolic link to the currently active directory (i.e. `genesis` or `upgrades/`). The `name` variable in `upgrades/` is the URI-encoded name of the upgrade as specified in the upgrade module plan. +- +-Please note that `$DAEMON_HOME/cosmovisor` only stores the *application binaries*. The `cosmovisor` binary itself can be stored in any typical location (e.g. `/usr/local/bin`). The application will continue to store its data in the default data directory (e.g. `$HOME/.gaiad`) or the data directory specified with the `--home` flag. `$DAEMON_HOME` is independent of the data directory and can be set to any location. If you set `$DAEMON_HOME` to the same directory as the data directory, you will end up with a configuation like the following: +- +-```text +-.gaiad +-├── config +-├── data +-└── cosmovisor +-``` +- +-## Usage +- +-The system administrator is responsible for: +- +-* installing the `cosmovisor` binary +-* configuring the host's init system (e.g. `systemd`, `launchd`, etc.) +-* appropriately setting the environmental variables +-* manually installing the `genesis` folder +-* manually installing the `upgrades/` folders +- +-`cosmovisor` will set the `current` link to point to `genesis` at first start (i.e. when no `current` link exists) and then handle switching binaries at the correct points in time so that the system administrator can prepare days in advance and relax at upgrade time. +- +-In order to support downloadable binaries, a tarball for each upgrade binary will need to be packaged up and made available through a canonical URL. Additionally, a tarball that includes the genesis binary and all available upgrade binaries can be packaged up and made available so that all the necessary binaries required to sync a fullnode from start can be easily downloaded. +- +-The `DAEMON` specific code and operations (e.g. tendermint config, the application db, syncing blocks, etc.) all work as expected. The application binaries' directives such as command-line flags and environment variables also work as expected. +- +-### Detecting Upgrades +- +-`cosmovisor` is polling the `$DAEMON_HOME/data/upgrade-info.json` file for new upgrade instructions. The file is created by the x/upgrade module in `BeginBlocker` when an upgrade is detected and the blockchain reaches the upgrade height. +-The following heuristic is applied to detect the upgrade: +- +-* When starting, `cosmovisor` doesn't know much about currently running upgrade, except the binary which is `current/bin/`. It tries to read the `current/update-info.json` file to get information about the current upgrade name. +-* If neither `cosmovisor/current/upgrade-info.json` nor `data/upgrade-info.json` exist, then `cosmovisor` will wait for `data/upgrade-info.json` file to trigger an upgrade. +-* If `cosmovisor/current/upgrade-info.json` doesn't exist but `data/upgrade-info.json` exists, then `cosmovisor` assumes that whatever is in `data/upgrade-info.json` is a valid upgrade request. In this case `cosmovisor` tries immediately to make an upgrade according to the `name` attribute in `data/upgrade-info.json`. +-* Otherwise, `cosmovisor` waits for changes in `upgrade-info.json`. As soon as a new upgrade name is recorded in the file, `cosmovisor` will trigger an upgrade mechanism. +- +-When the upgrade mechanism is triggered, `cosmovisor` will: +- +-1. if `DAEMON_ALLOW_DOWNLOAD_BINARIES` is enabled, start by auto-downloading a new binary into `cosmovisor//bin` (where `` is the `upgrade-info.json:name` attribute); +-2. update the `current` symbolic link to point to the new directory and save `data/upgrade-info.json` to `cosmovisor/current/upgrade-info.json`. +- +-### Auto-Download +- +-Generally, `cosmovisor` requires that the system administrator place all relevant binaries on disk before the upgrade happens. However, for people who don't need such control and want an automated setup (maybe they are syncing a non-validating fullnode and want to do little maintenance), there is another option. +- +-**NOTE: we don't recommend using auto-download** because it doesn't verify in advance if a binary is available. If there will be any issue with downloading a binary, the cosmovisor will stop and won't restart an App (which could lead to a chain halt). +- +-If `DAEMON_ALLOW_DOWNLOAD_BINARIES` is set to `true`, and no local binary can be found when an upgrade is triggered, `cosmovisor` will attempt to download and install the binary itself based on the instructions in the `info` attribute in the `data/upgrade-info.json` file. The files is constructed by the x/upgrade module and contains data from the upgrade `Plan` object. The `Plan` has an info field that is expected to have one of the following two valid formats to specify a download: +- +-1. Store an os/architecture -> binary URI map in the upgrade plan info field as JSON under the `"binaries"` key. For example: +- +- ```json +- { +- "binaries": { +- "linux/amd64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f" +- } +- } +- ``` +- +- You can include multiple binaries at once to ensure more than one environment will receive the correct binaries: +- +- ```json +- { +- "binaries": { +- "linux/amd64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f", +- "linux/arm64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f", +- "darwin/amd64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f" +- } +- } +- ``` +- +- When submitting this as a proposal ensure there are no spaces. An example command using `gaiad` could look like: +- +- ```sh +- > gaiad tx gov submit-proposal software-upgrade Vega \ +- --title Vega \ +- --deposit 100uatom \ +- --upgrade-height 7368420 \ +- --upgrade-info '{"binaries":{"linux/amd64":"https://github.com/cosmos/gaia/releases/download/v6.0.0-rc1/gaiad-v6.0.0-rc1-linux-amd64","linux/arm64":"https://github.com/cosmos/gaia/releases/download/v6.0.0-rc1/gaiad-v6.0.0-rc1-linux-arm64","darwin/amd64":"https://github.com/cosmos/gaia/releases/download/v6.0.0-rc1/gaiad-v6.0.0-rc1-darwin-amd64"}}' \ +- --description "upgrade to Vega" \ +- --gas 400000 \ +- --from user \ +- --chain-id test \ +- --home test/val2 \ +- --node tcp://localhost:36657 \ +- --yes +- ``` +- +-2. Store a link to a file that contains all information in the above format (e.g. if you want to specify lots of binaries, changelog info, etc. without filling up the blockchain). For example: +- +- ```text +- https://example.com/testnet-1001-info.json?checksum=sha256:deaaa99fda9407c4dbe1d04bd49bab0cc3c1dd76fa392cd55a9425be074af01e +- ``` +- +-When `cosmovisor` is triggered to download the new binary, `cosmovisor` will parse the `"binaries"` field, download the new binary with [go-getter](https://github.com/hashicorp/go-getter), and unpack the new binary in the `upgrades/` folder so that it can be run as if it was installed manually. +- +-Note that for this mechanism to provide strong security guarantees, all URLs should include a SHA 256/512 checksum. This ensures that no false binary is run, even if someone hacks the server or hijacks the DNS. `go-getter` will always ensure the downloaded file matches the checksum if it is provided. `go-getter` will also handle unpacking archives into directories (in this case the download link should point to a `zip` file of all data in the `bin` directory). +- +-To properly create a sha256 checksum on linux, you can use the `sha256sum` utility. For example: +- +-```sh +-sha256sum ./testdata/repo/zip_directory/autod.zip +-``` +- +-The result will look something like the following: `29139e1381b8177aec909fab9a75d11381cab5adf7d3af0c05ff1c9c117743a7`. +- +-You can also use `sha512sum` if you would prefer to use longer hashes, or `md5sum` if you would prefer to use broken hashes. Whichever you choose, make sure to set the hash algorithm properly in the checksum argument to the URL. +- +-## Example: SimApp Upgrade +- +-The following instructions provide a demonstration of `cosmovisor` using the simulation application (`simapp`) shipped with the Cosmos SDK's source code. The following commands are to be run from within the `cosmos-sdk` repository. +- +-### Chain Setup +- +-Let's create a new chain using the `v0.44` version of simapp (the Cosmos SDK demo app): +- +-```sh +-git checkout v0.44.6 +-make build +-``` +- +-Clean `~/.simapp` (never do this in a production environment): +- +-```sh +-./build/simd unsafe-reset-all +-``` +- +-Set up app config: +- +-```sh +-./build/simd config chain-id test +-./build/simd config keyring-backend test +-./build/simd config broadcast-mode block +-``` +- +-Initialize the node and overwrite any previous genesis file (never do this in a production environment): +- +- +- +-```sh +-./build/simd init test --chain-id test --overwrite +-``` +- +-Set the minimum gas price to `0stake` in `~/.simapp/config/app.toml`: +- +-```sh +-minimum-gas-prices = "0stake" +-``` +- +-For the sake of this demonstration, amend `voting_period` in `genesis.json` to a reduced time of 20 seconds (`20s`): +- +-```sh +-cat <<< $(jq '.app_state.gov.voting_params.voting_period = "20s"' $HOME/.simapp/config/genesis.json) > $HOME/.simapp/config/genesis.json +-``` +- +-Create a validator, and setup genesis transaction: +- +- +- +- +-```sh +-./build/simd keys add validator +-./build/simd add-genesis-account validator 1000000000stake --keyring-backend test +-./build/simd gentx validator 1000000stake --chain-id test +-./build/simd collect-gentxs +-``` +- +-#### Prepare Cosmovisor and Start the Chain +- +-Set the required environment variables: +- +-```sh +-export DAEMON_NAME=simd +-export DAEMON_HOME=$HOME/.simapp +-``` +- +-Set the optional environment variable to trigger an automatic app restart: +- +-```sh +-export DAEMON_RESTART_AFTER_UPGRADE=true +-``` +- +-Create the folder for the genesis binary and copy the `simd` binary: +- +-```sh +-mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin +-cp ./build/simd $DAEMON_HOME/cosmovisor/genesis/bin +-``` +- +-Now you can run cosmovisor with simapp v0.44: +- +-```sh +-cosmovisor run start +-``` +- +-#### Update App +- +-Update app to the latest version (e.g. v0.45). +- +-Next, we can add a migration - which is defined using `x/upgrade` [upgrade plan](https://github.com/cosmos/cosmos-sdk/blob/main/docs/core/upgrade.md) (you may refer to a past version if you are using an older Cosmos SDK release). In a migration we can do any deterministic state change. +- +-Build the new version `simd` binary: +- +-```sh +-make build +-``` +- +-Create the folder for the upgrade binary and copy the `simd` binary: +- +-```sh +-mkdir -p $DAEMON_HOME/cosmovisor/upgrades/test1/bin +-cp ./build/simd $DAEMON_HOME/cosmovisor/upgrades/test1/bin +-``` +- +-Open a new terminal window and submit an upgrade proposal along with a deposit and a vote (these commands must be run within 20 seconds of each other): +- +-```sh +-./build/simd tx gov submit-proposal software-upgrade test1 --title upgrade --description upgrade --upgrade-height 200 --from validator --yes +-./build/simd tx gov deposit 1 10000000stake --from validator --yes +-./build/simd tx gov vote 1 yes --from validator --yes +-``` +- +-The upgrade will occur automatically at height 200. Note: you may need to change the upgrade height in the snippet above if your test play takes more time. +diff --git a/cosmovisor/RELEASE_NOTES.md b/cosmovisor/RELEASE_NOTES.md +deleted file mode 100644 +index ecec049981..0000000000 +--- a/cosmovisor/RELEASE_NOTES.md ++++ /dev/null +@@ -1,28 +0,0 @@ +-# Cosmovisor v1.1.0 Release Notes +- +-### New execution model +- +-With this release we are shifting to a new CLI design: +- +-* in the past, Cosmovisor was designed to act as a wrapper for a Cosmos App. An admin could link it and use it instead of the Cosmos App. When running it will pass all options and configuration parameters to the app. Hence the only way to configure the Cosmovisor was through environment variables. +-* now, we are moving to a more traditional model, where Cosmovisor has it's own command set and is a true supervisor. +- +-New commands have been added: +- +-* `run` will start the Cosmos App and pass remaining arguments to the app (similar to `npm run`) +-* `help` will display Cosmovisor help +-* `version` will display both Cosmovisor and the associated app version. +- +-The existing way of starting an app with Cosmovisor has been deprecated (`cosmovisor [app params]`) and will be removed in the future version. Please use `cosmovisor run [app pararms]` instead. +- +-### New Features +- +-We added a new configuration option: `DAEMON_BACKUP_DIR` (as env variable). When set, Cosmovisor will create backup the app data backup in that directory (instead of using the app home directory) before running the update. See the [README](https://github.com/cosmos/cosmos-sdk/blob/main/cosmovisor/README.md#command-line-arguments-and-environment-variables) file for more details. +- +-### Bug Fixes +- +-* Fixed `cosmovisor version` output when installed using 'go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0'. +- +-### Changelog +- +-For more details, please see the [CHANGELOG](https://github.com/cosmos/cosmos-sdk/blob/cosmovisor/v1.1.0/cosmovisor/CHANGELOG.md). +diff --git a/cosmovisor/args.go b/cosmovisor/args.go +deleted file mode 100644 +index c9a0d36a92..0000000000 +--- a/cosmovisor/args.go ++++ /dev/null +@@ -1,360 +0,0 @@ +-package cosmovisor +- +-import ( +- "encoding/json" +- "errors" +- "fmt" +- "net/url" +- "os" +- "path/filepath" +- "strconv" +- "strings" +- "time" +- +- cverrors "github.com/cosmos/cosmos-sdk/cosmovisor/errors" +- upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" +- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +- "github.com/rs/zerolog" +-) +- +-// environment variable names +-const ( +- EnvHome = "DAEMON_HOME" +- EnvName = "DAEMON_NAME" +- EnvDownloadBin = "DAEMON_ALLOW_DOWNLOAD_BINARIES" +- EnvRestartUpgrade = "DAEMON_RESTART_AFTER_UPGRADE" +- EnvSkipBackup = "UNSAFE_SKIP_BACKUP" +- EnvDataBackupPath = "DAEMON_DATA_BACKUP_DIR" +- EnvInterval = "DAEMON_POLL_INTERVAL" +- EnvPreupgradeMaxRetries = "DAEMON_PREUPGRADE_MAX_RETRIES" +-) +- +-const ( +- rootName = "cosmovisor" +- genesisDir = "genesis" +- upgradesDir = "upgrades" +- currentLink = "current" +-) +- +-// must be the same as x/upgrade/types.UpgradeInfoFilename +-const defaultFilename = "upgrade-info.json" +- +-// Config is the information passed in to control the daemon +-type Config struct { +- Home string +- Name string +- AllowDownloadBinaries bool +- RestartAfterUpgrade bool +- PollInterval time.Duration +- UnsafeSkipBackup bool +- DataBackupPath string +- PreupgradeMaxRetries int +- +- // currently running upgrade +- currentUpgrade upgradetypes.Plan +-} +- +-// Root returns the root directory where all info lives +-func (cfg *Config) Root() string { +- return filepath.Join(cfg.Home, rootName) +-} +- +-// GenesisBin is the path to the genesis binary - must be in place to start manager +-func (cfg *Config) GenesisBin() string { +- return filepath.Join(cfg.Root(), genesisDir, "bin", cfg.Name) +-} +- +-// UpgradeBin is the path to the binary for the named upgrade +-func (cfg *Config) UpgradeBin(upgradeName string) string { +- return filepath.Join(cfg.UpgradeDir(upgradeName), "bin", cfg.Name) +-} +- +-// UpgradeDir is the directory named upgrade +-func (cfg *Config) UpgradeDir(upgradeName string) string { +- safeName := url.PathEscape(upgradeName) +- return filepath.Join(cfg.BaseUpgradeDir(), safeName) +-} +- +-// BaseUpgradeDir is the directory containing the named upgrade directories. +-func (cfg *Config) BaseUpgradeDir() string { +- return filepath.Join(cfg.Root(), upgradesDir) +-} +- +-// UpgradeInfoFilePath is the expected upgrade-info filename created by `x/upgrade/keeper`. +-func (cfg *Config) UpgradeInfoFilePath() string { +- return filepath.Join(cfg.Home, "data", defaultFilename) +-} +- +-// SymLinkToGenesis creates a symbolic link from "./current" to the genesis directory. +-func (cfg *Config) SymLinkToGenesis() (string, error) { +- genesis := filepath.Join(cfg.Root(), genesisDir) +- link := filepath.Join(cfg.Root(), currentLink) +- +- if err := os.Symlink(genesis, link); err != nil { +- return "", err +- } +- // and return the genesis binary +- return cfg.GenesisBin(), nil +-} +- +-// CurrentBin is the path to the currently selected binary (genesis if no link is set) +-// This will resolve the symlink to the underlying directory to make it easier to debug +-func (cfg *Config) CurrentBin() (string, error) { +- cur := filepath.Join(cfg.Root(), currentLink) +- // if nothing here, fallback to genesis +- info, err := os.Lstat(cur) +- if err != nil { +- // Create symlink to the genesis +- return cfg.SymLinkToGenesis() +- } +- // if it is there, ensure it is a symlink +- if info.Mode()&os.ModeSymlink == 0 { +- // Create symlink to the genesis +- return cfg.SymLinkToGenesis() +- } +- +- // resolve it +- dest, err := os.Readlink(cur) +- if err != nil { +- // Create symlink to the genesis +- return cfg.SymLinkToGenesis() +- } +- +- // and return the binary +- binpath := filepath.Join(dest, "bin", cfg.Name) +- return binpath, nil +-} +- +-// GetConfigFromEnv will read the environmental variables into a config +-// and then validate it is reasonable +-func GetConfigFromEnv() (*Config, error) { +- var errs []error +- cfg := &Config{ +- Home: os.Getenv(EnvHome), +- Name: os.Getenv(EnvName), +- DataBackupPath: os.Getenv(EnvDataBackupPath), +- } +- +- if cfg.DataBackupPath == "" { +- cfg.DataBackupPath = cfg.Home +- } +- +- var err error +- if cfg.AllowDownloadBinaries, err = booleanOption(EnvDownloadBin, false); err != nil { +- errs = append(errs, err) +- } +- if cfg.RestartAfterUpgrade, err = booleanOption(EnvRestartUpgrade, true); err != nil { +- errs = append(errs, err) +- } +- if cfg.UnsafeSkipBackup, err = booleanOption(EnvSkipBackup, false); err != nil { +- errs = append(errs, err) +- } +- +- interval := os.Getenv(EnvInterval) +- if interval != "" { +- var intervalUInt uint64 +- intervalUInt, err = strconv.ParseUint(interval, 10, 32) +- if err == nil { +- cfg.PollInterval = time.Millisecond * time.Duration(intervalUInt) +- } else { +- cfg.PollInterval, err = time.ParseDuration(interval) +- } +- switch { +- case err != nil: +- errs = append(errs, fmt.Errorf("invalid %s: could not parse \"%s\" into either a duration or uint (milliseconds)", EnvInterval, interval)) +- case cfg.PollInterval <= 0: +- errs = append(errs, fmt.Errorf("invalid %s: must be greater than 0", EnvInterval)) +- } +- } else { +- cfg.PollInterval = 300 * time.Millisecond +- } +- +- envPreupgradeMaxRetriesVal := os.Getenv(EnvPreupgradeMaxRetries) +- if cfg.PreupgradeMaxRetries, err = strconv.Atoi(envPreupgradeMaxRetriesVal); err != nil && envPreupgradeMaxRetriesVal != "" { +- errs = append(errs, fmt.Errorf("%s could not be parsed to int: %w", EnvPreupgradeMaxRetries, err)) +- } +- +- errs = append(errs, cfg.validate()...) +- +- if len(errs) > 0 { +- return nil, cverrors.FlattenErrors(errs...) +- } +- return cfg, nil +-} +- +-// LogConfigOrError logs either the config details or the error. +-func LogConfigOrError(logger *zerolog.Logger, cfg *Config, err error) { +- if cfg == nil && err == nil { +- return +- } +- logger.Info().Msg("configuration:") +- switch { +- case err != nil: +- cverrors.LogErrors(logger, "configuration errors found", err) +- case cfg != nil: +- logger.Info().Msg(cfg.DetailString()) +- } +-} +- +-// validate returns an error if this config is invalid. +-// it enforces Home/cosmovisor is a valid directory and exists, +-// and that Name is set +-func (cfg *Config) validate() []error { +- var errs []error +- if cfg.Name == "" { +- errs = append(errs, errors.New(EnvName+" is not set")) +- } +- +- switch { +- case cfg.Home == "": +- errs = append(errs, errors.New(EnvHome+" is not set")) +- case !filepath.IsAbs(cfg.Home): +- errs = append(errs, errors.New(EnvHome+" must be an absolute path")) +- default: +- switch info, err := os.Stat(cfg.Root()); { +- case err != nil: +- errs = append(errs, fmt.Errorf("cannot stat home dir: %w", err)) +- case !info.IsDir(): +- errs = append(errs, fmt.Errorf("%s is not a directory", cfg.Root())) +- } +- } +- +- // check the DataBackupPath +- if cfg.UnsafeSkipBackup == true { +- return errs +- } +- // if UnsafeSkipBackup is false, check if the DataBackupPath valid +- switch { +- case cfg.DataBackupPath == "": +- errs = append(errs, fmt.Errorf("%s must not be empty", EnvDataBackupPath)) +- case !filepath.IsAbs(cfg.DataBackupPath): +- errs = append(errs, fmt.Errorf("%s must be an absolute path", cfg.DataBackupPath)) +- default: +- switch info, err := os.Stat(cfg.DataBackupPath); { +- case err != nil: +- errs = append(errs, fmt.Errorf("%q must be a valid directory: %w", cfg.DataBackupPath, err)) +- case !info.IsDir(): +- errs = append(errs, fmt.Errorf("%q must be a valid directory", cfg.DataBackupPath)) +- } +- } +- +- return errs +-} +- +-// SetCurrentUpgrade sets the named upgrade to be the current link, returns error if this binary doesn't exist +-func (cfg *Config) SetCurrentUpgrade(u upgradetypes.Plan) error { +- // ensure named upgrade exists +- bin := cfg.UpgradeBin(u.Name) +- +- if err := EnsureBinary(bin); err != nil { +- return err +- } +- +- // set a symbolic link +- link := filepath.Join(cfg.Root(), currentLink) +- safeName := url.PathEscape(u.Name) +- upgrade := filepath.Join(cfg.Root(), upgradesDir, safeName) +- +- // remove link if it exists +- if _, err := os.Stat(link); err == nil { +- os.Remove(link) +- } +- +- // point to the new directory +- if err := os.Symlink(upgrade, link); err != nil { +- return fmt.Errorf("creating current symlink: %w", err) +- } +- +- cfg.currentUpgrade = u +- f, err := os.Create(filepath.Join(upgrade, upgradekeeper.UpgradeInfoFileName)) +- if err != nil { +- return err +- } +- bz, err := json.Marshal(u) +- if err != nil { +- return err +- } +- if _, err := f.Write(bz); err != nil { +- return err +- } +- return f.Close() +-} +- +-func (cfg *Config) UpgradeInfo() (upgradetypes.Plan, error) { +- if cfg.currentUpgrade.Name != "" { +- return cfg.currentUpgrade, nil +- } +- +- filename := filepath.Join(cfg.Root(), currentLink, upgradekeeper.UpgradeInfoFileName) +- _, err := os.Lstat(filename) +- var u upgradetypes.Plan +- var bz []byte +- if err != nil { // no current directory +- goto returnError +- } +- if bz, err = os.ReadFile(filename); err != nil { +- goto returnError +- } +- if err = json.Unmarshal(bz, &u); err != nil { +- goto returnError +- } +- cfg.currentUpgrade = u +- return cfg.currentUpgrade, nil +- +-returnError: +- cfg.currentUpgrade.Name = "_" +- return cfg.currentUpgrade, fmt.Errorf("failed to read %q: %w", filename, err) +-} +- +-// checks and validates env option +-func booleanOption(name string, defaultVal bool) (bool, error) { +- p := strings.ToLower(os.Getenv(name)) +- switch p { +- case "": +- return defaultVal, nil +- case "false": +- return false, nil +- case "true": +- return true, nil +- } +- return false, fmt.Errorf("env variable %q must have a boolean value (\"true\" or \"false\"), got %q", name, p) +-} +- +-// DetailString returns a multi-line string with details about this config. +-func (cfg Config) DetailString() string { +- configEntries := []struct{ name, value string }{ +- {EnvHome, cfg.Home}, +- {EnvName, cfg.Name}, +- {EnvDownloadBin, fmt.Sprintf("%t", cfg.AllowDownloadBinaries)}, +- {EnvRestartUpgrade, fmt.Sprintf("%t", cfg.RestartAfterUpgrade)}, +- {EnvInterval, fmt.Sprintf("%s", cfg.PollInterval)}, +- {EnvSkipBackup, fmt.Sprintf("%t", cfg.UnsafeSkipBackup)}, +- {EnvDataBackupPath, cfg.DataBackupPath}, +- {EnvPreupgradeMaxRetries, fmt.Sprintf("%d", cfg.PreupgradeMaxRetries)}, +- } +- derivedEntries := []struct{ name, value string }{ +- {"Root Dir", cfg.Root()}, +- {"Upgrade Dir", cfg.BaseUpgradeDir()}, +- {"Genesis Bin", cfg.GenesisBin()}, +- {"Monitored File", cfg.UpgradeInfoFilePath()}, +- {"Data Backup Dir", cfg.DataBackupPath}, +- } +- +- var sb strings.Builder +- sb.WriteString("Configurable Values:\n") +- for _, kv := range configEntries { +- sb.WriteString(fmt.Sprintf(" %s: %s\n", kv.name, kv.value)) +- } +- sb.WriteString("Derived Values:\n") +- dnl := 0 +- for _, kv := range derivedEntries { +- if len(kv.name) > dnl { +- dnl = len(kv.name) +- } +- } +- dFmt := fmt.Sprintf(" %%%ds: %%s\n", dnl) +- for _, kv := range derivedEntries { +- sb.WriteString(fmt.Sprintf(dFmt, kv.name, kv.value)) +- } +- return sb.String() +-} +diff --git a/cosmovisor/args_test.go b/cosmovisor/args_test.go +deleted file mode 100644 +index e2f0a956b9..0000000000 +--- a/cosmovisor/args_test.go ++++ /dev/null +@@ -1,638 +0,0 @@ +-package cosmovisor +- +-import ( +- "bytes" +- "fmt" +- "io" +- "os" +- "path/filepath" +- "testing" +- "time" +- +- "github.com/rs/zerolog" +- "github.com/stretchr/testify/assert" +- "github.com/stretchr/testify/require" +- "github.com/stretchr/testify/suite" +- +- "github.com/cosmos/cosmos-sdk/cosmovisor/errors" +-) +- +-type argsTestSuite struct { +- suite.Suite +-} +- +-func TestArgsTestSuite(t *testing.T) { +- suite.Run(t, new(argsTestSuite)) +-} +- +-// cosmovisorEnv are the string values of environment variables used to configure Cosmovisor. +-type cosmovisorEnv struct { +- Home string +- Name string +- DownloadBin string +- RestartUpgrade string +- SkipBackup string +- DataBackupPath string +- Interval string +- PreupgradeMaxRetries string +-} +- +-// ToMap creates a map of the cosmovisorEnv where the keys are the env var names. +-func (c cosmovisorEnv) ToMap() map[string]string { +- return map[string]string{ +- EnvHome: c.Home, +- EnvName: c.Name, +- EnvDownloadBin: c.DownloadBin, +- EnvRestartUpgrade: c.RestartUpgrade, +- EnvSkipBackup: c.SkipBackup, +- EnvDataBackupPath: c.DataBackupPath, +- EnvInterval: c.Interval, +- EnvPreupgradeMaxRetries: c.PreupgradeMaxRetries, +- } +-} +- +-// Set sets the field in this cosmovisorEnv corresponding to the provided envVar to the given envVal. +-func (c *cosmovisorEnv) Set(envVar, envVal string) { +- switch envVar { +- case EnvHome: +- c.Home = envVal +- case EnvName: +- c.Name = envVal +- case EnvDownloadBin: +- c.DownloadBin = envVal +- case EnvRestartUpgrade: +- c.RestartUpgrade = envVal +- case EnvSkipBackup: +- c.SkipBackup = envVal +- case EnvDataBackupPath: +- c.DataBackupPath = envVal +- case EnvInterval: +- c.Interval = envVal +- case EnvPreupgradeMaxRetries: +- c.PreupgradeMaxRetries = envVal +- default: +- panic(fmt.Errorf("Unknown environment variable [%s]. Ccannot set field to [%s]. ", envVar, envVal)) +- } +-} +- +-// clearEnv clears environment variables and what they were. +-// Designed to be used like this: +-// +-// initialEnv := clearEnv() +-// defer setEnv(nil, initialEnv) +-func (s *argsTestSuite) clearEnv() *cosmovisorEnv { +- s.T().Logf("Clearing environment variables.") +- rv := cosmovisorEnv{} +- for envVar := range rv.ToMap() { +- rv.Set(envVar, os.Getenv(envVar)) +- s.Require().NoError(os.Unsetenv(envVar)) +- } +- return &rv +-} +- +-// setEnv sets environment variables to the values provided. +-// If t is not nil, and there's a problem, the test will fail immediately. +-// If t is nil, problems will just be logged using s.T(). +-func (s *argsTestSuite) setEnv(t *testing.T, env *cosmovisorEnv) { +- if t == nil { +- s.T().Logf("Restoring environment variables.") +- } +- for envVar, envVal := range env.ToMap() { +- var err error +- var msg string +- if len(envVal) != 0 { +- err = os.Setenv(envVar, envVal) +- msg = fmt.Sprintf("setting %s to %s", envVar, envVal) +- } else { +- err = os.Unsetenv(envVar) +- msg = fmt.Sprintf("unsetting %s", envVar) +- } +- switch { +- case t != nil: +- require.NoError(t, err, msg) +- case err != nil: +- s.T().Logf("error %s: %v", msg, err) +- default: +- s.T().Logf("done %s", msg) +- } +- } +-} +- +-func (s *argsTestSuite) TestConfigPaths() { +- cases := map[string]struct { +- cfg Config +- upgradeName string +- expectRoot string +- expectGenesis string +- expectUpgrade string +- }{ +- "simple": { +- cfg: Config{Home: "/foo", Name: "myd"}, +- upgradeName: "bar", +- expectRoot: fmt.Sprintf("/foo/%s", rootName), +- expectGenesis: fmt.Sprintf("/foo/%s/genesis/bin/myd", rootName), +- expectUpgrade: fmt.Sprintf("/foo/%s/upgrades/bar/bin/myd", rootName), +- }, +- "handle space": { +- cfg: Config{Home: "/longer/prefix/", Name: "yourd"}, +- upgradeName: "some spaces", +- expectRoot: fmt.Sprintf("/longer/prefix/%s", rootName), +- expectGenesis: fmt.Sprintf("/longer/prefix/%s/genesis/bin/yourd", rootName), +- expectUpgrade: "/longer/prefix/cosmovisor/upgrades/some%20spaces/bin/yourd", +- }, +- } +- +- for _, tc := range cases { +- s.Require().Equal(tc.cfg.Root(), filepath.FromSlash(tc.expectRoot)) +- s.Require().Equal(tc.cfg.GenesisBin(), filepath.FromSlash(tc.expectGenesis)) +- s.Require().Equal(tc.cfg.UpgradeBin(tc.upgradeName), filepath.FromSlash(tc.expectUpgrade)) +- } +-} +- +-// Test validate +-// add more test in test validate +-func (s *argsTestSuite) TestValidate() { +- relPath := filepath.Join("testdata", "validate") +- absPath, err := filepath.Abs(relPath) +- s.Require().NoError(err) +- +- testdata, err := filepath.Abs("testdata") +- s.Require().NoError(err) +- +- cases := map[string]struct { +- cfg Config +- valid bool +- }{ +- "happy": { +- cfg: Config{Home: absPath, Name: "bind", DataBackupPath: absPath}, +- valid: true, +- }, +- "happy with download": { +- cfg: Config{Home: absPath, Name: "bind", AllowDownloadBinaries: true, DataBackupPath: absPath}, +- valid: true, +- }, +- "happy with skip data backup": { +- cfg: Config{Home: absPath, Name: "bind", UnsafeSkipBackup: true, DataBackupPath: absPath}, +- valid: true, +- }, +- "happy with skip data backup and empty data backup path": { +- cfg: Config{Home: absPath, Name: "bind", UnsafeSkipBackup: true, DataBackupPath: ""}, +- valid: true, +- }, +- "happy with skip data backup and no such data backup path dir": { +- cfg: Config{Home: absPath, Name: "bind", UnsafeSkipBackup: true, DataBackupPath: filepath.FromSlash("/no/such/dir")}, +- valid: true, +- }, +- "happy with skip data backup and relative data backup path": { +- cfg: Config{Home: absPath, Name: "bind", UnsafeSkipBackup: true, DataBackupPath: relPath}, +- valid: true, +- }, +- "missing home": { +- cfg: Config{Name: "bind"}, +- valid: false, +- }, +- "missing name": { +- cfg: Config{Home: absPath}, +- valid: false, +- }, +- "relative home path": { +- cfg: Config{Home: relPath, Name: "bind"}, +- valid: false, +- }, +- "no upgrade manager subdir": { +- cfg: Config{Home: testdata, Name: "bind"}, +- valid: false, +- }, +- "no such home dir": { +- cfg: Config{Home: filepath.FromSlash("/no/such/dir"), Name: "bind"}, +- valid: false, +- }, +- "empty data backup path": { +- cfg: Config{Home: absPath, Name: "bind", DataBackupPath: ""}, +- valid: false, +- }, +- "no such data backup path dir": { +- cfg: Config{Home: absPath, Name: "bind", DataBackupPath: filepath.FromSlash("/no/such/dir")}, +- valid: false, +- }, +- "relative data backup path": { +- cfg: Config{Home: absPath, Name: "bind", DataBackupPath: relPath}, +- valid: false, +- }, +- } +- +- for _, tc := range cases { +- errs := tc.cfg.validate() +- if tc.valid { +- s.Require().Len(errs, 0) +- } else { +- s.Require().Greater(len(errs), 0, "number of errors returned") +- } +- } +-} +- +-func (s *argsTestSuite) TestEnsureBin() { +- relPath := filepath.Join("testdata", "validate") +- absPath, err := filepath.Abs(relPath) +- s.Require().NoError(err) +- +- cfg := Config{Home: absPath, Name: "dummyd", DataBackupPath: absPath} +- s.Require().Len(cfg.validate(), 0, "validation errors") +- +- s.Require().NoError(EnsureBinary(cfg.GenesisBin())) +- +- cases := map[string]struct { +- upgrade string +- hasBin bool +- }{ +- "proper": {"chain2", true}, +- "no binary": {"nobin", false}, +- "not executable": {"noexec", false}, +- "no directory": {"foobarbaz", false}, +- } +- +- for _, tc := range cases { +- err := EnsureBinary(cfg.UpgradeBin(tc.upgrade)) +- if tc.hasBin { +- s.Require().NoError(err) +- } else { +- s.Require().Error(err) +- } +- } +-} +- +-func (s *argsTestSuite) TestBooleanOption() { +- initialEnv := s.clearEnv() +- defer s.setEnv(nil, initialEnv) +- +- name := "COSMOVISOR_TEST_VAL" +- +- check := func(def, expected, isErr bool, msg string) { +- v, err := booleanOption(name, def) +- if isErr { +- s.Require().Error(err) +- return +- } +- s.Require().NoError(err) +- s.Require().Equal(expected, v, msg) +- } +- +- os.Setenv(name, "") +- check(true, true, false, "should correctly set default value") +- check(false, false, false, "should correctly set default value") +- +- os.Setenv(name, "wrong") +- check(true, true, true, "should error on wrong value") +- os.Setenv(name, "truee") +- check(true, true, true, "should error on wrong value") +- +- os.Setenv(name, "false") +- check(true, false, false, "should handle false value") +- check(false, false, false, "should handle false value") +- os.Setenv(name, "faLSe") +- check(true, false, false, "should handle false value case not sensitive") +- check(false, false, false, "should handle false value case not sensitive") +- +- os.Setenv(name, "true") +- check(true, true, false, "should handle true value") +- check(false, true, false, "should handle true value") +- +- os.Setenv(name, "TRUE") +- check(true, true, false, "should handle true value case not sensitive") +- check(false, true, false, "should handle true value case not sensitive") +-} +- +-func (s *argsTestSuite) TestDetailString() { +- home := "/home" +- name := "test-name" +- allowDownloadBinaries := true +- restartAfterUpgrade := true +- pollInterval := 406 * time.Millisecond +- unsafeSkipBackup := false +- dataBackupPath := "/home" +- preupgradeMaxRetries := 8 +- cfg := &Config{ +- Home: home, +- Name: name, +- AllowDownloadBinaries: allowDownloadBinaries, +- RestartAfterUpgrade: restartAfterUpgrade, +- PollInterval: pollInterval, +- UnsafeSkipBackup: unsafeSkipBackup, +- DataBackupPath: dataBackupPath, +- PreupgradeMaxRetries: preupgradeMaxRetries, +- } +- +- expectedPieces := []string{ +- "Configurable Values:", +- fmt.Sprintf("%s: %s", EnvHome, home), +- fmt.Sprintf("%s: %s", EnvName, name), +- fmt.Sprintf("%s: %t", EnvDownloadBin, allowDownloadBinaries), +- fmt.Sprintf("%s: %t", EnvRestartUpgrade, restartAfterUpgrade), +- fmt.Sprintf("%s: %s", EnvInterval, pollInterval), +- fmt.Sprintf("%s: %t", EnvSkipBackup, unsafeSkipBackup), +- fmt.Sprintf("%s: %s", EnvDataBackupPath, home), +- fmt.Sprintf("%s: %d", EnvPreupgradeMaxRetries, preupgradeMaxRetries), +- "Derived Values:", +- fmt.Sprintf("Root Dir: %s", home), +- fmt.Sprintf("Upgrade Dir: %s", home), +- fmt.Sprintf("Genesis Bin: %s", home), +- fmt.Sprintf("Monitored File: %s", home), +- fmt.Sprintf("Data Backup Dir: %s", home), +- } +- +- actual := cfg.DetailString() +- +- for _, piece := range expectedPieces { +- s.Assert().Contains(actual, piece) +- } +-} +- +-func (s *argsTestSuite) TestGetConfigFromEnv() { +- initialEnv := s.clearEnv() +- defer s.setEnv(nil, initialEnv) +- +- relPath := filepath.Join("testdata", "validate") +- absPath, perr := filepath.Abs(relPath) +- s.Require().NoError(perr) +- +- newConfig := func(home, name, dataBackupPath string, downloadBin, restartUpgrade, skipBackup bool, interval, preupgradeMaxRetries int) *Config { +- return &Config{ +- Home: home, +- Name: name, +- AllowDownloadBinaries: downloadBin, +- RestartAfterUpgrade: restartUpgrade, +- PollInterval: time.Millisecond * time.Duration(interval), +- UnsafeSkipBackup: skipBackup, +- DataBackupPath: dataBackupPath, +- PreupgradeMaxRetries: preupgradeMaxRetries, +- } +- } +- +- tests := []struct { +- name string +- envVals cosmovisorEnv +- expectedCfg *Config +- expectedErrCount int +- }{ +- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries +- { +- name: "all bad", +- envVals: cosmovisorEnv{"", "", "bad", "bad", "bad", "", "bad", "bad"}, +- expectedCfg: nil, +- expectedErrCount: 8, +- }, +- { +- name: "all good", +- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "true", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, true, false, true, 303, 1), +- expectedErrCount: 0, +- }, +- { +- name: "nothing set", +- envVals: cosmovisorEnv{"", "", "", "", "", "", "", ""}, +- expectedCfg: nil, +- expectedErrCount: 3, +- }, +- // Note: Home and Name tests are done in TestValidate +- { +- name: "download bin bad", +- envVals: cosmovisorEnv{absPath, "testname", "bad", "false", "true", "", "303", "1"}, +- expectedCfg: nil, +- expectedErrCount: 1, +- }, +- { +- name: "download bin not set", +- envVals: cosmovisorEnv{absPath, "testname", "", "false", "true", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, false, false, true, 303, 1), +- expectedErrCount: 0, +- }, +- { +- name: "download bin true", +- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "true", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, true, false, true, 303, 1), +- expectedErrCount: 0, +- }, +- { +- name: "download bin false", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "true", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, false, false, true, 303, 1), +- expectedErrCount: 0, +- }, +- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries +- { +- name: "restart upgrade bad", +- envVals: cosmovisorEnv{absPath, "testname", "true", "bad", "true", "", "303", "1"}, +- expectedCfg: nil, +- expectedErrCount: 1, +- }, +- { +- name: "restart upgrade not set", +- envVals: cosmovisorEnv{absPath, "testname", "true", "", "true", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, true, true, true, 303, 1), +- expectedErrCount: 0, +- }, +- { +- name: "restart upgrade true", +- envVals: cosmovisorEnv{absPath, "testname", "true", "true", "true", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, true, true, true, 303, 1), +- expectedErrCount: 0, +- }, +- { +- name: "restart upgrade true", +- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "true", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, true, false, true, 303, 1), +- expectedErrCount: 0, +- }, +- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries +- { +- name: "skip unsafe backups bad", +- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "bad", "", "303", "1"}, +- expectedCfg: nil, +- expectedErrCount: 1, +- }, +- { +- name: "skip unsafe backups not set", +- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, true, false, false, 303, 1), +- expectedErrCount: 0, +- }, +- { +- name: "skip unsafe backups true", +- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "true", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, true, false, true, 303, 1), +- expectedErrCount: 0, +- }, +- { +- name: "skip unsafe backups false", +- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "false", "", "303", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, true, false, false, 303, 1), +- expectedErrCount: 0, +- }, +- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries +- { +- name: "poll interval bad", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "bad", "1"}, +- expectedCfg: nil, +- expectedErrCount: 1, +- }, +- { +- name: "poll interval 0", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "0", "1"}, +- expectedCfg: nil, +- expectedErrCount: 1, +- }, +- { +- name: "poll interval not set", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 300, 1), +- expectedErrCount: 0, +- }, +- { +- name: "poll interval 987", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "987", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 987, 1), +- expectedErrCount: 0, +- }, +- { +- name: "poll interval 1s", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "1s", "1"}, +- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 1000, 1), +- expectedErrCount: 0, +- }, +- { +- name: "poll interval -3m", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "-3m", "1"}, +- expectedCfg: nil, +- expectedErrCount: 1, +- }, +- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries +- { +- name: "prepupgrade max retries bad", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "406", "bad"}, +- expectedCfg: nil, +- expectedErrCount: 1, +- }, +- { +- name: "prepupgrade max retries 0", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "406", "0"}, +- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 406, 0), +- expectedErrCount: 0, +- }, +- { +- name: "prepupgrade max retries not set", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "406", ""}, +- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 406, 0), +- expectedErrCount: 0, +- }, +- { +- name: "prepupgrade max retries 5", +- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "406", "5"}, +- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 406, 5), +- expectedErrCount: 0, +- }, +- } +- +- for _, tc := range tests { +- s.T().Run(tc.name, func(t *testing.T) { +- s.setEnv(t, &tc.envVals) +- cfg, err := GetConfigFromEnv() +- if tc.expectedErrCount == 0 { +- assert.NoError(t, err) +- } else { +- if assert.Error(t, err) { +- errCount := 1 +- if multi, isMulti := err.(*errors.MultiError); isMulti { +- errCount = multi.Len() +- } +- assert.Equal(t, tc.expectedErrCount, errCount, "error count") +- } +- } +- assert.Equal(t, tc.expectedCfg, cfg, "config") +- }) +- } +-} +- +-func (s *argsTestSuite) TestLogConfigOrError() { +- cfg := &Config{ +- Home: "/no/place/like/it", +- Name: "cosmotestvisor", +- AllowDownloadBinaries: true, +- RestartAfterUpgrade: true, +- PollInterval: 999, +- UnsafeSkipBackup: false, +- DataBackupPath: "/no/place/like/it", +- PreupgradeMaxRetries: 20, +- } +- errNormal := fmt.Errorf("this is a single error") +- errs := []error{ +- fmt.Errorf("multi-error error 1"), +- fmt.Errorf("multi-error error 2"), +- fmt.Errorf("multi-error error 3"), +- } +- errMulti := errors.FlattenErrors(errs...) +- +- makeTestLogger := func(testName string, out io.Writer) *zerolog.Logger { +- output := zerolog.ConsoleWriter{Out: out, TimeFormat: time.Kitchen, NoColor: true} +- logger := zerolog.New(output).With().Str("test", testName).Timestamp().Logger() +- return &logger +- } +- +- tests := []struct { +- name string +- cfg *Config +- err error +- contains []string +- notcontains []string +- }{ +- { +- name: "normal error", +- cfg: nil, +- err: errNormal, +- contains: []string{"configuration error", errNormal.Error()}, // TODO: Fix this. +- notcontains: nil, +- }, +- { +- name: "multi error", +- cfg: nil, +- err: errMulti, +- contains: []string{"configuration errors found", errs[0].Error(), errs[1].Error(), errs[2].Error()}, +- notcontains: nil, +- }, +- { +- name: "config", +- cfg: cfg, +- err: nil, +- contains: []string{"Configurable Values", cfg.DetailString()}, +- notcontains: nil, +- }, +- { +- name: "error and config - no config details", +- cfg: cfg, +- err: errNormal, +- contains: []string{"error"}, +- notcontains: []string{"Configuration is valid", EnvName, cfg.Home}, // Just some spot checks. +- }, +- { +- name: "nil nil - no output", +- cfg: nil, +- err: nil, +- contains: nil, +- notcontains: []string{" "}, +- }, +- } +- +- for _, tc := range tests { +- s.T().Run(tc.name, func(t *testing.T) { +- var b bytes.Buffer +- logger := makeTestLogger(tc.name, &b) +- LogConfigOrError(logger, tc.cfg, tc.err) +- output := b.String() +- for _, expected := range tc.contains { +- assert.Contains(t, output, expected) +- } +- for _, unexpected := range tc.notcontains { +- assert.NotContains(t, output, unexpected) +- } +- }) +- } +-} +diff --git a/cosmovisor/buffer_test.go b/cosmovisor/buffer_test.go +deleted file mode 100644 +index 04dd2bb4c5..0000000000 +--- a/cosmovisor/buffer_test.go ++++ /dev/null +@@ -1,34 +0,0 @@ +-package cosmovisor_test +- +-import ( +- "bytes" +- "sync" +-) +- +-// buffer is a thread safe bytes buffer +-type buffer struct { +- b bytes.Buffer +- m sync.Mutex +-} +- +-func NewBuffer() *buffer { +- return &buffer{} +-} +- +-func (b *buffer) Write(bz []byte) (int, error) { +- b.m.Lock() +- defer b.m.Unlock() +- return b.b.Write(bz) +-} +- +-func (b *buffer) String() string { +- b.m.Lock() +- defer b.m.Unlock() +- return b.b.String() +-} +- +-func (b *buffer) Reset() { +- b.m.Lock() +- defer b.m.Unlock() +- b.b.Reset() +-} +diff --git a/cosmovisor/cmd/cosmovisor/help.go b/cosmovisor/cmd/cosmovisor/help.go +deleted file mode 100644 +index 25f2ca6c17..0000000000 +--- a/cosmovisor/cmd/cosmovisor/help.go ++++ /dev/null +@@ -1,24 +0,0 @@ +-package main +- +-import ( +- "fmt" +- +- "github.com/cosmos/cosmos-sdk/cosmovisor" +-) +- +-// GetHelpText creates the help text multi-line string. +-func GetHelpText() string { +- return fmt.Sprintf(`Cosmosvisor - A process manager for Cosmos SDK application binaries. +- +-Cosmovisor is a wrapper for a Cosmos SDK based App (set using the required %s env variable). +-It starts the App by passing all provided arguments and monitors the %s/data/upgrade-info.json +-file to perform an update. The upgrade-info.json file is created by the App x/upgrade module +-when the blockchain height reaches an approved upgrade proposal. The file includes data from +-the proposal. Cosmovisor interprets that data to perform an update: switch a current binary +-and restart the App. +- +-Configuration of Cosmovisor is done through environment variables, which are +-documented in: https://github.com/cosmos/cosmos-sdk/tree/main/cosmovisor/README.md`, +- cosmovisor.EnvName, cosmovisor.EnvHome, +- ) +-} +diff --git a/cosmovisor/cmd/cosmovisor/help_test.go b/cosmovisor/cmd/cosmovisor/help_test.go +deleted file mode 100644 +index fad8adde81..0000000000 +--- a/cosmovisor/cmd/cosmovisor/help_test.go ++++ /dev/null +@@ -1,102 +0,0 @@ +-package main +- +-import ( +- "fmt" +- "os" +- "testing" +- +- "github.com/stretchr/testify/require" +- "github.com/stretchr/testify/suite" +- +- "github.com/cosmos/cosmos-sdk/cosmovisor" +-) +- +-type HelpTestSuite struct { +- suite.Suite +-} +- +-func TestHelpTestSuite(t *testing.T) { +- suite.Run(t, new(HelpTestSuite)) +-} +- +-// cosmovisorHelpEnv are some string values of environment variables used to configure Cosmovisor. +-type cosmovisorHelpEnv struct { +- Home string +- Name string +-} +- +-// ToMap creates a map of the cosmovisorHelpEnv where the keys are the env var names. +-func (c cosmovisorHelpEnv) ToMap() map[string]string { +- return map[string]string{ +- cosmovisor.EnvHome: c.Home, +- cosmovisor.EnvName: c.Name, +- } +-} +- +-// Set sets the field in this cosmovisorHelpEnv corresponding to the provided envVar to the given envVal. +-func (c *cosmovisorHelpEnv) Set(envVar, envVal string) { +- switch envVar { +- case cosmovisor.EnvHome: +- c.Home = envVal +- case cosmovisor.EnvName: +- c.Name = envVal +- default: +- panic(fmt.Errorf("Unknown environment variable [%s]. Ccannot set field to [%s]. ", envVar, envVal)) +- } +-} +- +-// clearEnv clears environment variables and returns what they were. +-// Designed to be used like this: +-// +-// initialEnv := clearEnv() +-// defer setEnv(nil, initialEnv) +-func (s *HelpTestSuite) clearEnv() *cosmovisorHelpEnv { +- s.T().Logf("Clearing environment variables.") +- rv := cosmovisorHelpEnv{} +- for envVar := range rv.ToMap() { +- rv.Set(envVar, os.Getenv(envVar)) +- s.Require().NoError(os.Unsetenv(envVar)) +- } +- return &rv +-} +- +-// setEnv sets environment variables to the values provided. +-// If t is not nil, and there's a problem, the test will fail immediately. +-// If t is nil, problems will just be logged using s.T(). +-func (s *HelpTestSuite) setEnv(t *testing.T, env *cosmovisorHelpEnv) { +- if t == nil { +- s.T().Logf("Restoring environment variables.") +- } +- for envVar, envVal := range env.ToMap() { +- var err error +- var msg string +- if len(envVal) != 0 { +- err = os.Setenv(envVar, envVal) +- msg = fmt.Sprintf("setting %s to %s", envVar, envVal) +- } else { +- err = os.Unsetenv(envVar) +- msg = fmt.Sprintf("unsetting %s", envVar) +- } +- switch { +- case t != nil: +- require.NoError(t, err, msg) +- case err != nil: +- s.T().Logf("error %s: %v", msg, err) +- default: +- s.T().Logf("done %s", msg) +- } +- } +-} +- +-func (s *HelpTestSuite) TestGetHelpText() { +- expectedPieces := []string{ +- "Cosmosvisor", +- cosmovisor.EnvName, cosmovisor.EnvHome, +- "https://github.com/cosmos/cosmos-sdk/tree/main/cosmovisor/README.md", +- } +- +- actual := GetHelpText() +- for _, piece := range expectedPieces { +- s.Assert().Contains(actual, piece) +- } +-} +diff --git a/cosmovisor/cmd/cosmovisor/main.go b/cosmovisor/cmd/cosmovisor/main.go +deleted file mode 100644 +index 628b7da4f7..0000000000 +--- a/cosmovisor/cmd/cosmovisor/main.go ++++ /dev/null +@@ -1,19 +0,0 @@ +-package main +- +-import ( +- "context" +- "os" +- +- "github.com/cosmos/cosmos-sdk/cosmovisor" +- cverrors "github.com/cosmos/cosmos-sdk/cosmovisor/errors" +-) +- +-func main() { +- logger := cosmovisor.NewLogger() +- ctx := context.WithValue(context.Background(), cosmovisor.LoggerKey, logger) +- +- if err := rootCmd.ExecuteContext(ctx); err != nil { +- cverrors.LogErrors(logger, "", err) +- os.Exit(1) +- } +-} +diff --git a/cosmovisor/cmd/cosmovisor/root.go b/cosmovisor/cmd/cosmovisor/root.go +deleted file mode 100644 +index 69f6cfe075..0000000000 +--- a/cosmovisor/cmd/cosmovisor/root.go ++++ /dev/null +@@ -1,11 +0,0 @@ +-package main +- +-import ( +- "github.com/spf13/cobra" +-) +- +-var rootCmd = &cobra.Command{ +- Use: "cosmovisor", +- Short: "A process manager for Cosmos SDK application binaries.", +- Long: GetHelpText(), +-} +diff --git a/cosmovisor/cmd/cosmovisor/run.go b/cosmovisor/cmd/cosmovisor/run.go +deleted file mode 100644 +index f0917a3fc9..0000000000 +--- a/cosmovisor/cmd/cosmovisor/run.go ++++ /dev/null +@@ -1,53 +0,0 @@ +-package main +- +-import ( +- "github.com/cosmos/cosmos-sdk/cosmovisor" +- "github.com/rs/zerolog" +- "github.com/spf13/cobra" +-) +- +-func init() { +- rootCmd.AddCommand(runCmd) +-} +- +-var runCmd = &cobra.Command{ +- Use: "run", +- Short: "Run an APP command.", +- SilenceUsage: true, +- DisableFlagParsing: true, +- RunE: func(cmd *cobra.Command, args []string) error { +- logger := cmd.Context().Value(cosmovisor.LoggerKey).(*zerolog.Logger) +- +- return Run(logger, args) +- }, +-} +- +-// Run runs the configured program with the given args and monitors it for upgrades. +-func Run(logger *zerolog.Logger, args []string, options ...RunOption) error { +- cfg, err := cosmovisor.GetConfigFromEnv() +- if err != nil { +- return err +- } +- +- runCfg := DefaultRunConfig +- for _, opt := range options { +- opt(&runCfg) +- } +- +- launcher, err := cosmovisor.NewLauncher(logger, cfg) +- if err != nil { +- return err +- } +- +- doUpgrade, err := launcher.Run(args, runCfg.StdOut, runCfg.StdErr) +- // if RestartAfterUpgrade, we launch after a successful upgrade (only condition LaunchProcess returns nil) +- for cfg.RestartAfterUpgrade && err == nil && doUpgrade { +- logger.Info().Str("app", cfg.Name).Msg("upgrade detected, relaunching") +- doUpgrade, err = launcher.Run(args, runCfg.StdOut, runCfg.StdErr) +- } +- if doUpgrade && err == nil { +- logger.Info().Msg("upgrade detected, DAEMON_RESTART_AFTER_UPGRADE is off. Verify new upgrade and start cosmovisor again.") +- } +- +- return err +-} +diff --git a/cosmovisor/cmd/cosmovisor/run_config.go b/cosmovisor/cmd/cosmovisor/run_config.go +deleted file mode 100644 +index 5a77e30b41..0000000000 +--- a/cosmovisor/cmd/cosmovisor/run_config.go ++++ /dev/null +@@ -1,34 +0,0 @@ +-package main +- +-import ( +- "io" +- "os" +-) +- +-// DefaultRunConfig defintes a default RunConfig that writes to os.Stdout and os.Stderr +-var DefaultRunConfig = RunConfig{ +- StdOut: os.Stdout, +- StdErr: os.Stderr, +-} +- +-// RunConfig defines the configuration for running a command +-type RunConfig struct { +- StdOut io.Writer +- StdErr io.Writer +-} +- +-type RunOption func(*RunConfig) +- +-// StdOutRunOption sets the StdOut writer for the Run command +-func StdOutRunOption(w io.Writer) RunOption { +- return func(cfg *RunConfig) { +- cfg.StdOut = w +- } +-} +- +-// SdErrRunOption sets the StdErr writer for the Run command +-func StdErrRunOption(w io.Writer) RunOption { +- return func(cfg *RunConfig) { +- cfg.StdErr = w +- } +-} +diff --git a/cosmovisor/cmd/cosmovisor/run_test.go b/cosmovisor/cmd/cosmovisor/run_test.go +deleted file mode 100644 +index 7c585d9b64..0000000000 +--- a/cosmovisor/cmd/cosmovisor/run_test.go ++++ /dev/null +@@ -1,4 +0,0 @@ +-package main +- +-// TODO: Write tests for func Run(args []string) error +-// https://github.com/cosmos/cosmos-sdk/issues/11852 +diff --git a/cosmovisor/cmd/cosmovisor/version.go b/cosmovisor/cmd/cosmovisor/version.go +deleted file mode 100644 +index de5005a721..0000000000 +--- a/cosmovisor/cmd/cosmovisor/version.go ++++ /dev/null +@@ -1,81 +0,0 @@ +-package main +- +-import ( +- "encoding/json" +- "fmt" +- "strings" +- +- "github.com/cosmos/cosmos-sdk/cosmovisor" +- "github.com/rs/zerolog" +- "github.com/spf13/cobra" +- tmcli "github.com/tendermint/tendermint/libs/cli" +-) +- +-func init() { +- versionCmd.Flags().StringP(OutputFlag, "o", "text", "Output format (text|json)") +- rootCmd.AddCommand(versionCmd) +-} +- +-var ( +- // Version represents Cosmovisor version value. Overwritten during build +- Version = "1.1.0" +- // OutputFlag defines the output format flag +- OutputFlag = tmcli.OutputFlag +-) +- +-var versionCmd = &cobra.Command{ +- Use: "version", +- Short: "Prints the version of Cosmovisor.", +- SilenceUsage: true, +- RunE: func(cmd *cobra.Command, args []string) error { +- logger := cmd.Context().Value(cosmovisor.LoggerKey).(*zerolog.Logger) +- +- if val, err := cmd.Flags().GetString(OutputFlag); val == "json" && err == nil { +- return printVersionJSON(logger, args) +- } +- +- return printVersion(logger, args) +- }, +-} +- +-func printVersion(logger *zerolog.Logger, args []string) error { +- fmt.Println("cosmovisor version: ", Version) +- +- if err := Run(logger, append([]string{"version"}, args...)); err != nil { +- return fmt.Errorf("failed to run version command: %w", err) +- } +- +- return nil +-} +- +-func printVersionJSON(logger *zerolog.Logger, args []string) error { +- buf := new(strings.Builder) +- +- // disable logger +- l := logger.Level(zerolog.Disabled) +- logger = &l +- +- if err := Run( +- logger, +- []string{"version", "--long", "--output", "json"}, +- StdOutRunOption(buf), +- ); err != nil { +- return fmt.Errorf("failed to run version command: %w", err) +- } +- +- out, err := json.Marshal(struct { +- Version string `json:"cosmovisor_version"` +- AppVersion json.RawMessage `json:"app_version"` +- }{ +- Version: Version, +- AppVersion: json.RawMessage(buf.String()), +- }) +- if err != nil { +- l := logger.Level(zerolog.TraceLevel) +- logger = &l +- return fmt.Errorf("can't print version output, expected valid json from APP, got: %s - %w", buf.String(), err) +- } +- +- fmt.Println(string(out)) +- return nil +-} +diff --git a/cosmovisor/cmd/cosmovisor/version_test.go b/cosmovisor/cmd/cosmovisor/version_test.go +deleted file mode 100644 +index f9dfa14014..0000000000 +--- a/cosmovisor/cmd/cosmovisor/version_test.go ++++ /dev/null +@@ -1,21 +0,0 @@ +-package main +- +-import ( +- "context" +- "testing" +- +- "github.com/cosmos/cosmos-sdk/cosmovisor" +- "github.com/cosmos/cosmos-sdk/testutil" +- "github.com/stretchr/testify/require" +-) +- +-func TestVersionCommand_Error(t *testing.T) { +- logger := cosmovisor.NewLogger() +- +- rootCmd.SetArgs([]string{"version"}) +- _, out := testutil.ApplyMockIO(rootCmd) +- ctx := context.WithValue(context.Background(), cosmovisor.LoggerKey, logger) +- +- require.Error(t, rootCmd.ExecuteContext(ctx)) +- require.Contains(t, out.String(), "DAEMON_NAME is not set") +-} +diff --git a/cosmovisor/errors/multi.go b/cosmovisor/errors/multi.go +deleted file mode 100644 +index a78a61a4e8..0000000000 +--- a/cosmovisor/errors/multi.go ++++ /dev/null +@@ -1,85 +0,0 @@ +-package errors +- +-import ( +- "fmt" +- "strings" +- +- "github.com/rs/zerolog" +-) +- +-// MultiError is an error combining multiple other errors. +-// It will never have 0 or 1 errors. It will always have two or more. +-type MultiError struct { +- errs []error +-} +- +-// FlattenErrors possibly creates a MultiError. +-// Nil entries are ignored. +-// If all provided errors are nil (or nothing is provided), nil is returned. +-// If only one non-nil error is provided, it is returned unchanged. +-// If two or more non-nil errors are provided, the returned error will be of type *MultiError +-// and it will contain each non-nil error. +-func FlattenErrors(errs ...error) error { +- rv := MultiError{} +- for _, err := range errs { +- if err != nil { +- if merr, isMerr := err.(*MultiError); isMerr { +- rv.errs = append(rv.errs, merr.errs...) +- } else { +- rv.errs = append(rv.errs, err) +- } +- } +- } +- switch rv.Len() { +- case 0: +- return nil +- case 1: +- return rv.errs[0] +- } +- return &rv +-} +- +-// GetErrors gets all the errors that make up this MultiError. +-func (e MultiError) GetErrors() []error { +- // Return a copy of the errs slice to prevent alteration of the original slice. +- rv := make([]error, e.Len()) +- copy(rv, e.errs) +- return rv +-} +- +-// Len gets the number of errors in this MultiError. +-func (e MultiError) Len() int { +- return len(e.errs) +-} +- +-// Error implements the error interface for a MultiError. +-func (e *MultiError) Error() string { +- var sb strings.Builder +- sb.WriteString(fmt.Sprintf("%d errors: ", len(e.errs))) +- for i, err := range e.errs { +- if i != 0 { +- sb.WriteString(", ") +- } +- sb.WriteString(fmt.Sprintf("%d: %v", i+1, err)) +- } +- return sb.String() +-} +- +-// String implements the string interface for a MultiError. +-func (e MultiError) String() string { +- return e.Error() +-} +- +-func LogErrors(logger *zerolog.Logger, msg string, err error) { +- switch err := err.(type) { +- case *MultiError: +- if msg != "" { +- logger.Error().Msg(msg) +- } +- for i, e := range err.GetErrors() { +- logger.Error().Err(e).Msg(fmt.Sprintf(" %d:", i+1)) +- } +- default: +- logger.Error().Err(err).Msg(msg) +- } +-} +diff --git a/cosmovisor/errors/multi_test.go b/cosmovisor/errors/multi_test.go +deleted file mode 100644 +index 83454b2cfb..0000000000 +--- a/cosmovisor/errors/multi_test.go ++++ /dev/null +@@ -1,190 +0,0 @@ +-package errors +- +-import ( +- "errors" +- "fmt" +- "testing" +- +- "github.com/stretchr/testify/require" +- "github.com/stretchr/testify/suite" +-) +- +-type MultiErrorTestSuite struct { +- suite.Suite +- +- err1 error +- err2 error +- err3 error +- err4 error +-} +- +-func TestMultiErrorTestSuite(t *testing.T) { +- suite.Run(t, new(MultiErrorTestSuite)) +-} +- +-func (s *MultiErrorTestSuite) SetupTest() { +- s.err1 = errors.New("expected error one") +- s.err2 = errors.New("expected error two") +- s.err3 = errors.New("expected error three") +- s.err3 = errors.New("expected error four") +-} +- +-func (s *MultiErrorTestSuite) TestFlattenErrors() { +- tests := []struct { +- name string +- input []error +- expected error +- }{ +- { +- name: "none in nil out", +- input: []error{}, +- expected: nil, +- }, +- { +- name: "nil in nil out", +- input: []error{nil}, +- expected: nil, +- }, +- { +- name: "nils in nil out", +- input: []error{nil, nil, nil}, +- expected: nil, +- }, +- { +- name: "one in same out", +- input: []error{s.err1}, +- expected: s.err1, +- }, +- { +- name: "nils and one in that one out", +- input: []error{nil, s.err2, nil}, +- expected: s.err2, +- }, +- { +- name: "two in multi out with both", +- input: []error{s.err1, s.err2}, +- expected: &MultiError{errs: []error{s.err1, s.err2}}, +- }, +- { +- name: "two and nils in multi out with both", +- input: []error{nil, s.err1, nil, s.err2, nil}, +- expected: &MultiError{errs: []error{s.err1, s.err2}}, +- }, +- { +- name: "lots in multi out", +- input: []error{s.err1, s.err2, s.err3, s.err2, s.err1}, +- expected: &MultiError{errs: []error{s.err1, s.err2, s.err3, s.err2, s.err1}}, +- }, +- { +- name: "multi and non in one multi out with all", +- input: []error{&MultiError{errs: []error{s.err1, s.err2}}, s.err3}, +- expected: &MultiError{errs: []error{s.err1, s.err2, s.err3}}, +- }, +- { +- name: "non and multi in one multi out with all", +- input: []error{s.err1, &MultiError{errs: []error{s.err2, s.err3}}}, +- expected: &MultiError{errs: []error{s.err1, s.err2, s.err3}}, +- }, +- { +- name: "two multi in one multi out with all", +- input: []error{&MultiError{errs: []error{s.err1, s.err2}}, &MultiError{errs: []error{s.err3, s.err4}}}, +- expected: &MultiError{errs: []error{s.err1, s.err2, s.err3, s.err4}}, +- }, +- } +- +- for _, tc := range tests { +- s.T().Run(tc.name, func(t *testing.T) { +- actual := FlattenErrors(tc.input...) +- require.Equal(t, tc.expected, actual) +- }) +- } +-} +- +-func (s *MultiErrorTestSuite) TestGetErrors() { +- tests := []struct { +- name string +- multi MultiError +- expected []error +- }{ +- { +- name: "two", +- multi: MultiError{errs: []error{s.err3, s.err1}}, +- expected: []error{s.err3, s.err1}, +- }, +- { +- name: "three", +- multi: MultiError{errs: []error{s.err3, s.err1, s.err2}}, +- expected: []error{s.err3, s.err1, s.err2}, +- }, +- } +- +- for _, tc := range tests { +- s.T().Run(tc.name, func(t *testing.T) { +- // Make sure it's getting what's expected. +- actual1 := tc.multi.GetErrors() +- require.NotSame(t, tc.expected, actual1) +- require.Equal(t, tc.expected, actual1) +- // Make sure that changing what was given back doesn't alter the original. +- actual1[0] = errors.New("unexpected error") +- actual2 := tc.multi.GetErrors() +- require.NotEqual(t, actual1, actual2) +- require.Equal(t, tc.expected, actual2) +- }) +- } +-} +- +-func (s *MultiErrorTestSuite) TestLen() { +- tests := []struct { +- name string +- multi MultiError +- expected int +- }{ +- { +- name: "two", +- multi: MultiError{errs: []error{s.err3, s.err1}}, +- expected: 2, +- }, +- { +- name: "three", +- multi: MultiError{errs: []error{s.err3, s.err1, s.err2}}, +- expected: 3, +- }, +- } +- +- for _, tc := range tests { +- s.T().Run(tc.name, func(t *testing.T) { +- actual := tc.multi.Len() +- require.Equal(t, tc.expected, actual) +- }) +- } +-} +- +-func (s *MultiErrorTestSuite) TestErrorAndString() { +- tests := []struct { +- name string +- multi MultiError +- expected string +- }{ +- { +- name: "two", +- multi: MultiError{errs: []error{s.err1, s.err2}}, +- expected: fmt.Sprintf("2 errors: 1: %s, 2: %s", s.err1, s.err2), +- }, +- { +- name: "three", +- multi: MultiError{errs: []error{s.err1, s.err2, s.err3}}, +- expected: fmt.Sprintf("3 errors: 1: %s, 2: %s, 3: %s", s.err1, s.err2, s.err3), +- }, +- } +- +- for _, tc := range tests { +- s.T().Run(tc.name+" Error", func(t *testing.T) { +- actual := tc.multi.Error() +- require.Equal(t, tc.expected, actual) +- }) +- s.T().Run(tc.name+" String", func(t *testing.T) { +- actual := tc.multi.String() +- require.Equal(t, tc.expected, actual) +- }) +- } +-} +diff --git a/cosmovisor/go.mod b/cosmovisor/go.mod +deleted file mode 100644 +index 1c3f2595da..0000000000 +--- a/cosmovisor/go.mod ++++ /dev/null +@@ -1,133 +0,0 @@ +-module github.com/cosmos/cosmos-sdk/cosmovisor +- +-go 1.18 +- +-require ( +- github.com/cosmos/cosmos-sdk v0.46.1 +- github.com/hashicorp/go-getter v1.6.1 +- github.com/otiai10/copy v1.7.0 +- github.com/rs/zerolog v1.27.0 +- github.com/spf13/cobra v1.5.0 +- github.com/stretchr/testify v1.8.0 +- github.com/tendermint/tendermint v0.34.21 +-) +- +-require ( +- cloud.google.com/go v0.100.2 // indirect +- cloud.google.com/go/compute v1.6.1 // indirect +- cloud.google.com/go/iam v0.3.0 // indirect +- cloud.google.com/go/storage v1.14.0 // indirect +- cosmossdk.io/errors v1.0.0-beta.7 // indirect +- cosmossdk.io/math v1.0.0-beta.3 // indirect +- filippo.io/edwards25519 v1.0.0-rc.1 // indirect +- github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect +- github.com/99designs/keyring v1.2.1 // indirect +- github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect +- github.com/armon/go-metrics v0.4.0 // indirect +- github.com/aws/aws-sdk-go v1.40.45 // 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.0 // indirect +- github.com/btcsuite/btcd v0.22.1 // indirect +- github.com/cespare/xxhash v1.1.0 // indirect +- github.com/cespare/xxhash/v2 v2.1.2 // indirect +- github.com/confio/ics23/go v0.7.0 // indirect +- github.com/cosmos/btcutil v1.0.4 // indirect +- github.com/cosmos/cosmos-proto v1.0.0-alpha7 // indirect +- github.com/cosmos/go-bip39 v1.0.0 // indirect +- github.com/cosmos/gorocksdb v1.2.0 // indirect +- github.com/cosmos/iavl v0.19.1 // indirect +- github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect +- github.com/cosmos/ledger-go v0.9.2 // indirect +- github.com/danieljoos/wincred v1.1.2 // indirect +- github.com/davecgh/go-spew v1.1.1 // indirect +- github.com/dgraph-io/badger/v2 v2.2007.4 // indirect +- github.com/dgraph-io/ristretto v0.1.0 // indirect +- github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect +- github.com/dustin/go-humanize v1.0.0 // indirect +- github.com/dvsekhvalnov/jose2go v1.5.0 // indirect +- github.com/fsnotify/fsnotify v1.5.4 // indirect +- github.com/go-kit/kit v0.12.0 // indirect +- github.com/go-kit/log v0.2.1 // indirect +- github.com/go-logfmt/logfmt v0.5.1 // indirect +- github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect +- github.com/gogo/protobuf v1.3.3 // indirect +- github.com/golang/glog v1.0.0 // indirect +- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect +- github.com/golang/protobuf v1.5.2 // indirect +- github.com/golang/snappy v0.0.4 // indirect +- github.com/google/btree v1.0.1 // indirect +- github.com/googleapis/gax-go/v2 v2.4.0 // indirect +- github.com/gorilla/websocket v1.5.0 // indirect +- github.com/grpc-ecosystem/go-grpc-middleware v1.3.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-immutable-radix v1.3.1 // indirect +- github.com/hashicorp/go-safetemp v1.0.0 // indirect +- github.com/hashicorp/go-version v1.6.0 // indirect +- github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect +- github.com/hashicorp/hcl v1.0.0 // indirect +- github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect +- github.com/inconshreveable/mousetrap v1.0.0 // indirect +- github.com/jmespath/go-jmespath v0.4.0 // indirect +- github.com/jmhodges/levigo v1.0.0 // indirect +- github.com/klauspost/compress v1.15.9 // indirect +- github.com/libp2p/go-buffer-pool v0.1.0 // indirect +- github.com/magiconair/properties v1.8.6 // indirect +- github.com/mattn/go-colorable v0.1.12 // indirect +- github.com/mattn/go-isatty v0.0.14 // indirect +- github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect +- github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect +- github.com/mitchellh/go-homedir v1.1.0 // indirect +- github.com/mitchellh/go-testing-interface v1.0.0 // indirect +- github.com/mitchellh/mapstructure v1.5.0 // indirect +- github.com/mtibben/percent v0.2.1 // indirect +- github.com/pelletier/go-toml v1.9.5 // indirect +- github.com/pelletier/go-toml/v2 v2.0.2 // indirect +- github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect +- github.com/pkg/errors v0.9.1 // indirect +- github.com/pmezard/go-difflib v1.0.0 // indirect +- github.com/prometheus/client_golang v1.12.2 // indirect +- github.com/prometheus/client_model v0.2.0 // indirect +- github.com/prometheus/common v0.34.0 // indirect +- github.com/prometheus/procfs v0.7.3 // indirect +- github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect +- github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect +- github.com/spf13/afero v1.8.2 // indirect +- github.com/spf13/cast v1.5.0 // indirect +- github.com/spf13/jwalterweatherman v1.1.0 // indirect +- github.com/spf13/pflag v1.0.5 // indirect +- github.com/spf13/viper v1.12.0 // indirect +- github.com/subosito/gotenv v1.4.0 // indirect +- github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect +- github.com/tendermint/btcd v0.1.1 // indirect +- github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect +- github.com/tendermint/go-amino v0.16.0 // indirect +- github.com/tendermint/tm-db v0.6.7 // indirect +- github.com/ulikunitz/xz v0.5.8 // indirect +- github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 // indirect +- go.etcd.io/bbolt v1.3.6 // indirect +- go.opencensus.io v0.23.0 // indirect +- golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect +- golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect +- golang.org/x/net v0.0.0-20220726230323-06994584191e // indirect +- golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect +- golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 // indirect +- golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect +- golang.org/x/text v0.3.7 // indirect +- golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect +- google.golang.org/api v0.81.0 // indirect +- google.golang.org/appengine v1.6.7 // indirect +- google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b // indirect +- google.golang.org/grpc v1.48.0 // indirect +- google.golang.org/protobuf v1.28.0 // indirect +- gopkg.in/ini.v1 v1.66.6 // indirect +- gopkg.in/yaml.v2 v2.4.0 // indirect +- gopkg.in/yaml.v3 v3.0.1 // indirect +- sigs.k8s.io/yaml v1.3.0 // indirect +-) +- +-replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 +diff --git a/cosmovisor/go.sum b/cosmovisor/go.sum +deleted file mode 100644 +index 29bd9181e9..0000000000 +--- a/cosmovisor/go.sum ++++ /dev/null +@@ -1,1109 +0,0 @@ +-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +-cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +-cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +-cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +-cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +-cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +-cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +-cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +-cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +-cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +-cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +-cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +-cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +-cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +-cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +-cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +-cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +-cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +-cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +-cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +-cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +-cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +-cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +-cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +-cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +-cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +-cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +-cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +-cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +-cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= +-cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +-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/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 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wqc= +-cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +-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/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= +-cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +-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/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 h1:6RRlFMv1omScs6iq2hfE3IvgE+l6RfJPampq8UZc5TU= +-cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +-cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= +-cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +-cosmossdk.io/math v1.0.0-beta.3 h1:TbZxSopz2LqjJ7aXYfn7nJSb8vNaBklW6BLpcei1qwM= +-cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= +-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +-filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= +-filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +-github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= +-github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= +-github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= +-github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +-github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= +-github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +-github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +-github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +-github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +-github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +-github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= +-github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +-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/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +-github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= +-github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +-github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= +-github.com/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI= +-github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +-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 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +-github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +-github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= +-github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +-github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +-github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +-github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +-github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +-github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +-github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +-github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +-github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +-github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +-github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +-github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +-github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +-github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +-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.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +-github.com/cespare/xxhash/v2 v2.1.2/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/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +-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/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/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/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= +-github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= +-github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= +-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/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +-github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= +-github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= +-github.com/cosmos/cosmos-proto v1.0.0-alpha7 h1:yqYUOHF2jopwZh4dVQp3xgqwftE5/2hkrwIV6vkUbO0= +-github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= +-github.com/cosmos/cosmos-sdk v0.46.1 h1:7vUZXMyrmEb4xtBYpz1TobtrcnpgiZTi+tVjc0XWB4o= +-github.com/cosmos/cosmos-sdk v0.46.1/go.mod h1:2+o8Qw8qnE02V+lQVZDJFQ8tri/hsiA5GmWaPERqVa0= +-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/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= +-github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= +-github.com/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= +-github.com/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= +-github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= +-github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= +-github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= +-github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= +-github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +-github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +-github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= +-github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= +-github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +-github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +-github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= +-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.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= +-github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +-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/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +-github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +-github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= +-github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +-github.com/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/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +-github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +-github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= +-github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +-github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= +-github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +-github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +-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 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +-github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +-github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +-github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +-github.com/go-gl/glfw/v3.3/glfw v0.0.0-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.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +-github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +-github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +-github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +-github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +-github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +-github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +-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/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= +-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +-github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +-github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +-github.com/golang/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 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +-github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +-github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +-github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +-github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +-github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +-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 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +-github.com/google/go-cmp v0.5.8/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 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +-github.com/google/gofuzz v1.0.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 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= +-github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +-github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= +-github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +-github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +-github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +-github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +-github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +-github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +-github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +-github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +-github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +-github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +-github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +-github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +-github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +-github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +-github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +-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 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk= +-github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +-github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +-github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +-github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +-github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +-github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +-github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +-github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +-github.com/grpc-ecosystem/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/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +-github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +-github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +-github.com/hashicorp/go-getter v1.6.1 h1:NASsgP4q6tL94WH6nJxKWj8As2H/2kop/bB1d8JMyRY= +-github.com/hashicorp/go-getter v1.6.1/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= +-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-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +-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-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM= +-github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +-github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +-github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +-github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +-github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +-github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +-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/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= +-github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= +-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +-github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +-github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +-github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= +-github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +-github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +-github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +-github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/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/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.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +-github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +-github.com/json-iterator/go v1.1.12/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/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/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +-github.com/klauspost/compress v1.11.2/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 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= +-github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +-github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +-github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +-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/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= +-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/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +-github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= +-github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +-github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +-github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +-github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +-github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +-github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +-github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +-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/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +-github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +-github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= +-github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +-github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +-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 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= +-github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +-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/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +-github.com/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/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +-github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +-github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +-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.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= +-github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +-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 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= +-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +-github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +-github.com/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE= +-github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U= +-github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +-github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +-github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +-github.com/otiai10/mint v1.3.3 h1:7JgpsBaN0uMkyju4tbYHu0mnM55hNKVYLsXmwr15NQI= +-github.com/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +-github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +-github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +-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.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= +-github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= +-github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= +-github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +-github.com/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/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +-github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +-github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +-github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +-github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= +-github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/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.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +-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.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +-github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= +-github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= +-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/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.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +-github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +-github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= +-github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= +-github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +-github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= +-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/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 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +-github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= +-github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +-github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= +-github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +-github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +-github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +-github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= +-github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +-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/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.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= +-github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +-github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +-github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +-github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +-github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +-github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= +-github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= +-github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +-github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +-github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +-github.com/spf13/pflag 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.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= +-github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +-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 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +-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 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +-github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= +-github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= +-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/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= +-github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= +-github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= +-github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= +-github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= +-github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +-github.com/tendermint/tendermint v0.34.21 h1:UiGGnBFHVrZhoQVQ7EfwSOLuCtarqCSsRf8VrklqB7s= +-github.com/tendermint/tendermint v0.34.21/go.mod h1:XDvfg6U7grcFTDx7VkzxnhazQ/bspGJAn4DZ6DcLLjQ= +-github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= +-github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= +-github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +-github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +-github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= +-github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +-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/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +-github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 h1:O9XLFXGkVswDFmH9LaYpqu+r/AAFWqr0DL6V00KEVFg= +-github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +-go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= +-go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +-go.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 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +-go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +-go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +-go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +-go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +-go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +-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-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-20200115085410-6d4e4cb37c7d/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-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +-golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= +-golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +-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-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +-golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +-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/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-20181114220301-adae6a3d119a/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-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-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-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +-golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +-golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +-golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +-golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +-golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +-golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +-golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +-golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +-golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +-golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +-golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +-golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +-golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +-golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +-golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +-golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +-golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +-golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +-golang.org/x/net v0.0.0-20220726230323-06994584191e h1:wOQNKh1uuDGRnmgF0jDxh7ctgGy/3P4rYWQRVJD4/Yg= +-golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +-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 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= +-golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +-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-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +-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-20181116152217-5ac8a444bdc5/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-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-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-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-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-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-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-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-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-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-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-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-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-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 h1:dyU22nBWzrmTQxtNrr4dzVOvaw35nUYE279vF9UmsI8= +-golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-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.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc= +-golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +-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 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +-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/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-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-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-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-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +-golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +-golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +-golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +-golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +-golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +-golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +-golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +-golang.org/x/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 h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= +-golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +-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.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +-google.golang.org/api v0.81.0 h1:o8WF5AvfidafWbFjsRyupxyEQJNUWxLZJCK5NXrxZZ8= +-google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= +-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +-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 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +-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-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-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +-google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +-google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +-google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +-google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +-google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +-google.golang.org/genproto v0.0.0-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-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-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +-google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +-google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM= +-google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +-google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +-google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +-google.golang.org/grpc v1.23.0/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.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.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= +-google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +-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 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +-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 h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= +-gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +-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/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= +-gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +-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/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.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +-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= +-nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +-pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= +-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.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +-sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +diff --git a/cosmovisor/logger.go b/cosmovisor/logger.go +deleted file mode 100644 +index bcec3a0254..0000000000 +--- a/cosmovisor/logger.go ++++ /dev/null +@@ -1,16 +0,0 @@ +-package cosmovisor +- +-import ( +- "os" +- "time" +- +- "github.com/rs/zerolog" +-) +- +-var LoggerKey struct{} +- +-func NewLogger() *zerolog.Logger { +- output := zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.Kitchen} +- logger := zerolog.New(output).With().Str("module", "cosmovisor").Timestamp().Logger() +- return &logger +-} +diff --git a/cosmovisor/process.go b/cosmovisor/process.go +deleted file mode 100644 +index 5192953a74..0000000000 +--- a/cosmovisor/process.go ++++ /dev/null +@@ -1,244 +0,0 @@ +-package cosmovisor +- +-import ( +- "encoding/json" +- "fmt" +- "io" +- "os" +- "os/exec" +- "os/signal" +- "path/filepath" +- "strconv" +- "strings" +- "syscall" +- "time" +- +- "github.com/otiai10/copy" +- "github.com/rs/zerolog" +- +- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +-) +- +-type Launcher struct { +- logger *zerolog.Logger +- cfg *Config +- fw *fileWatcher +-} +- +-func NewLauncher(logger *zerolog.Logger, cfg *Config) (Launcher, error) { +- fw, err := newUpgradeFileWatcher(logger, cfg.UpgradeInfoFilePath(), cfg.PollInterval) +- if err != nil { +- return Launcher{}, err +- } +- +- return Launcher{logger: logger, cfg: cfg, fw: fw}, nil +-} +- +-// Run launches the app in a subprocess and returns when the subprocess (app) +-// exits (either when it dies, or *after* a successful upgrade.) and upgrade finished. +-// Returns true if the upgrade request was detected and the upgrade process started. +-func (l Launcher) Run(args []string, stdout, stderr io.Writer) (bool, error) { +- bin, err := l.cfg.CurrentBin() +- if err != nil { +- return false, fmt.Errorf("error creating symlink to genesis: %w", err) +- } +- +- if err := EnsureBinary(bin); err != nil { +- return false, fmt.Errorf("current binary is invalid: %w", err) +- } +- +- l.logger.Info().Str("path", bin).Strs("args", args).Msg("running app") +- cmd := exec.Command(bin, args...) +- cmd.Stdout = stdout +- cmd.Stderr = stderr +- if err := cmd.Start(); err != nil { +- return false, fmt.Errorf("launching process %s %s failed: %w", bin, strings.Join(args, " "), err) +- } +- +- sigs := make(chan os.Signal, 1) +- signal.Notify(sigs, syscall.SIGQUIT, syscall.SIGTERM) +- go func() { +- sig := <-sigs +- if err := cmd.Process.Signal(sig); err != nil { +- l.logger.Fatal().Err(err).Str("bin", bin).Msg("terminated") +- } +- }() +- +- needsUpdate, err := l.WaitForUpgradeOrExit(cmd) +- if err != nil || !needsUpdate { +- return false, err +- } +- +- if !IsSkipUpgradeHeight(args, l.fw.currentInfo) { +- if err := l.doBackup(); err != nil { +- return false, err +- } +- +- if err = l.doPreUpgrade(); err != nil { +- return false, err +- } +- } +- +- return true, DoUpgrade(l.logger, l.cfg, l.fw.currentInfo) +-} +- +-// WaitForUpgradeOrExit checks upgrade plan file created by the app. +-// When it returns, the process (app) is finished. +-// +-// It returns (true, nil) if an upgrade should be initiated (and we killed the process) +-// It returns (false, err) if the process died by itself, or there was an issue reading the upgrade-info file. +-// It returns (false, nil) if the process exited normally without triggering an upgrade. This is very unlikely +-// to happened with "start" but may happened with short-lived commands like `gaiad export ...` +-func (l Launcher) WaitForUpgradeOrExit(cmd *exec.Cmd) (bool, error) { +- currentUpgrade, err := l.cfg.UpgradeInfo() +- if err != nil { +- l.logger.Error().Err(err) +- } +- +- cmdDone := make(chan error) +- go func() { +- cmdDone <- cmd.Wait() +- }() +- +- select { +- case <-l.fw.MonitorUpdate(currentUpgrade): +- // upgrade - kill the process and restart +- l.logger.Info().Msg("daemon shutting down in an attempt to restart") +- _ = cmd.Process.Kill() +- case err := <-cmdDone: +- l.fw.Stop() +- // no error -> command exits normally (eg. short command like `gaiad version`) +- if err == nil { +- return false, nil +- } +- // the app x/upgrade causes a panic and the app can die before the filwatcher finds the +- // update, so we need to recheck update-info file. +- if !l.fw.CheckUpdate(currentUpgrade) { +- return false, err +- } +- } +- return true, nil +-} +- +-func (l Launcher) doBackup() error { +- // take backup if `UNSAFE_SKIP_BACKUP` is not set. +- if !l.cfg.UnsafeSkipBackup { +- // check if upgrade-info.json is not empty. +- var uInfo upgradetypes.Plan +- upgradeInfoFile, err := os.ReadFile(filepath.Join(l.cfg.Home, "data", "upgrade-info.json")) +- if err != nil { +- return fmt.Errorf("error while reading upgrade-info.json: %w", err) +- } +- +- err = json.Unmarshal(upgradeInfoFile, &uInfo) +- if err != nil { +- return err +- } +- +- if uInfo.Name == "" { +- return fmt.Errorf("upgrade-info.json is empty") +- } +- +- // a destination directory, Format YYYY-MM-DD +- st := time.Now() +- stStr := fmt.Sprintf("%d-%d-%d", st.Year(), st.Month(), st.Day()) +- dst := filepath.Join(l.cfg.DataBackupPath, fmt.Sprintf("data"+"-backup-%s", stStr)) +- +- l.logger.Info().Time("backup start time", st).Msg("starting to take backup of data directory") +- +- // copy the $DAEMON_HOME/data to a backup dir +- err = copy.Copy(filepath.Join(l.cfg.Home, "data"), dst) +- +- if err != nil { +- return fmt.Errorf("error while taking data backup: %w", err) +- } +- +- // backup is done, lets check endtime to calculate total time taken for backup process +- et := time.Now() +- l.logger.Info().Str("backup saved at", dst).Time("backup completion time", et).TimeDiff("time taken to complete backup", et, st).Msg("backup completed") +- } +- +- return nil +-} +- +-// doPreUpgrade runs the pre-upgrade command defined by the application and handles respective error codes +-// cfg contains the cosmovisor config from env var +-func (l *Launcher) doPreUpgrade() error { +- counter := 0 +- for { +- if counter > l.cfg.PreupgradeMaxRetries { +- return fmt.Errorf("pre-upgrade command failed. reached max attempt of retries - %d", l.cfg.PreupgradeMaxRetries) +- } +- +- err := l.executePreUpgradeCmd() +- counter += 1 +- +- if err != nil { +- if err.(*exec.ExitError).ProcessState.ExitCode() == 1 { +- l.logger.Info().Msg("pre-upgrade command does not exist. continuing the upgrade.") +- return nil +- } +- if err.(*exec.ExitError).ProcessState.ExitCode() == 30 { +- return fmt.Errorf("pre-upgrade command failed : %w", err) +- } +- if err.(*exec.ExitError).ProcessState.ExitCode() == 31 { +- l.logger.Error().Err(err).Int("attempt", counter).Msg("pre-upgrade command failed. retrying") +- continue +- } +- } +- +- l.logger.Info().Msg("pre-upgrade successful. continuing the upgrade.") +- return nil +- } +-} +- +-// executePreUpgradeCmd runs the pre-upgrade command defined by the application +-// cfg contains the cosmosvisor config from the env vars +-func (l *Launcher) executePreUpgradeCmd() error { +- bin, err := l.cfg.CurrentBin() +- if err != nil { +- return err +- } +- +- preUpgradeCmd := exec.Command(bin, "pre-upgrade") +- _, err = preUpgradeCmd.Output() +- return err +-} +- +-// IsSkipUpgradeHeight checks if pre-upgrade script must be run. If the height in the upgrade plan matches any of the heights provided in --safe-skip-upgrade, the script is not run +-func IsSkipUpgradeHeight(args []string, upgradeInfo upgradetypes.Plan) bool { +- skipUpgradeHeights := UpgradeSkipHeights(args) +- for _, h := range skipUpgradeHeights { +- if h == int(upgradeInfo.Height) { +- return true +- } +- } +- return false +-} +- +-// UpgradeSkipHeights gets all the heights provided when +-// +-// simd start --unsafe-skip-upgrades ... +-func UpgradeSkipHeights(args []string) []int { +- var heights []int +- for i, arg := range args { +- if arg == "--unsafe-skip-upgrades" { +- j := i + 1 +- +- for j < len(args) { +- tArg := args[j] +- if strings.HasPrefix(tArg, "-") { +- break +- } +- h, err := strconv.Atoi(tArg) +- if err == nil { +- heights = append(heights, h) +- } +- j++ +- } +- +- break +- } +- } +- return heights +-} +diff --git a/cosmovisor/process_test.go b/cosmovisor/process_test.go +deleted file mode 100644 +index 623634277b..0000000000 +--- a/cosmovisor/process_test.go ++++ /dev/null +@@ -1,210 +0,0 @@ +-//go:build linux +-// +build linux +- +-package cosmovisor_test +- +-import ( +- "fmt" +- "testing" +- +- "github.com/stretchr/testify/require" +- "github.com/stretchr/testify/suite" +- +- "github.com/cosmos/cosmos-sdk/cosmovisor" +- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +-) +- +-type processTestSuite struct { +- suite.Suite +-} +- +-func TestProcessTestSuite(t *testing.T) { +- suite.Run(t, new(processTestSuite)) +-} +- +-// TestLaunchProcess will try running the script a few times and watch upgrades work properly +-// and args are passed through +-func (s *processTestSuite) TestLaunchProcess() { +- // binaries from testdata/validate directory +- require := s.Require() +- home := copyTestData(s.T(), "validate") +- cfg := &cosmovisor.Config{Home: home, Name: "dummyd", PollInterval: 20, UnsafeSkipBackup: true} +- logger := cosmovisor.NewLogger() +- +- // should run the genesis binary and produce expected output +- stdout, stderr := NewBuffer(), NewBuffer() +- currentBin, err := cfg.CurrentBin() +- require.NoError(err) +- require.Equal(cfg.GenesisBin(), currentBin) +- +- launcher, err := cosmovisor.NewLauncher(logger, cfg) +- require.NoError(err) +- +- upgradeFile := cfg.UpgradeInfoFilePath() +- +- args := []string{"foo", "bar", "1234", upgradeFile} +- doUpgrade, err := launcher.Run(args, stdout, stderr) +- require.NoError(err) +- require.True(doUpgrade) +- require.Equal("", stderr.String()) +- require.Equal(fmt.Sprintf("Genesis foo bar 1234 %s\nUPGRADE \"chain2\" NEEDED at height: 49: {}\n", upgradeFile), +- stdout.String()) +- +- // ensure this is upgraded now and produces new output +- +- currentBin, err = cfg.CurrentBin() +- require.NoError(err) +- +- require.Equal(cfg.UpgradeBin("chain2"), currentBin) +- args = []string{"second", "run", "--verbose"} +- stdout.Reset() +- stderr.Reset() +- +- doUpgrade, err = launcher.Run(args, stdout, stderr) +- require.NoError(err) +- require.False(doUpgrade) +- require.Equal("", stderr.String()) +- require.Equal("Chain 2 is live!\nArgs: second run --verbose\nFinished successfully\n", stdout.String()) +- +- // ended without other upgrade +- require.Equal(cfg.UpgradeBin("chain2"), currentBin) +-} +- +-// TestLaunchProcess will try running the script a few times and watch upgrades work properly +-// and args are passed through +-func (s *processTestSuite) TestLaunchProcessWithDownloads() { +- // test case upgrade path (binaries from testdata/download directory): +- // genesis -> chain2-zip_bin +- // chain2-zip_bin -> ref_to_chain3-zip_dir.json = (json for the next download instructions) -> chain3-zip_dir +- // chain3-zip_dir - doesn't upgrade +- require := s.Require() +- home := copyTestData(s.T(), "download") +- cfg := &cosmovisor.Config{Home: home, Name: "autod", AllowDownloadBinaries: true, PollInterval: 100, UnsafeSkipBackup: true} +- logger := cosmovisor.NewLogger() +- upgradeFilename := cfg.UpgradeInfoFilePath() +- +- // should run the genesis binary and produce expected output +- currentBin, err := cfg.CurrentBin() +- require.NoError(err) +- require.Equal(cfg.GenesisBin(), currentBin) +- +- launcher, err := cosmovisor.NewLauncher(logger, cfg) +- require.NoError(err) +- +- stdout, stderr := NewBuffer(), NewBuffer() +- args := []string{"some", "args", upgradeFilename} +- doUpgrade, err := launcher.Run(args, stdout, stderr) +- +- require.NoError(err) +- require.True(doUpgrade) +- require.Equal("", stderr.String()) +- require.Equal("Genesis autod. Args: some args "+upgradeFilename+"\n"+`ERROR: UPGRADE "chain2" NEEDED at height: 49: zip_binary`+"\n", stdout.String()) +- currentBin, err = cfg.CurrentBin() +- require.NoError(err) +- require.Equal(cfg.UpgradeBin("chain2"), currentBin) +- +- // start chain2 +- stdout.Reset() +- stderr.Reset() +- args = []string{"run", "--fast", upgradeFilename} +- doUpgrade, err = launcher.Run(args, stdout, stderr) +- require.NoError(err) +- +- require.Equal("", stderr.String()) +- require.Equal("Chain 2 from zipped binary\nArgs: run --fast "+upgradeFilename+"\n"+`ERROR: UPGRADE "chain3" NEEDED at height: 936: ref_to_chain3-zip_dir.json module=main`+"\n", stdout.String()) +- // ended with one more upgrade +- require.True(doUpgrade) +- currentBin, err = cfg.CurrentBin() +- require.NoError(err) +- require.Equal(cfg.UpgradeBin("chain3"), currentBin) +- +- // run the last chain +- args = []string{"end", "--halt", upgradeFilename} +- stdout.Reset() +- stderr.Reset() +- doUpgrade, err = launcher.Run(args, stdout, stderr) +- require.NoError(err) +- require.False(doUpgrade) +- require.Equal("", stderr.String()) +- require.Equal("Chain 3 from zipped directory\nArgs: end --halt "+upgradeFilename+"\n", stdout.String()) +- +- // and this doesn't upgrade +- currentBin, err = cfg.CurrentBin() +- require.NoError(err) +- require.Equal(cfg.UpgradeBin("chain3"), currentBin) +-} +- +-// TestSkipUpgrade tests heights that are identified to be skipped and return if upgrade height matches the skip heights +-func TestSkipUpgrade(t *testing.T) { +- cases := []struct { +- args []string +- upgradeInfo upgradetypes.Plan +- expectRes bool +- }{{ +- args: []string{"appb", "start", "--unsafe-skip-upgrades"}, +- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 123}, +- expectRes: false, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades", "--abcd"}, +- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 123}, +- expectRes: false, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "--abcd"}, +- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 11}, +- expectRes: false, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "20", "--abcd"}, +- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 20}, +- expectRes: true, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "20", "--abcd", "34"}, +- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 34}, +- expectRes: false, +- }} +- +- for i := range cases { +- tc := cases[i] +- require := require.New(t) +- h := cosmovisor.IsSkipUpgradeHeight(tc.args, tc.upgradeInfo) +- require.Equal(h, tc.expectRes) +- } +-} +- +-// TestUpgradeSkipHeights tests if correct skip upgrade heights are identified from the cli args +-func TestUpgradeSkipHeights(t *testing.T) { +- cases := []struct { +- args []string +- expectRes []int +- }{{ +- args: []string{}, +- expectRes: nil, +- }, { +- args: []string{"appb", "start"}, +- expectRes: nil, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades"}, +- expectRes: nil, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades", "--abcd"}, +- expectRes: nil, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "--abcd"}, +- expectRes: []int{10}, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "20", "--abcd"}, +- expectRes: []int{10, 20}, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "20", "--abcd", "34"}, +- expectRes: []int{10, 20}, +- }, { +- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "as", "20", "--abcd"}, +- expectRes: []int{10, 20}, +- }} +- +- for i := range cases { +- tc := cases[i] +- require := require.New(t) +- h := cosmovisor.UpgradeSkipHeights(tc.args) +- require.Equal(h, tc.expectRes) +- } +-} +diff --git a/cosmovisor/scanner.go b/cosmovisor/scanner.go +deleted file mode 100644 +index 7ed696f481..0000000000 +--- a/cosmovisor/scanner.go ++++ /dev/null +@@ -1,166 +0,0 @@ +-package cosmovisor +- +-import ( +- "encoding/json" +- "errors" +- "fmt" +- "os" +- "path/filepath" +- "strings" +- "time" +- +- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +- "github.com/rs/zerolog" +-) +- +-type fileWatcher struct { +- logger *zerolog.Logger +- +- // full path to a watched file +- filename string +- interval time.Duration +- +- currentInfo upgradetypes.Plan +- lastModTime time.Time +- cancel chan bool +- ticker *time.Ticker +- needsUpdate bool +- +- initialized bool +-} +- +-func newUpgradeFileWatcher(logger *zerolog.Logger, filename string, interval time.Duration) (*fileWatcher, error) { +- if filename == "" { +- return nil, errors.New("filename undefined") +- } +- +- filenameAbs, err := filepath.Abs(filename) +- if err != nil { +- return nil, +- fmt.Errorf("invalid path; %s must be a valid file path: %w", filename, err) +- } +- +- dirname := filepath.Dir(filename) +- info, err := os.Stat(dirname) +- if err != nil || !info.IsDir() { +- return nil, fmt.Errorf("invalid path; %s must be an existing directory: %w", dirname, err) +- } +- +- return &fileWatcher{ +- logger: logger, +- filename: filenameAbs, +- interval: interval, +- currentInfo: upgradetypes.Plan{}, +- lastModTime: time.Time{}, +- cancel: make(chan bool), +- ticker: time.NewTicker(interval), +- needsUpdate: false, +- initialized: false, +- }, nil +-} +- +-func (fw *fileWatcher) Stop() { +- close(fw.cancel) +-} +- +-// pools the filesystem to check for new upgrade currentInfo. currentName is the name +-// of currently running upgrade. The check is rejected if it finds an upgrade with the same +-// name. +-func (fw *fileWatcher) MonitorUpdate(currentUpgrade upgradetypes.Plan) <-chan struct{} { +- fw.ticker.Reset(fw.interval) +- done := make(chan struct{}) +- fw.cancel = make(chan bool) +- fw.needsUpdate = false +- +- go func() { +- for { +- select { +- case <-fw.ticker.C: +- if fw.CheckUpdate(currentUpgrade) { +- done <- struct{}{} +- return +- } +- +- case <-fw.cancel: +- return +- } +- } +- }() +- +- return done +-} +- +-// CheckUpdate reads update plan from file and checks if there is a new update request +-// currentName is the name of currently running upgrade. The check is rejected if it finds +-// an upgrade with the same name. +-func (fw *fileWatcher) CheckUpdate(currentUpgrade upgradetypes.Plan) bool { +- if fw.needsUpdate { +- return true +- } +- +- stat, err := os.Stat(fw.filename) +- if err != nil { +- // file doesn't exists +- return false +- } +- +- if !stat.ModTime().After(fw.lastModTime) { +- return false +- } +- +- info, err := parseUpgradeInfoFile(fw.filename) +- if err != nil { +- fw.logger.Fatal().Err(err).Msg("failed to parse upgrade info file") +- return false +- } +- +- if !fw.initialized { +- // daemon has restarted +- fw.initialized = true +- fw.currentInfo = info +- fw.lastModTime = stat.ModTime() +- +- // Heuristic: Deamon has restarted, so we don't know if we successfully +- // downloaded the upgrade or not. So we try to compare the running upgrade +- // name (read from the cosmovisor file) with the upgrade info. +- if !strings.EqualFold(currentUpgrade.Name, fw.currentInfo.Name) { +- fw.needsUpdate = true +- return true +- } +- } +- +- if info.Height > fw.currentInfo.Height { +- fw.currentInfo = info +- fw.lastModTime = stat.ModTime() +- fw.needsUpdate = true +- return true +- } +- +- return false +-} +- +-func parseUpgradeInfoFile(filename string) (upgradetypes.Plan, error) { +- var ui upgradetypes.Plan +- +- f, err := os.Open(filename) +- if err != nil { +- return upgradetypes.Plan{}, err +- } +- defer f.Close() +- +- d := json.NewDecoder(f) +- if err := d.Decode(&ui); err != nil { +- return upgradetypes.Plan{}, err +- } +- +- // required values must be set +- if ui.Height <= 0 || ui.Name == "" { +- return upgradetypes.Plan{}, fmt.Errorf("invalid upgrade-info.json content; name and height must be not empty; got: %v", ui) +- } +- +- // Normalize name to prevent operator error in upgrade name case sensitivity +- // errors. +- ui.Name = strings.ToLower(ui.Name) +- +- return ui, err +-} +diff --git a/cosmovisor/scanner_test.go b/cosmovisor/scanner_test.go +deleted file mode 100644 +index f45dfafe85..0000000000 +--- a/cosmovisor/scanner_test.go ++++ /dev/null +@@ -1,64 +0,0 @@ +-package cosmovisor +- +-import ( +- "path/filepath" +- "testing" +- +- "github.com/stretchr/testify/require" +- +- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +-) +- +-func TestParseUpgradeInfoFile(t *testing.T) { +- cases := []struct { +- filename string +- expectUpgrade upgradetypes.Plan +- expectErr bool +- }{{ +- filename: "f1-good.json", +- expectUpgrade: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 123}, +- expectErr: false, +- }, { +- filename: "f2-bad-type.json", +- expectUpgrade: upgradetypes.Plan{}, +- expectErr: true, +- }, { +- filename: "f2-bad-type-2.json", +- expectUpgrade: upgradetypes.Plan{}, +- expectErr: true, +- }, { +- filename: "f3-empty.json", +- expectUpgrade: upgradetypes.Plan{}, +- expectErr: true, +- }, { +- filename: "f4-empty-obj.json", +- expectUpgrade: upgradetypes.Plan{}, +- expectErr: true, +- }, { +- filename: "f5-partial-obj-1.json", +- expectUpgrade: upgradetypes.Plan{}, +- expectErr: true, +- }, { +- filename: "f5-partial-obj-2.json", +- expectUpgrade: upgradetypes.Plan{}, +- expectErr: true, +- }, { +- filename: "unknown.json", +- expectUpgrade: upgradetypes.Plan{}, +- expectErr: true, +- }} +- +- for i := range cases { +- tc := cases[i] +- t.Run(tc.filename, func(t *testing.T) { +- require := require.New(t) +- ui, err := parseUpgradeInfoFile(filepath.Join(".", "testdata", "upgrade-files", tc.filename)) +- if tc.expectErr { +- require.Error(err) +- } else { +- require.NoError(err) +- require.Equal(tc.expectUpgrade, ui) +- } +- }) +- } +-} +diff --git a/cosmovisor/testdata/download/cosmovisor/genesis/bin/autod b/cosmovisor/testdata/download/cosmovisor/genesis/bin/autod +deleted file mode 100755 +index 89cb77365a..0000000000 +--- a/cosmovisor/testdata/download/cosmovisor/genesis/bin/autod ++++ /dev/null +@@ -1,12 +0,0 @@ +-#!/bin/sh +- +-echo Genesis autod. Args: $@ +-sleep 0.1 +-echo 'ERROR: UPGRADE "chain2" NEEDED at height: 49: zip_binary' +- +-# create upgrade info +-# this info contains directly information about binaries (in chain2->chain3 update we test with info containing a link to the file with an address for the new chain binary) +-echo '{"name":"chain2","height":49,"info":"{\"binaries\":{\"linux/amd64\":\"https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/chain2-zip_bin/autod.zip?checksum=sha256:b30cf0b1a3e46ac9587cc4d7b102eb796e39e3e0dfa3f8ca6e163fc1b1e913ca\"}}"}' >$3 +- +-sleep 0.1 +-echo Never should be printed!!! +diff --git a/cosmovisor/testdata/download/data/.gitkeep b/cosmovisor/testdata/download/data/.gitkeep +deleted file mode 100644 +index e69de29bb2..0000000000 +diff --git a/cosmovisor/testdata/repo/chain2-zip_bin/autod b/cosmovisor/testdata/repo/chain2-zip_bin/autod +deleted file mode 100755 +index 5bc99c5521..0000000000 +--- a/cosmovisor/testdata/repo/chain2-zip_bin/autod ++++ /dev/null +@@ -1,13 +0,0 @@ +-#!/bin/sh +- +-echo Chain 2 from zipped binary +-echo Args: $@ +-# note that we just have a url (follow the ref), not a full link +-echo 'ERROR: UPGRADE "chain3" NEEDED at height: 936: ref_to_chain3-zip_dir.json module=main' +- +-# this update info doesn't contain binaries, instead it is a reference for further download instructions. +-# echo '{"name":"chain3","height":936,"info":"{\"binaries\":{\"linux/amd64\":\"https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json\"}}"}' > $3 +-echo '{"name":"chain3","height":936,"info":"https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json"}' >$3 +- +-sleep 1 +-echo 'Do not print' +diff --git a/cosmovisor/testdata/repo/chain2-zip_bin/autod.zip b/cosmovisor/testdata/repo/chain2-zip_bin/autod.zip +deleted file mode 100644 +index 68d33a538c..0000000000 +Binary files a/cosmovisor/testdata/repo/chain2-zip_bin/autod.zip and /dev/null differ +diff --git a/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip b/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip +deleted file mode 100644 +index dffb1aba46..0000000000 +Binary files a/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip and /dev/null differ +diff --git a/cosmovisor/testdata/repo/chain3-zip_dir/bin/autod b/cosmovisor/testdata/repo/chain3-zip_dir/bin/autod +deleted file mode 100755 +index 235c82b630..0000000000 +--- a/cosmovisor/testdata/repo/chain3-zip_dir/bin/autod ++++ /dev/null +@@ -1,4 +0,0 @@ +-#!/bin/sh +- +-echo Chain 3 from zipped directory +-echo Args: $@ +diff --git a/cosmovisor/testdata/repo/raw_binary/autod b/cosmovisor/testdata/repo/raw_binary/autod +deleted file mode 100755 +index 0022b84af2..0000000000 +--- a/cosmovisor/testdata/repo/raw_binary/autod ++++ /dev/null +@@ -1,6 +0,0 @@ +-#!/bin/sh +- +-echo Chain 2 is live! +-echo Args: $@ +-sleep 1 +-echo Finished successfully +diff --git a/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json b/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json +deleted file mode 100644 +index 7baa216b96..0000000000 +--- a/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json ++++ /dev/null +@@ -1,5 +0,0 @@ +-{ +- "binaries": { +- "linux/amd64": "https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip?checksum=sha256:8951f52a0aea8617de0ae459a20daf704c29d259c425e60d520e363df0f166b4" +- } +-} +diff --git a/cosmovisor/testdata/repo/zip_directory/autod.zip b/cosmovisor/testdata/repo/zip_directory/autod.zip +deleted file mode 100644 +index 225cd4672a..0000000000 +Binary files a/cosmovisor/testdata/repo/zip_directory/autod.zip and /dev/null differ +diff --git a/cosmovisor/testdata/upgrade-files/f1-good.json b/cosmovisor/testdata/upgrade-files/f1-good.json +deleted file mode 100644 +index fd64644e18..0000000000 +--- a/cosmovisor/testdata/upgrade-files/f1-good.json ++++ /dev/null +@@ -1 +0,0 @@ +-{"name": "upgrade1", "info": "some info", "height": 123} +diff --git a/cosmovisor/testdata/upgrade-files/f2-bad-type-2.json b/cosmovisor/testdata/upgrade-files/f2-bad-type-2.json +deleted file mode 100644 +index 8019e2a0c1..0000000000 +--- a/cosmovisor/testdata/upgrade-files/f2-bad-type-2.json ++++ /dev/null +@@ -1 +0,0 @@ +-{"name": "upgrade1", "heigh": "123"} +diff --git a/cosmovisor/testdata/upgrade-files/f2-bad-type.json b/cosmovisor/testdata/upgrade-files/f2-bad-type.json +deleted file mode 100644 +index 4abd0f77c7..0000000000 +--- a/cosmovisor/testdata/upgrade-files/f2-bad-type.json ++++ /dev/null +@@ -1 +0,0 @@ +-{"name": "upgrade1", "info": 123, "heigh": 123} +diff --git a/cosmovisor/testdata/upgrade-files/f3-empty.json b/cosmovisor/testdata/upgrade-files/f3-empty.json +deleted file mode 100644 +index 8b13789179..0000000000 +--- a/cosmovisor/testdata/upgrade-files/f3-empty.json ++++ /dev/null +@@ -1 +0,0 @@ +- +diff --git a/cosmovisor/testdata/upgrade-files/f4-empty-obj.json b/cosmovisor/testdata/upgrade-files/f4-empty-obj.json +deleted file mode 100644 +index 0967ef424b..0000000000 +--- a/cosmovisor/testdata/upgrade-files/f4-empty-obj.json ++++ /dev/null +@@ -1 +0,0 @@ +-{} +diff --git a/cosmovisor/testdata/upgrade-files/f5-partial-obj-1.json b/cosmovisor/testdata/upgrade-files/f5-partial-obj-1.json +deleted file mode 100644 +index 19aecd9bcd..0000000000 +--- a/cosmovisor/testdata/upgrade-files/f5-partial-obj-1.json ++++ /dev/null +@@ -1 +0,0 @@ +-{"name": "upgrade2"} +diff --git a/cosmovisor/testdata/upgrade-files/f5-partial-obj-2.json b/cosmovisor/testdata/upgrade-files/f5-partial-obj-2.json +deleted file mode 100644 +index 0f13ee91be..0000000000 +--- a/cosmovisor/testdata/upgrade-files/f5-partial-obj-2.json ++++ /dev/null +@@ -1 +0,0 @@ +-{"height": 1} +diff --git a/cosmovisor/testdata/validate/cosmovisor/genesis/bin/dummyd b/cosmovisor/testdata/validate/cosmovisor/genesis/bin/dummyd +deleted file mode 100755 +index 8d54d60d07..0000000000 +--- a/cosmovisor/testdata/validate/cosmovisor/genesis/bin/dummyd ++++ /dev/null +@@ -1,9 +0,0 @@ +-#!/bin/sh +- +-echo Genesis $@ +-sleep 1 +-test -z $4 && exit 1001 +-echo 'UPGRADE "chain2" NEEDED at height: 49: {}' +-echo '{"name":"chain2","height":49,"info":""}' > $4 +-sleep 2 +-echo Never should be printed!!! +diff --git a/cosmovisor/testdata/validate/cosmovisor/upgrades/chain2/bin/dummyd b/cosmovisor/testdata/validate/cosmovisor/upgrades/chain2/bin/dummyd +deleted file mode 100755 +index 0022b84af2..0000000000 +--- a/cosmovisor/testdata/validate/cosmovisor/upgrades/chain2/bin/dummyd ++++ /dev/null +@@ -1,6 +0,0 @@ +-#!/bin/sh +- +-echo Chain 2 is live! +-echo Args: $@ +-sleep 1 +-echo Finished successfully +diff --git a/cosmovisor/testdata/validate/cosmovisor/upgrades/chain3/bin/dummyd b/cosmovisor/testdata/validate/cosmovisor/upgrades/chain3/bin/dummyd +deleted file mode 100755 +index edfb6c403e..0000000000 +--- a/cosmovisor/testdata/validate/cosmovisor/upgrades/chain3/bin/dummyd ++++ /dev/null +@@ -1,6 +0,0 @@ +-#!/bin/sh +- +-echo Chain 3 finally! +-echo Args: $@ +-sleep 1 +-echo Finished successfully +diff --git a/cosmovisor/testdata/validate/cosmovisor/upgrades/nobin/bin/.keep b/cosmovisor/testdata/validate/cosmovisor/upgrades/nobin/bin/.keep +deleted file mode 100644 +index e69de29bb2..0000000000 +diff --git a/cosmovisor/testdata/validate/cosmovisor/upgrades/noexec/bin/dummyd b/cosmovisor/testdata/validate/cosmovisor/upgrades/noexec/bin/dummyd +deleted file mode 100644 +index 9fa65cddeb..0000000000 +--- a/cosmovisor/testdata/validate/cosmovisor/upgrades/noexec/bin/dummyd ++++ /dev/null +@@ -1,3 +0,0 @@ +-#!/bin/sh +- +-echo 'exec flag not set' +diff --git a/cosmovisor/testdata/validate/data/.gitkeep b/cosmovisor/testdata/validate/data/.gitkeep +deleted file mode 100644 +index e69de29bb2..0000000000 +diff --git a/cosmovisor/upgrade.go b/cosmovisor/upgrade.go +deleted file mode 100644 +index 9667ffb5ed..0000000000 +--- a/cosmovisor/upgrade.go ++++ /dev/null +@@ -1,171 +0,0 @@ +-package cosmovisor +- +-import ( +- "encoding/json" +- "errors" +- "fmt" +- "net/url" +- "os" +- "path/filepath" +- "runtime" +- "strings" +- +- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +- "github.com/hashicorp/go-getter" +- "github.com/otiai10/copy" +- "github.com/rs/zerolog" +-) +- +-// DoUpgrade will be called after the log message has been parsed and the process has terminated. +-// We can now make any changes to the underlying directory without interference and leave it +-// in a state, so we can make a proper restart +-func DoUpgrade(logger *zerolog.Logger, cfg *Config, info upgradetypes.Plan) error { +- // Simplest case is to switch the link +- err := EnsureBinary(cfg.UpgradeBin(info.Name)) +- if err == nil { +- // we have the binary - do it +- return cfg.SetCurrentUpgrade(info) +- } +- // if auto-download is disabled, we fail +- if !cfg.AllowDownloadBinaries { +- return fmt.Errorf("binary not present, downloading disabled: %w", err) +- } +- +- // if the dir is there already, don't download either +- if _, err := os.Stat(cfg.UpgradeDir(info.Name)); !os.IsNotExist(err) { +- return errors.New("upgrade dir already exists, won't overwrite") +- } +- +- // If not there, then we try to download it... maybe +- logger.Info().Msg("no upgrade binary found, beginning to download it") +- if err := DownloadBinary(cfg, info); err != nil { +- return fmt.Errorf("cannot download binary. %w", err) +- } +- logger.Info().Msg("downloading binary complete") +- +- // and then set the binary again +- if err := EnsureBinary(cfg.UpgradeBin(info.Name)); err != nil { +- return fmt.Errorf("downloaded binary doesn't check out: %w", err) +- } +- +- return cfg.SetCurrentUpgrade(info) +-} +- +-// DownloadBinary will grab the binary and place it in the proper directory +-func DownloadBinary(cfg *Config, info upgradetypes.Plan) error { +- url, err := GetDownloadURL(info) +- if err != nil { +- return err +- } +- +- // download into the bin dir (works for one file) +- binPath := cfg.UpgradeBin(info.Name) +- err = getter.GetFile(binPath, url) +- +- // if this fails, let's see if it is a zipped directory +- if err != nil { +- dirPath := cfg.UpgradeDir(info.Name) +- err = getter.Get(dirPath, url) +- if err != nil { +- return err +- } +- err = EnsureBinary(binPath) +- // copy binary to binPath from dirPath if zipped directory don't contain bin directory to wrap the binary +- if err != nil { +- err = copy.Copy(filepath.Join(dirPath, cfg.Name), binPath) +- if err != nil { +- return err +- } +- } +- } +- +- // if it is successful, let's ensure the binary is executable +- return MarkExecutable(binPath) +-} +- +-// MarkExecutable will try to set the executable bits if not already set +-// Fails if file doesn't exist or we cannot set those bits +-func MarkExecutable(path string) error { +- info, err := os.Stat(path) +- if err != nil { +- return fmt.Errorf("stating binary: %w", err) +- } +- // end early if world exec already set +- if info.Mode()&0o001 == 1 { +- return nil +- } +- // now try to set all exec bits +- newMode := info.Mode().Perm() | 0o111 +- return os.Chmod(path, newMode) +-} +- +-// UpgradeConfig is expected format for the info field to allow auto-download +-type UpgradeConfig struct { +- Binaries map[string]string `json:"binaries"` +-} +- +-// GetDownloadURL will check if there is an arch-dependent binary specified in Info +-func GetDownloadURL(info upgradetypes.Plan) (string, error) { +- doc := strings.TrimSpace(info.Info) +- // if this is a url, then we download that and try to get a new doc with the real info +- if _, err := url.Parse(doc); err == nil { +- tmpDir, err := os.MkdirTemp("", "upgrade-manager-reference") +- if err != nil { +- return "", fmt.Errorf("create tempdir for reference file: %w", err) +- } +- defer os.RemoveAll(tmpDir) +- +- refPath := filepath.Join(tmpDir, "ref") +- if err := getter.GetFile(refPath, doc); err != nil { +- return "", fmt.Errorf("downloading reference link %s: %w", doc, err) +- } +- +- refBytes, err := os.ReadFile(refPath) +- if err != nil { +- return "", fmt.Errorf("reading downloaded reference: %w", err) +- } +- // if download worked properly, then we use this new file as the binary map to parse +- doc = string(refBytes) +- } +- +- // check if it is the upgrade config +- var config UpgradeConfig +- +- if err := json.Unmarshal([]byte(doc), &config); err == nil { +- url, ok := config.Binaries[OSArch()] +- if !ok { +- url, ok = config.Binaries["any"] +- } +- if !ok { +- return "", fmt.Errorf("cannot find binary for os/arch: neither %s, nor any", OSArch()) +- } +- +- return url, nil +- } +- +- return "", errors.New("upgrade info doesn't contain binary map") +-} +- +-func OSArch() string { +- return fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH) +-} +- +-// EnsureBinary ensures the file exists and is executable, or returns an error +-func EnsureBinary(path string) error { +- info, err := os.Stat(path) +- if err != nil { +- return fmt.Errorf("cannot stat dir %s: %w", path, err) +- } +- +- if !info.Mode().IsRegular() { +- return fmt.Errorf("%s is not a regular file", info.Name()) +- } +- +- // this checks if the world-executable bit is set (we cannot check owner easily) +- exec := info.Mode().Perm() & 0o001 +- if exec == 0 { +- return fmt.Errorf("%s is not world executable", info.Name()) +- } +- +- return nil +-} +diff --git a/cosmovisor/upgrade_test.go b/cosmovisor/upgrade_test.go +deleted file mode 100644 +index 44a611222d..0000000000 +--- a/cosmovisor/upgrade_test.go ++++ /dev/null +@@ -1,300 +0,0 @@ +-//go:build linux +-// +build linux +- +-package cosmovisor_test +- +-import ( +- "errors" +- "fmt" +- "net" +- "os" +- "path/filepath" +- "strings" +- "testing" +- +- "github.com/otiai10/copy" +- +- "github.com/stretchr/testify/require" +- "github.com/stretchr/testify/suite" +- +- "github.com/cosmos/cosmos-sdk/cosmovisor" +- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +-) +- +-type upgradeTestSuite struct { +- suite.Suite +-} +- +-func TestUpgradeTestSuite(t *testing.T) { +- suite.Run(t, new(upgradeTestSuite)) +-} +- +-func (s *upgradeTestSuite) TestCurrentBin() { +- home := copyTestData(s.T(), "validate") +- cfg := cosmovisor.Config{Home: home, Name: "dummyd"} +- +- currentBin, err := cfg.CurrentBin() +- s.Require().NoError(err) +- +- s.Require().Equal(cfg.GenesisBin(), currentBin) +- +- // ensure we cannot set this to an invalid value +- for _, name := range []string{"missing", "nobin", "noexec"} { +- s.Require().Error(cfg.SetCurrentUpgrade(upgradetypes.Plan{Name: name}), name) +- +- currentBin, err := cfg.CurrentBin() +- s.Require().NoError(err) +- +- s.Require().Equal(cfg.GenesisBin(), currentBin, name) +- } +- +- // try a few times to make sure this can be reproduced +- for _, name := range []string{"chain2", "chain3", "chain2"} { +- // now set it to a valid upgrade and make sure CurrentBin is now set properly +- err = cfg.SetCurrentUpgrade(upgradetypes.Plan{Name: name}) +- s.Require().NoError(err) +- // we should see current point to the new upgrade dir +- currentBin, err := cfg.CurrentBin() +- s.Require().NoError(err) +- +- s.Require().Equal(cfg.UpgradeBin(name), currentBin) +- } +-} +- +-func (s *upgradeTestSuite) TestCurrentAlwaysSymlinkToDirectory() { +- home := copyTestData(s.T(), "validate") +- cfg := cosmovisor.Config{Home: home, Name: "dummyd"} +- +- currentBin, err := cfg.CurrentBin() +- s.Require().NoError(err) +- s.Require().Equal(cfg.GenesisBin(), currentBin) +- s.assertCurrentLink(cfg, "genesis") +- +- err = cfg.SetCurrentUpgrade(upgradetypes.Plan{Name: "chain2"}) +- s.Require().NoError(err) +- currentBin, err = cfg.CurrentBin() +- s.Require().NoError(err) +- s.Require().Equal(cfg.UpgradeBin("chain2"), currentBin) +- s.assertCurrentLink(cfg, filepath.Join("upgrades", "chain2")) +-} +- +-func (s *upgradeTestSuite) assertCurrentLink(cfg cosmovisor.Config, target string) { +- link := filepath.Join(cfg.Root(), "current") +- // ensure this is a symlink +- info, err := os.Lstat(link) +- s.Require().NoError(err) +- s.Require().Equal(os.ModeSymlink, info.Mode()&os.ModeSymlink) +- +- dest, err := os.Readlink(link) +- s.Require().NoError(err) +- expected := filepath.Join(cfg.Root(), target) +- s.Require().Equal(expected, dest) +-} +- +-// TODO: test with download (and test all download functions) +-func (s *upgradeTestSuite) TestDoUpgradeNoDownloadUrl() { +- home := copyTestData(s.T(), "validate") +- cfg := &cosmovisor.Config{Home: home, Name: "dummyd", AllowDownloadBinaries: true} +- logger := cosmovisor.NewLogger() +- +- currentBin, err := cfg.CurrentBin() +- s.Require().NoError(err) +- +- s.Require().Equal(cfg.GenesisBin(), currentBin) +- +- // do upgrade ignores bad files +- for _, name := range []string{"missing", "nobin", "noexec"} { +- info := upgradetypes.Plan{Name: name} +- err = cosmovisor.DoUpgrade(logger, cfg, info) +- s.Require().Error(err, name) +- currentBin, err := cfg.CurrentBin() +- s.Require().NoError(err) +- s.Require().Equal(cfg.GenesisBin(), currentBin, name) +- } +- +- // make sure it updates a few times +- for _, upgrade := range []string{"chain2", "chain3"} { +- // now set it to a valid upgrade and make sure CurrentBin is now set properly +- info := upgradetypes.Plan{Name: upgrade} +- err = cosmovisor.DoUpgrade(logger, cfg, info) +- s.Require().NoError(err) +- // we should see current point to the new upgrade dir +- upgradeBin := cfg.UpgradeBin(upgrade) +- currentBin, err := cfg.CurrentBin() +- s.Require().NoError(err) +- +- s.Require().Equal(upgradeBin, currentBin) +- } +-} +- +-func (s *upgradeTestSuite) TestOsArch() { +- // all download tests will fail if we are not on linux... +- s.Require().Equal("linux/amd64", cosmovisor.OSArch()) +-} +- +-func (s *upgradeTestSuite) TestGetDownloadURL() { +- // all download tests will fail if we are not on linux... +- ref, err := filepath.Abs(filepath.FromSlash("./testdata/repo/ref_to_chain3-zip_dir.json")) +- s.Require().NoError(err) +- badref, err := filepath.Abs(filepath.FromSlash("./testdata/repo/chain2-zip_bin/autod.zip")) // "./testdata/repo/zip_binary/autod.zip")) +- s.Require().NoError(err) +- +- cases := map[string]struct { +- info string +- url string +- err interface{} +- +- // If err == nil, the test must not report an error. +- // If err is a string, the test must report an error whose string has err +- // as a substring. +- // If err is a func(suite.Suite, error), it is called to check the error +- // value. +- }{ +- "missing": { +- err: "downloading reference link : invalid source string:", +- }, +- "follow reference": { +- info: ref, +- url: "https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip?checksum=sha256:8951f52a0aea8617de0ae459a20daf704c29d259c425e60d520e363df0f166b4", +- }, +- "malformated reference target": { +- info: badref, +- err: "upgrade info doesn't contain binary map", +- }, +- "missing link": { +- info: "https://no.such.domain/exists.txt", +- err: func(s suite.Suite, err error) { +- var dns *net.DNSError +- s.Require().True(errors.As(err, &dns), "result is not a DNSError") +- s.Require().Equal("no.such.domain", dns.Name) +- s.Require().Equal(true, dns.IsNotFound) +- }, +- }, +- "proper binary": { +- info: `{"binaries": {"linux/amd64": "https://foo.bar/", "windows/amd64": "https://something.else"}}`, +- url: "https://foo.bar/", +- }, +- "any architecture not used": { +- info: `{"binaries": {"linux/amd64": "https://foo.bar/", "*": "https://something.else"}}`, +- url: "https://foo.bar/", +- }, +- "any architecture used": { +- info: `{"binaries": {"linux/arm": "https://foo.bar/arm-only", "any": "https://foo.bar/portable"}}`, +- url: "https://foo.bar/portable", +- }, +- "missing binary": { +- info: `{"binaries": {"linux/arm": "https://foo.bar/"}}`, +- err: "cannot find binary for", +- }, +- } +- +- for name, tc := range cases { +- s.Run(name, func() { +- url, err := cosmovisor.GetDownloadURL(upgradetypes.Plan{Info: tc.info}) +- switch e := tc.err.(type) { +- case nil: +- s.Require().NoError(err) +- s.Require().Equal(tc.url, url) +- +- case string: +- s.Require().Error(err) +- s.Require().Contains(err.Error(), tc.err) +- +- case func(suite.Suite, error): +- e(s.Suite, err) +- } +- }) +- } +-} +- +-func (s *upgradeTestSuite) TestDownloadBinary() { +- cases := map[string]struct { +- url string +- canDownload bool +- validBinary bool +- }{ +- "get raw binary": { +- url: "./testdata/repo/raw_binary/autod", +- canDownload: true, +- validBinary: true, +- }, +- "get raw binary with checksum": { +- // sha256sum ./testdata/repo/raw_binary/autod +- url: "./testdata/repo/raw_binary/autod?checksum=sha256:e6bc7851600a2a9917f7bf88eb7bdee1ec162c671101485690b4deb089077b0d", +- canDownload: true, +- validBinary: true, +- }, +- "get raw binary with invalid checksum": { +- url: "./testdata/repo/raw_binary/autod?checksum=sha256:73e2bd6cbb99261733caf137015d5cc58e3f96248d8b01da68be8564989dd906", +- canDownload: false, +- }, +- "get zipped directory": { +- url: "./testdata/repo/chain3-zip_dir/autod.zip", +- canDownload: true, +- validBinary: true, +- }, +- "get zipped directory with valid checksum": { +- // sha256sum ./testdata/repo/chain3-zip_dir/autod.zip +- url: "./testdata/repo/chain3-zip_dir/autod.zip?checksum=sha256:8951f52a0aea8617de0ae459a20daf704c29d259c425e60d520e363df0f166b4", +- canDownload: true, +- validBinary: true, +- }, +- "get zipped directory with invalid checksum": { +- url: "./testdata/repo/chain3-zip_dir/autod.zip?checksum=sha256:73e2bd6cbb99261733caf137015d5cc58e3f96248d8b01da68be8564989dd906", +- canDownload: false, +- }, +- "invalid url": { +- url: "./testdata/repo/bad_dir/autod", +- canDownload: false, +- }, +- } +- +- for label, tc := range cases { +- s.Run(label, func() { +- var err error +- // make temp dir +- home := copyTestData(s.T(), "download") +- +- cfg := &cosmovisor.Config{ +- Home: home, +- Name: "autod", +- AllowDownloadBinaries: true, +- } +- +- url := tc.url +- if strings.HasPrefix(url, "./") { +- url, err = filepath.Abs(url) +- s.Require().NoError(err) +- } +- +- const upgrade = "amazonas" +- info := upgradetypes.Plan{ +- Name: upgrade, +- Info: fmt.Sprintf(`{"binaries":{"%s": "%s"}}`, cosmovisor.OSArch(), url), +- } +- +- err = cosmovisor.DownloadBinary(cfg, info) +- if !tc.canDownload { +- s.Require().Error(err) +- } else { +- s.Require().NoError(err) +- } +- +- err = cosmovisor.EnsureBinary(cfg.UpgradeBin(upgrade)) +- if tc.validBinary { +- s.Require().NoError(err) +- } +- }) +- } +-} +- +-// copyTestData will make a tempdir and then +-// "cp -r" a subdirectory under testdata there +-// returns the directory (which can now be used as Config.Home) and modified safely +-func copyTestData(t *testing.T, subdir string) string { +- t.Helper() +- tmpdir := t.TempDir() +- require.NoError(t, copy.Copy(filepath.Join("testdata", subdir), tmpdir)) +- +- return tmpdir +-} +diff --git a/crypto/codec/proto.go b/crypto/codec/proto.go +index 1340dab03d..45cd5b4c35 100644 +--- a/crypto/codec/proto.go ++++ b/crypto/codec/proto.go +@@ -20,6 +20,6 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { + var priv *cryptotypes.PrivKey + registry.RegisterInterface("cosmos.crypto.PrivKey", priv) + registry.RegisterImplementations(priv, &secp256k1.PrivKey{}) +- registry.RegisterImplementations(priv, &ed25519.PrivKey{}) //nolint ++ registry.RegisterImplementations(priv, &ed25519.PrivKey{}) + secp256r1.RegisterInterfaces(registry) + } +diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go +index 8d5c707f1a..58daefb152 100644 +--- a/crypto/keyring/keyring.go ++++ b/crypto/keyring/keyring.go +@@ -586,7 +586,7 @@ func SignWithLedger(k *Record, msg []byte) (sig []byte, pub types.PubKey, err er + return + } + +- sig, err = priv.Sign(msg) ++ sig, err = priv.SignLedgerAminoJSON(msg) + if err != nil { + return nil, nil, err + } +diff --git a/crypto/ledger/ledger_mock.go b/crypto/ledger/ledger_mock.go +index 21e18cc6c9..60d6471cef 100644 +--- a/crypto/ledger/ledger_mock.go ++++ b/crypto/ledger/ledger_mock.go +@@ -84,7 +84,7 @@ func (mock LedgerSECP256K1Mock) GetAddressPubKeySECP256K1(derivationPath []uint3 + return pk, addr, err + } + +-func (mock LedgerSECP256K1Mock) SignSECP256K1(derivationPath []uint32, message []byte) ([]byte, error) { ++func (mock LedgerSECP256K1Mock) SignSECP256K1(derivationPath []uint32, message []byte, p2 byte) ([]byte, error) { + path := hd.NewParams(derivationPath[0], derivationPath[1], derivationPath[2], derivationPath[3] != 0, derivationPath[4]) + seed, err := bip39.NewSeedWithErrorChecking(testdata.TestMnemonic, "") + if err != nil { +diff --git a/crypto/ledger/ledger_secp256k1.go b/crypto/ledger/ledger_secp256k1.go +index 29f50ad4e2..fac4e17166 100644 +--- a/crypto/ledger/ledger_secp256k1.go ++++ b/crypto/ledger/ledger_secp256k1.go +@@ -32,7 +32,10 @@ type ( + // Returns a compressed pubkey and bech32 address (requires user confirmation) + GetAddressPubKeySECP256K1([]uint32, string) ([]byte, string, error) + // Signs a message (requires user confirmation) +- SignSECP256K1([]uint32, []byte) ([]byte, error) ++ // The last byte denotes the SIGN_MODE to be used by Ledger: 0 for ++ // LEGACY_AMINO_JSON, 1 for TEXTUAL. It corresponds to the P2 value ++ // in https://github.com/cosmos/ledger-cosmos/blob/main/docs/APDUSPEC.md ++ SignSECP256K1([]uint32, []byte, byte) ([]byte, error) + } + + // PrivKeyLedgerSecp256k1 implements PrivKey, calling the ledger nano we +@@ -51,7 +54,7 @@ type ( + // This function is marked as unsafe as it will retrieve a pubkey without user verification. + // It can only be used to verify a pubkey but never to create new accounts/keys. In that case, + // please refer to NewPrivKeySecp256k1 +-func NewPrivKeySecp256k1Unsafe(path hd.BIP44Params) (types.LedgerPrivKey, error) { ++func NewPrivKeySecp256k1Unsafe(path hd.BIP44Params) (types.LedgerPrivKeyAminoJSON, error) { + device, err := getDevice() + if err != nil { + return nil, err +@@ -88,7 +91,8 @@ func (pkl PrivKeyLedgerSecp256k1) PubKey() types.PubKey { + return pkl.CachedPubKey + } + +-// Sign returns a secp256k1 signature for the corresponding message ++// Sign returns a secp256k1 signature for the corresponding message using ++// SIGN_MODE_TEXTUAL. + func (pkl PrivKeyLedgerSecp256k1) Sign(message []byte) ([]byte, error) { + device, err := getDevice() + if err != nil { +@@ -96,7 +100,19 @@ func (pkl PrivKeyLedgerSecp256k1) Sign(message []byte) ([]byte, error) { + } + defer warnIfErrors(device.Close) + +- return sign(device, pkl, message) ++ return sign(device, pkl, message, 1) ++} ++ ++// SignLedgerAminoJSON returns a secp256k1 signature for the corresponding message using ++// SIGN_MODE_LEGACY_AMINO_JSON. ++func (pkl PrivKeyLedgerSecp256k1) SignLedgerAminoJSON(message []byte) ([]byte, error) { ++ device, err := getDevice() ++ if err != nil { ++ return nil, err ++ } ++ defer warnIfErrors(device.Close) ++ ++ return sign(device, pkl, message, 0) + } + + // ShowAddress triggers a ledger device to show the corresponding address. +@@ -228,13 +244,15 @@ func validateKey(device SECP256K1, pkl PrivKeyLedgerSecp256k1) error { + // Communication is checked on NewPrivKeyLedger and PrivKeyFromBytes, returning + // an error, so this should only trigger if the private key is held in memory + // for a while before use. +-func sign(device SECP256K1, pkl PrivKeyLedgerSecp256k1, msg []byte) ([]byte, error) { ++// ++// Last byte P2 is 0 for LEGACY_AMINO_JSON, and 1 for TEXTUAL. ++func sign(device SECP256K1, pkl PrivKeyLedgerSecp256k1, msg []byte, p2 byte) ([]byte, error) { + err := validateKey(device, pkl) + if err != nil { + return nil, err + } + +- sig, err := device.SignSECP256K1(pkl.Path.DerivationPath(), msg) ++ sig, err := device.SignSECP256K1(pkl.Path.DerivationPath(), msg, p2) + if err != nil { + return nil, err + } +diff --git a/crypto/types/types.go b/crypto/types/types.go +index eccdba7381..2969007765 100644 +--- a/crypto/types/types.go ++++ b/crypto/types/types.go +@@ -29,6 +29,17 @@ type LedgerPrivKey interface { + Type() string + } + ++// LedgerPrivKeyAminoJSON is a Ledger PrivKey type that supports signing with ++// SIGN_MODE_LEGACY_AMINO_JSON. It is added as a non-breaking change, instead of directly ++// on the LedgerPrivKey interface (whose Sign method will sign with TEXTUAL), ++// and will be deprecated/removed once LEGACY_AMINO_JSON is removed. ++type LedgerPrivKeyAminoJSON interface { ++ LedgerPrivKey ++ // SignLedgerAminoJSON signs a messages on the Ledger device using ++ // SIGN_MODE_LEGACY_AMINO_JSON. ++ SignLedgerAminoJSON(msg []byte) ([]byte, error) ++} ++ + // PrivKey defines a private key and extends proto.Message. For now, it extends + // LedgerPrivKey (see godoc for LedgerPrivKey). Ultimately, we should remove + // LedgerPrivKey and add its methods here directly. +diff --git a/docs/post.sh b/docs/post.sh +index af7c9a0fb0..2662dd1a31 100755 +--- a/docs/post.sh ++++ b/docs/post.sh +@@ -1,4 +1,3 @@ + #!/usr/bin/env bash + + rm -rf modules +-rm -rf run-node/cosmovisor.md +diff --git a/docs/pre.sh b/docs/pre.sh +index 495fd912ef..643babe6c4 100755 +--- a/docs/pre.sh ++++ b/docs/pre.sh +@@ -11,4 +11,3 @@ done + + cat ../x/README.md | sed 's/\.\/x/\/modules/g' | sed 's/spec\/README.md//g' | sed 's/\.\.\/docs\/building-modules\/README\.md/\/building-modules\/intro\.html/g' > ./modules/README.md + +-cp ../cosmovisor/README.md ./run-node/cosmovisor.md +diff --git a/go.mod b/go.mod +index 582d644db1..54da8ed00d 100644 +--- a/go.mod ++++ b/go.mod +@@ -18,7 +18,7 @@ require ( + github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1 + github.com/cosmos/go-bip39 v1.0.0 + github.com/cosmos/iavl v0.19.6 +- github.com/cosmos/ledger-cosmos-go v0.12.2 ++ github.com/cosmos/ledger-cosmos-go v0.13.2 + github.com/gogo/gateway v1.1.0 + github.com/gogo/protobuf v1.3.2 + github.com/golang/mock v1.6.0 +@@ -48,24 +48,24 @@ require ( + github.com/spf13/viper v1.13.0 + github.com/stretchr/testify v1.8.2 + github.com/tendermint/go-amino v0.16.0 +- github.com/tendermint/tendermint v0.34.29 ++ github.com/tendermint/tendermint v0.34.28 + github.com/tendermint/tm-db v0.6.7 + github.com/tidwall/btree v1.5.0 +- golang.org/x/crypto v0.7.0 ++ golang.org/x/crypto v0.14.0 + golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 +- google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 +- google.golang.org/grpc v1.54.0 +- google.golang.org/protobuf v1.30.0 ++ google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 ++ google.golang.org/grpc v1.58.3 ++ google.golang.org/protobuf v1.31.0 + pgregory.net/rapid v0.4.7 + sigs.k8s.io/yaml v1.3.0 + ) + + require ( +- cloud.google.com/go v0.110.0 // indirect +- cloud.google.com/go/compute v1.18.0 // indirect ++ cloud.google.com/go v0.110.8 // indirect ++ cloud.google.com/go/compute v1.23.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect +- cloud.google.com/go/iam v0.12.0 // indirect +- cloud.google.com/go/storage v1.28.1 // indirect ++ cloud.google.com/go/iam v1.1.2 // indirect ++ cloud.google.com/go/storage v1.30.1 // indirect + filippo.io/edwards25519 v1.0.0-rc.1 // indirect + github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect + github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect +@@ -73,6 +73,7 @@ require ( + github.com/aws/aws-sdk-go v1.40.45 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect ++ github.com/celestiaorg/nmt v0.19.0 // indirect + github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cespare/xxhash v1.1.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect +@@ -82,6 +83,7 @@ require ( + github.com/danieljoos/wincred v1.1.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect ++ github.com/deepmap/oapi-codegen v1.8.2 // 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.0 // indirect +@@ -93,15 +95,18 @@ require ( + github.com/go-kit/kit v0.12.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect ++ github.com/go-logr/logr v1.2.4 // indirect ++ github.com/go-logr/stdr v1.2.2 // indirect + github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect +- github.com/golang/glog v1.0.0 // indirect ++ github.com/golang/glog v1.1.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/btree v1.1.2 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/orderedcode v0.0.1 // indirect +- github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect +- github.com/googleapis/gax-go/v2 v2.7.0 // indirect ++ github.com/google/s2a-go v0.1.4 // indirect ++ github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect ++ github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/gtank/merlin v0.1.1 // indirect +@@ -112,6 +117,8 @@ require ( + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.0.1 // indirect ++ github.com/influxdata/influxdb-client-go/v2 v2.12.2 // indirect ++ github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/klauspost/compress v1.16.0 // indirect +@@ -132,6 +139,9 @@ require ( + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect ++ github.com/pyroscope-io/client v0.7.2 // indirect ++ github.com/pyroscope-io/godeltaprof v0.1.2 // indirect ++ github.com/pyroscope-io/otel-profiling-go v0.4.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect + github.com/rs/cors v1.8.2 // indirect +@@ -142,18 +152,25 @@ require ( + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect + github.com/ulikunitz/xz v0.5.8 // indirect +- github.com/zondax/hid v0.9.1 // indirect +- github.com/zondax/ledger-go v0.14.1 // indirect ++ github.com/zondax/hid v0.9.2 // indirect ++ github.com/zondax/ledger-go v0.14.3 // indirect + go.etcd.io/bbolt v1.3.6 // indirect + go.opencensus.io v0.24.0 // indirect +- golang.org/x/net v0.9.0 // indirect +- golang.org/x/oauth2 v0.5.0 // indirect +- golang.org/x/sys v0.7.0 // indirect +- golang.org/x/term v0.7.0 // indirect +- golang.org/x/text v0.9.0 // indirect ++ go.opentelemetry.io/otel v1.15.1 // indirect ++ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1 // indirect ++ go.opentelemetry.io/otel/sdk v1.15.1 // indirect ++ go.opentelemetry.io/otel/trace v1.15.1 // indirect ++ golang.org/x/net v0.17.0 // indirect ++ golang.org/x/oauth2 v0.10.0 // indirect ++ golang.org/x/sync v0.3.0 // indirect ++ golang.org/x/sys v0.13.0 // indirect ++ golang.org/x/term v0.13.0 // indirect ++ golang.org/x/text v0.13.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect +- google.golang.org/api v0.110.0 // indirect ++ google.golang.org/api v0.128.0 // indirect + google.golang.org/appengine v1.6.7 // indirect ++ google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 // indirect ++ google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +@@ -174,7 +191,7 @@ replace ( + // replace broken goleveldb. + github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + // use cometbft +- github.com/tendermint/tendermint => github.com/cometbft/cometbft v0.34.29 ++ github.com/tendermint/tendermint => github.com/celestiaorg/celestia-core v1.26.2-tm-v0.34.28 + ) + + retract ( +diff --git a/go.sum b/go.sum +index cd25d3acde..d194ad4564 100644 +--- a/go.sum ++++ b/go.sum +@@ -19,8 +19,8 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb + 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.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +-cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= ++cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= ++cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= + 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= +@@ -28,15 +28,14 @@ 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/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +-cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +-cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= ++cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= ++cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= + 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/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/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= +-cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +-cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= ++cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= ++cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= + 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= +@@ -47,8 +46,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl + 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.28.1 h1:F5QDG5ChchaAVQhINh24U99OWHURqrW8OmQcGKXcbgI= +-cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= ++cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= ++cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= + collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= + cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= + cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +@@ -163,6 +162,10 @@ github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA + github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= + github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= + github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= ++github.com/celestiaorg/celestia-core v1.26.2-tm-v0.34.28 h1:2efXQaggLFknz0wQufr4nUEz5G7pSVHS1j7NuJDsvII= ++github.com/celestiaorg/celestia-core v1.26.2-tm-v0.34.28/go.mod h1:++dNzzzjP9jYg+NopN9G8sg1HEZ58lv1TPtg71evZ0E= ++github.com/celestiaorg/nmt v0.19.0 h1:9VXFeI/gt+q8h5HeCE0RjXJhOxsFzxJUjHrkvF9CMYE= ++github.com/celestiaorg/nmt v0.19.0/go.mod h1:Oz15Ub6YPez9uJV0heoU4WpFctxazuIhKyUtaYNio7E= + 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= +@@ -193,6 +196,10 @@ github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3h + 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-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-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= +@@ -200,8 +207,6 @@ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE + github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= + github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= + github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= +-github.com/cometbft/cometbft v0.34.29 h1:Q4FqMevP9du2pOgryZJHpDV2eA6jg/kMYxBj9ZTY6VQ= +-github.com/cometbft/cometbft v0.34.29/go.mod h1:L9shMfbkZ8B+7JlwANEr+NZbBcn+hBpwdbeYvA5rLCw= + github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= + github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= + github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= +@@ -232,8 +237,8 @@ github.com/cosmos/iavl v0.19.6 h1:XY78yEeNPrEYyNCKlqr9chrwoeSDJ0bV2VjocTk//OU= + github.com/cosmos/iavl v0.19.6/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= + 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.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= +-github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= ++github.com/cosmos/ledger-cosmos-go v0.13.2 h1:aY0KZSmUwNKbBm9OvbIjvf7Ozz2YzzpAbgvN2C8x2T0= ++github.com/cosmos/ledger-cosmos-go v0.13.2/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.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +@@ -257,6 +262,7 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1 + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= + github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= + github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= ++github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= + github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= + 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= +@@ -295,6 +301,7 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m + 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.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= + github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= + github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= + github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +@@ -340,6 +347,11 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V + github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= + github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= + github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= ++github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= ++github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= ++github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= ++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.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= + github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= + github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +@@ -374,8 +386,8 @@ github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= + github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= + github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +-github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +-github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= ++github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= ++github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= + github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= + github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= + github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +@@ -407,6 +419,7 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD + github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= + github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= + github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= ++github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= + github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= + github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= + github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +@@ -431,12 +444,13 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ + 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.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= + github.com/google/go-cmp v0.5.9/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.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= + github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= ++github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= + github.com/google/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= +@@ -455,18 +469,20 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe + 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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= ++github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= ++github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= + github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= + github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= + github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= + github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= + github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= + github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +-github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +-github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= ++github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+OkstIrNiMjGpEIyhx8f6W7s4= ++github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= + 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.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= +-github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= ++github.com/googleapis/gax-go/v2 v2.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/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/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +@@ -556,10 +572,13 @@ github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf + github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= + github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= + github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= ++github.com/influxdata/influxdb-client-go/v2 v2.12.2 h1:uYABKdrEKlYm+++qfKdbgaHKBPmoWR5wpbmj6MBB/2g= ++github.com/influxdata/influxdb-client-go/v2 v2.12.2/go.mod h1:YteV91FiQxRdccyJ2cHvj2f/5sq4y4Njqu1fQzsQCOU= + github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= + github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= + github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= + github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= ++github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= + github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= + github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= + github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +@@ -825,6 +844,12 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O + github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= + github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= + github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= ++github.com/pyroscope-io/client v0.7.2 h1:OX2qdUQsS8RSkn/3C8isD7f/P0YiZQlRbAlecAaj/R8= ++github.com/pyroscope-io/client v0.7.2/go.mod h1:FEocnjn+Ngzxy6EtU9ZxXWRvQ0+pffkrBxHLnPpxwi8= ++github.com/pyroscope-io/godeltaprof v0.1.2 h1:MdlEmYELd5w+lvIzmZvXGNMVzW2Qc9jDMuJaPOR75g4= ++github.com/pyroscope-io/godeltaprof v0.1.2/go.mod h1:psMITXp90+8pFenXkKIpNhrfmI9saQnPbba27VIaiQE= ++github.com/pyroscope-io/otel-profiling-go v0.4.0 h1:Hk/rbUqOWoByoWy1tt4r5BX5xoKAvs5drr0511Ki8ic= ++github.com/pyroscope-io/otel-profiling-go v0.4.0/go.mod h1:MXaofiWU7PgLP7eISUZJYVO4Z8WYMqpkYgeP4XrPLyg= + github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= + github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= + github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +@@ -930,8 +955,11 @@ github.com/tidwall/btree v1.5.0 h1:iV0yVY/frd7r6qGBXfEYs7DH0gTDgrKTrDjS7xt/IyQ= + github.com/tidwall/btree v1.5.0/go.mod h1:LGm8L/DZjPLmeWGjv5kFrY8dL4uVhMmzmmLYmsObdKE= + github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= + github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= ++github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= ++github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= + github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= + github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= ++github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= + github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= + github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= + github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +@@ -968,10 +996,10 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de + 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.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= +-github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +-github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= +-github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= ++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.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= + go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +@@ -986,6 +1014,17 @@ 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.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= + go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= ++go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4= ++go.opentelemetry.io/otel v1.15.1 h1:3Iwq3lfRByPaws0f6bU3naAqOR1n5IeDWd9390kWHa8= ++go.opentelemetry.io/otel v1.15.1/go.mod h1:mHHGEHVDLal6YrKMmk9LqC4a3sF5g+fHfrttQIB1NTc= ++go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1 h1:2PunuO5SbkN5MhCbuHCd3tC6qrcaj+uDAkX/qBU5BAs= ++go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1/go.mod h1:q8+Tha+5LThjeSU8BW93uUC5w5/+DnYHMKBMpRCsui0= ++go.opentelemetry.io/otel/sdk v1.15.1 h1:5FKR+skgpzvhPQHIEfcwMYjCBr14LWzs3uSqKiQzETI= ++go.opentelemetry.io/otel/sdk v1.15.1/go.mod h1:8rVtxQfrbmbHKfqzpQkT5EzZMcbMBwTzNAggbEAM0KA= ++go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc= ++go.opentelemetry.io/otel/trace v1.15.1 h1:uXLo6iHJEzDfrNC0L0mNjItIp06SyaBQxu5t3xMlngY= ++go.opentelemetry.io/otel/trace v1.15.1/go.mod h1:IWdQG/5N1x7f6YUlmdLeJvH9yxtuJAfc4VW5Agv9r/8= ++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= +@@ -1020,9 +1059,10 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm + golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= + golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= ++golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= + golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +-golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +-golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= ++golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= ++golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= + golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= + golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= + golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +@@ -1118,11 +1158,12 @@ golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qx + golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= + golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= + golang.org/x/net v0.0.0-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-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= + golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= + golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +-golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= +-golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= ++golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= ++golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= + 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= +@@ -1132,8 +1173,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ + 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.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +-golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= ++golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= ++golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= + 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= +@@ -1146,6 +1187,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ + 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-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= ++golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= ++golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= + 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= +@@ -1230,15 +1273,15 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc + golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= + golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= + golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +-golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +-golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= ++golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= ++golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= + golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= + golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= + 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.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= +-golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= ++golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= ++golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= + 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= +@@ -1251,8 +1294,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= + golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= + golang.org/x/text v0.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.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= ++golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= ++golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= + golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= + golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= + golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +@@ -1355,8 +1398,8 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 + 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.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= +-google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= ++google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= ++google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= + 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= +@@ -1410,8 +1453,12 @@ google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6D + 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-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +-google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= +-google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= ++google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0= ++google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= ++google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 h1:U7+wNaVuSTaUqNvK2+osJ9ejEZxbjHHk8F2b6Hpx0AE= ++google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= ++google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c h1:jHkCUWkseRf+W+edG5hMzr/Uh1xkDREY4caybAq4dpY= ++google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= + google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= + google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= + google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +@@ -1436,8 +1483,10 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp + 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.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= +-google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= ++google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= ++google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= ++google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= ++google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= + 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= +@@ -1453,8 +1502,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 + 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.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +-google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +-google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= ++google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= ++google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= + gopkg.in/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= +diff --git a/proto/buf.lock b/proto/buf.lock +index f9f761d2bd..41b1ccf23e 100644 +--- a/proto/buf.lock ++++ b/proto/buf.lock +@@ -4,12 +4,21 @@ deps: + - remote: buf.build + owner: cosmos + repository: cosmos-proto ++ branch: main + commit: 1935555c206d4afb9e94615dfd0fad31 ++ digest: b1-TNqW6xj2Pjha5Uoj9a-5uOeRo4mwswKfyqMcN3I_gZ0= ++ create_time: 2021-12-02T22:04:00.31049Z + - remote: buf.build + owner: cosmos + repository: gogo-proto ++ branch: main + commit: bee5511075b7499da6178d9e4aaa628b ++ digest: b1-rrBIustouD-S80cVoZ_rM0qJsmei9AgbXy9GPQu6vxg= ++ create_time: 2021-12-02T20:01:17.069307Z + - remote: buf.build + owner: googleapis + repository: googleapis +- commit: 8d7204855ec14631a499bd7393ce1970 ++ branch: main ++ commit: 40f07f5b563941f2b20b991a7aedd53d ++ digest: b1-Iv8fTR4AKXwNW80Ey6K5tY8cP053y_95sB5fro9IWZo= ++ create_time: 2021-12-02T15:07:41.896892Z +diff --git a/proto/cosmos/base/tendermint/v1beta1/types.proto b/proto/cosmos/base/tendermint/v1beta1/types.proto +index 3d6c04c26a..c297d1ce0a 100644 +--- a/proto/cosmos/base/tendermint/v1beta1/types.proto ++++ b/proto/cosmos/base/tendermint/v1beta1/types.proto +@@ -3,7 +3,6 @@ package cosmos.base.tendermint.v1beta1; + + import "gogoproto/gogo.proto"; + import "tendermint/types/types.proto"; +-import "tendermint/types/evidence.proto"; + import "tendermint/version/types.proto"; + import "google/protobuf/timestamp.proto"; + +@@ -14,7 +13,6 @@ option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/tmservice"; + message Block { + Header header = 1 [(gogoproto.nullable) = false]; + .tendermint.types.Data data = 2 [(gogoproto.nullable) = false]; +- .tendermint.types.EvidenceList evidence = 3 [(gogoproto.nullable) = false]; + .tendermint.types.Commit last_commit = 4; + } + +diff --git a/proto/cosmos/vesting/v1beta1/tx.proto b/proto/cosmos/vesting/v1beta1/tx.proto +index 732fe12536..128d38ad03 100644 +--- a/proto/cosmos/vesting/v1beta1/tx.proto ++++ b/proto/cosmos/vesting/v1beta1/tx.proto +@@ -42,6 +42,8 @@ message MsgCreateVestingAccount { + // end of vesting as unix time (in seconds). + int64 end_time = 4; + bool delayed = 5; ++ // start of vesting as unix time (in seconds). ++ int64 start_time = 6; + } + + // MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type. +diff --git a/scripts/module-tests.sh b/scripts/module-tests.sh +index b6be64240e..86998b5aa9 100644 +--- a/scripts/module-tests.sh ++++ b/scripts/module-tests.sh +@@ -21,7 +21,7 @@ execute_mod_tests() { + + echo ">>> running $go_mod tests" + cd $mod_dir; +- go test -mod=readonly -timeout 30m -coverprofile=${root_dir}/${coverage_file}.tmp -covermode=atomic -tags='norace ledger test_ledger_mock rocksdb_build' ./... ++ go test -mod=readonly -timeout 30m -coverprofile=${root_dir}/${coverage_file}.tmp -covermode=atomic -tags='norace ledger test_ledger_mock' ./... + local ret=$? + echo "test return: " $ret; + cd -; +diff --git a/server/rollback.go b/server/rollback.go +index c5245589aa..10828e4813 100644 +--- a/server/rollback.go ++++ b/server/rollback.go +@@ -6,7 +6,7 @@ import ( + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/server/types" + "github.com/spf13/cobra" +- tmcmd "github.com/tendermint/tendermint/cmd/cometbft/commands" ++ cbftcmd "github.com/tendermint/tendermint/cmd/cometbft/commands" + ) + + // NewRollbackCmd creates a command to rollback tendermint and multistore state by one height. +@@ -32,7 +32,7 @@ application. + } + app := appCreator(ctx.Logger, db, nil, ctx.Viper) + // rollback tendermint state +- height, hash, err := tmcmd.RollbackState(ctx.Config) ++ height, hash, err := cbftcmd.RollbackState(ctx.Config) + if err != nil { + return fmt.Errorf("failed to rollback tendermint state: %w", err) + } +diff --git a/server/util.go b/server/util.go +index b28e339bff..cac4bd9df1 100644 +--- a/server/util.go ++++ b/server/util.go +@@ -12,7 +12,6 @@ import ( + "strconv" + "strings" + "syscall" +- "time" + + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" +@@ -20,7 +19,7 @@ import ( + "github.com/spf13/cobra" + "github.com/spf13/pflag" + "github.com/spf13/viper" +- tmcmd "github.com/tendermint/tendermint/cmd/cometbft/commands" ++ cbftcmd "github.com/tendermint/tendermint/cmd/cometbft/commands" + tmcfg "github.com/tendermint/tendermint/config" + tmlog "github.com/tendermint/tendermint/libs/log" + dbm "github.com/tendermint/tm-db" +@@ -34,6 +33,7 @@ import ( + "github.com/cosmos/cosmos-sdk/store" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/version" ++ cmtproto "github.com/tendermint/tendermint/proto/tendermint/types" + ) + + // DONTCOVER +@@ -44,9 +44,10 @@ const ServerContextKey = sdk.ContextKey("server.context") + + // server context + type Context struct { +- Viper *viper.Viper +- Config *tmcfg.Config +- Logger tmlog.Logger ++ Viper *viper.Viper ++ Config *tmcfg.Config ++ Logger tmlog.Logger ++ DefaultConsensusParams *cmtproto.ConsensusParams + } + + // ErrorCode contains the exit code for server exit. +@@ -67,7 +68,7 @@ func NewDefaultContext() *Context { + } + + func NewContext(v *viper.Viper, config *tmcfg.Config, logger tmlog.Logger) *Context { +- return &Context{v, config, logger} ++ return &Context{v, config, logger, nil} + } + + func bindFlags(basename string, cmd *cobra.Command, v *viper.Viper) (err error) { +@@ -214,7 +215,6 @@ func interceptConfigs(rootViper *viper.Viper, customAppTemplate string, customCo + conf.RPC.PprofListenAddress = "localhost:6060" + conf.P2P.RecvRate = 5120000 + conf.P2P.SendRate = 5120000 +- conf.Consensus.TimeoutCommit = 5 * time.Second + tmcfg.WriteConfigFile(tmCfgFile, conf) + + case err != nil: +@@ -283,8 +283,8 @@ func AddCommands(rootCmd *cobra.Command, defaultNodeHome string, appCreator type + ShowValidatorCmd(), + ShowAddressCmd(), + VersionCmd(), +- tmcmd.ResetAllCmd, +- tmcmd.ResetStateCmd, ++ cbftcmd.ResetAllCmd, ++ cbftcmd.ResetStateCmd, + BootstrapStateCmd(appCreator), + ) + +diff --git a/simapp/helpers/test_helpers.go b/simapp/helpers/test_helpers.go +index a0888c0901..2afb4e59c6 100644 +--- a/simapp/helpers/test_helpers.go ++++ b/simapp/helpers/test_helpers.go +@@ -13,7 +13,7 @@ import ( + + // SimAppChainID hardcoded chainID for simulation + const ( +- DefaultGenTxGas = 10000000 ++ DefaultGenTxGas = 2600000 // An increase is needed when adding checks to staking/msg_server.go + SimAppChainID = "simulation-app" + ) + +diff --git a/testutil/rest/rest.go b/testutil/rest/rest.go +index c2cd418d0d..89a16b3ff2 100644 +--- a/testutil/rest/rest.go ++++ b/testutil/rest/rest.go +@@ -12,7 +12,7 @@ import ( + // GetRequest defines a wrapper around an HTTP GET request with a provided URL. + // An error is returned if the request or reading the body fails. + func GetRequest(url string) ([]byte, error) { +- res, err := http.Get(url) // nolint:gosec ++ res, err := http.Get(url) //nolint:gosec + if err != nil { + return nil, err + } +@@ -31,7 +31,7 @@ func GetRequest(url string) ([]byte, error) { + // PostRequest defines a wrapper around an HTTP POST request with a provided URL and data. + // An error is returned if the request or reading the body fails. + func PostRequest(url string, contentType string, data []byte) ([]byte, error) { +- res, err := http.Post(url, contentType, bytes.NewBuffer(data)) // nolint:gosec ++ res, err := http.Post(url, contentType, bytes.NewBuffer(data)) //nolint:gosec + if err != nil { + return nil, fmt.Errorf("error while sending post request: %w", err) + } +diff --git a/types/tx/types.go b/types/tx/types.go +index 1c39d6c085..5ab6abc279 100644 +--- a/types/tx/types.go ++++ b/types/tx/types.go +@@ -13,8 +13,10 @@ import ( + const MaxGasWanted = uint64((1 << 63) - 1) + + // Interface implementation checks. +-var _, _, _, _ codectypes.UnpackInterfacesMessage = &Tx{}, &TxBody{}, &AuthInfo{}, &SignerInfo{} +-var _ sdk.Tx = &Tx{} ++var ( ++ _, _, _, _ codectypes.UnpackInterfacesMessage = &Tx{}, &TxBody{}, &AuthInfo{}, &SignerInfo{} ++ _ sdk.Tx = &Tx{} ++) + + // GetMsgs implements the GetMsgs method on sdk.Tx. + func (t *Tx) GetMsgs() []sdk.Msg { +diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go +index 745aa5c0f5..387dcdcdd9 100644 +--- a/x/auth/client/testutil/suite.go ++++ b/x/auth/client/testutil/suite.go +@@ -683,6 +683,7 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { + name string + args []string + expectEmpty bool ++ expectError string + }{ + { + "fee event happy case", +@@ -692,6 +693,7 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + }, + false, ++ "", + }, + { + "no matching fee event", +@@ -701,6 +703,7 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + }, + true, ++ "", + }, + } + +diff --git a/x/auth/migrations/legacytx/stdtx_builder.go b/x/auth/migrations/legacytx/stdtx_builder.go +index 35d26ce02e..a2577772db 100644 +--- a/x/auth/migrations/legacytx/stdtx_builder.go ++++ b/x/auth/migrations/legacytx/stdtx_builder.go +@@ -115,6 +115,10 @@ func (s StdTxConfig) TxDecoder() sdk.TxDecoder { + return mkDecoder(s.Cdc.Unmarshal) + } + ++func (s StdTxConfig) SetTxDecoder(t sdk.TxDecoder) { ++ // no-op ++} ++ + func (s StdTxConfig) TxJSONEncoder() sdk.TxEncoder { + return func(tx sdk.Tx) ([]byte, error) { + return s.Cdc.MarshalJSON(tx) +diff --git a/x/auth/spec/07_client.md b/x/auth/spec/07_client.md +index bcfdc6f6fa..cbc518b770 100644 +--- a/x/auth/spec/07_client.md ++++ b/x/auth/spec/07_client.md +@@ -408,7 +408,7 @@ simd tx vesting create-periodic-vesting-account cosmos1.. periods.json + + #### create-vesting-account + +-The `create-vesting-account` command creates a new vesting account funded with an allocation of tokens. The account can either be a delayed or continuous vesting account, which is determined by the '--delayed' flag. All vesting accouts created will have their start time set by the committed block's time. The end_time must be provided as a UNIX epoch timestamp. ++The `create-vesting-account` command creates a new vesting account funded with an allocation of tokens. The account can either be a delayed or continuous vesting account, which is determined by the '--delayed' flag. All vesting accounts created will have their start time set by the committed block's time unless specified explicitly using the `--start-time`flag. The `end_time` must be provided as a UNIX epoch timestamp. + + ```bash + simd tx vesting create-vesting-account [to_address] [amount] [end_time] [flags] +diff --git a/x/auth/tx/config.go b/x/auth/tx/config.go +index 78b78a9dd8..dd1dfe8e12 100644 +--- a/x/auth/tx/config.go ++++ b/x/auth/tx/config.go +@@ -67,6 +67,10 @@ func (g config) TxDecoder() sdk.TxDecoder { + return g.decoder + } + ++func (g *config) SetTxDecoder(decoder sdk.TxDecoder) { ++ g.decoder = decoder ++} ++ + func (g config) TxJSONEncoder() sdk.TxEncoder { + return g.jsonEncoder + } +diff --git a/x/auth/tx/query.go b/x/auth/tx/query.go +index 7028a1c4f1..bac2ec86cc 100644 +--- a/x/auth/tx/query.go ++++ b/x/auth/tx/query.go +@@ -44,7 +44,9 @@ func QueryTxsByEvents(clientCtx client.Context, events []string, page, limit int + + // TODO: this may not always need to be proven + // https://github.com/cosmos/cosmos-sdk/issues/6807 +- resTxs, err := node.TxSearch(context.Background(), query, true, &page, &limit, orderBy) ++ // FIXME: We have disabled the prove flag for now as celestia-core doesn't yet support it. ++ // Ref: https://github.com/celestiaorg/celestia-core/issues/918 ++ resTxs, err := node.TxSearch(context.Background(), query, false, &page, &limit, orderBy) + if err != nil { + return nil, err + } +@@ -79,7 +81,9 @@ func QueryTx(clientCtx client.Context, hashHexStr string) (*sdk.TxResponse, erro + + // TODO: this may not always need to be proven + // https://github.com/cosmos/cosmos-sdk/issues/6807 +- resTx, err := node.Tx(context.Background(), hash, true) ++ // FIXME: We have disabled the prove flag for now as celestia-core doesn't yet support it. ++ // Ref: https://github.com/celestiaorg/celestia-core/issues/918 ++ resTx, err := node.Tx(context.Background(), hash, false) + if err != nil { + return nil, err + } +diff --git a/x/auth/vesting/client/cli/tx.go b/x/auth/vesting/client/cli/tx.go +index f2ef3ba67f..72dd455f59 100644 +--- a/x/auth/vesting/client/cli/tx.go ++++ b/x/auth/vesting/client/cli/tx.go +@@ -17,7 +17,8 @@ import ( + + // Transaction command flags + const ( +- FlagDelayed = "delayed" ++ FlagDelayed = "delayed" ++ FlagStartTime = "start-time" + ) + + // GetTxCmd returns vesting module's transaction commands. +@@ -72,14 +73,18 @@ timestamp.`, + } + + delayed, _ := cmd.Flags().GetBool(FlagDelayed) ++ startTime, err := cmd.Flags().GetInt64(FlagStartTime) ++ if err != nil { ++ return err ++ } + +- msg := types.NewMsgCreateVestingAccount(clientCtx.GetFromAddress(), toAddr, amount, endTime, delayed) +- ++ msg := types.NewMsgCreateVestingAccount(clientCtx.GetFromAddress(), toAddr, amount, startTime, endTime, delayed) + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + cmd.Flags().Bool(FlagDelayed, false, "Create a delayed vesting account if true") ++ cmd.Flags().Int64(FlagStartTime, 0, "Optional start time (as a UNIX epoch timestamp) for continuous vesting accounts. If 0 (default), the block's time of the block this tx is committed to will be used.") + flags.AddTxFlagsToCmd(cmd) + + return cmd +diff --git a/x/auth/vesting/client/testutil/suite.go b/x/auth/vesting/client/testutil/suite.go +index 7f56de2c1c..829a0a8ba3 100644 +--- a/x/auth/vesting/client/testutil/suite.go ++++ b/x/auth/vesting/client/testutil/suite.go +@@ -63,6 +63,21 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() { + expectedCode: 0, + respType: &sdk.TxResponse{}, + }, ++ "create a continuous vesting account with start time": { ++ args: []string{ ++ sdk.AccAddress("addr2_______________").String(), ++ sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), ++ "4070908800", ++ fmt.Sprintf("--%s=%d", cli.FlagStartTime, 4070808800), ++ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address), ++ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), ++ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), ++ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), ++ }, ++ expectErr: false, ++ expectedCode: 0, ++ respType: &sdk.TxResponse{}, ++ }, + "create a delayed vesting account": { + args: []string{ + sdk.AccAddress("addr3_______________").String(), +diff --git a/x/auth/vesting/msg_server.go b/x/auth/vesting/msg_server.go +index c3dd578516..1d52a4f5d2 100644 +--- a/x/auth/vesting/msg_server.go ++++ b/x/auth/vesting/msg_server.go +@@ -44,6 +44,14 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre + return nil, err + } + ++ if msg.EndTime <= 0 { ++ return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid end time") ++ } ++ ++ if msg.EndTime <= msg.StartTime { ++ return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid start and end time (must be start < end)") ++ } ++ + if bk.BlockedAddr(to) { + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", msg.ToAddress) + } +@@ -60,7 +68,11 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre + if msg.Delayed { + vestingAccount = types.NewDelayedVestingAccountRaw(baseVestingAccount) + } else { +- vestingAccount = types.NewContinuousVestingAccountRaw(baseVestingAccount, ctx.BlockTime().Unix()) ++ start := ctx.BlockTime().Unix() ++ if msg.StartTime != 0 { ++ start = msg.StartTime ++ } ++ vestingAccount = types.NewContinuousVestingAccountRaw(baseVestingAccount, start) + } + + ak.SetAccount(ctx, vestingAccount) +diff --git a/x/auth/vesting/types/msgs.go b/x/auth/vesting/types/msgs.go +index f2194af569..20e37fe173 100644 +--- a/x/auth/vesting/types/msgs.go ++++ b/x/auth/vesting/types/msgs.go +@@ -25,11 +25,12 @@ var _ sdk.Msg = &MsgCreatePeriodicVestingAccount{} + // NewMsgCreateVestingAccount returns a reference to a new MsgCreateVestingAccount. + // + //nolint:interfacer +-func NewMsgCreateVestingAccount(fromAddr, toAddr sdk.AccAddress, amount sdk.Coins, endTime int64, delayed bool) *MsgCreateVestingAccount { ++func NewMsgCreateVestingAccount(fromAddr, toAddr sdk.AccAddress, amount sdk.Coins, startTime, endTime int64, delayed bool) *MsgCreateVestingAccount { + return &MsgCreateVestingAccount{ + FromAddress: fromAddr.String(), + ToAddress: toAddr.String(), + Amount: amount, ++ StartTime: startTime, + EndTime: endTime, + Delayed: delayed, + } +diff --git a/x/auth/vesting/types/tx.pb.go b/x/auth/vesting/types/tx.pb.go +index 0165ea8331..8fe34a78df 100644 +--- a/x/auth/vesting/types/tx.pb.go ++++ b/x/auth/vesting/types/tx.pb.go +@@ -41,6 +41,8 @@ type MsgCreateVestingAccount struct { + // end of vesting as unix time (in seconds). + EndTime int64 `protobuf:"varint,4,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + Delayed bool `protobuf:"varint,5,opt,name=delayed,proto3" json:"delayed,omitempty"` ++ // start of vesting as unix time (in seconds). ++ StartTime int64 `protobuf:"varint,6,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + } + + func (m *MsgCreateVestingAccount) Reset() { *m = MsgCreateVestingAccount{} } +@@ -111,6 +113,13 @@ func (m *MsgCreateVestingAccount) GetDelayed() bool { + return false + } + ++func (m *MsgCreateVestingAccount) GetStartTime() int64 { ++ if m != nil { ++ return m.StartTime ++ } ++ return 0 ++} ++ + // MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type. + type MsgCreateVestingAccountResponse struct { + } +@@ -380,46 +389,46 @@ func init() { + func init() { proto.RegisterFile("cosmos/vesting/v1beta1/tx.proto", fileDescriptor_5338ca97811f9792) } + + var fileDescriptor_5338ca97811f9792 = []byte{ +- // 609 bytes of a gzipped FileDescriptorProto +- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xb1, 0x6f, 0xd3, 0x40, +- 0x14, 0xc6, 0x73, 0x75, 0x68, 0x9b, 0x2b, 0x02, 0x61, 0x52, 0xe2, 0x44, 0xd4, 0x4e, 0x2d, 0x24, +- 0x0c, 0x52, 0x6d, 0x52, 0x90, 0x2a, 0x85, 0x01, 0x35, 0x1d, 0x21, 0x12, 0x32, 0x88, 0x81, 0x25, +- 0x72, 0xec, 0xc3, 0xb5, 0x5a, 0xfb, 0x22, 0xdf, 0xa5, 0x6a, 0x36, 0xc4, 0x5f, 0xc0, 0xc8, 0xc8, +- 0xcc, 0xc4, 0xc0, 0x8c, 0x18, 0x3b, 0x56, 0x4c, 0x4c, 0x01, 0x25, 0x03, 0x9d, 0xfb, 0x07, 0x20, +- 0x64, 0xdf, 0x39, 0x34, 0xe9, 0x25, 0x29, 0x0c, 0x4c, 0x4e, 0xee, 0x7d, 0xdf, 0xdd, 0xbb, 0x9f, +- 0xbf, 0x67, 0xa8, 0xb9, 0x98, 0x84, 0x98, 0x58, 0x07, 0x88, 0xd0, 0x20, 0xf2, 0xad, 0x83, 0x5a, +- 0x1b, 0x51, 0xa7, 0x66, 0xd1, 0x43, 0xb3, 0x13, 0x63, 0x8a, 0xe5, 0x1b, 0x4c, 0x60, 0x72, 0x81, +- 0xc9, 0x05, 0x95, 0xa2, 0x8f, 0x7d, 0x9c, 0x4a, 0xac, 0xe4, 0x17, 0x53, 0x57, 0x54, 0xbe, 0x5d, +- 0xdb, 0x21, 0x68, 0xb4, 0x97, 0x8b, 0x83, 0x88, 0xd7, 0xcb, 0xac, 0xde, 0x62, 0x46, 0xbe, 0x35, +- 0x2b, 0xdd, 0x9a, 0xd2, 0x49, 0x76, 0x30, 0x53, 0x95, 0xb8, 0x2a, 0x24, 0x89, 0x22, 0x79, 0xb0, +- 0x82, 0xfe, 0x65, 0x01, 0x96, 0x9a, 0xc4, 0xdf, 0x89, 0x91, 0x43, 0xd1, 0x0b, 0xe6, 0xd9, 0x76, +- 0x5d, 0xdc, 0x8d, 0xa8, 0xfc, 0x10, 0x5e, 0x7e, 0x15, 0xe3, 0xb0, 0xe5, 0x78, 0x5e, 0x8c, 0x08, +- 0x51, 0x40, 0x15, 0x18, 0x85, 0x86, 0xf2, 0xf5, 0xd3, 0x46, 0x91, 0xb7, 0xb0, 0xcd, 0x2a, 0xcf, +- 0x68, 0x1c, 0x44, 0xbe, 0xbd, 0x92, 0xa8, 0xf9, 0x92, 0xbc, 0x05, 0x21, 0xc5, 0x23, 0xeb, 0xc2, +- 0x1c, 0x6b, 0x81, 0xe2, 0xcc, 0xe8, 0xc2, 0x45, 0x27, 0x4c, 0xce, 0x57, 0xa4, 0xaa, 0x64, 0xac, +- 0x6c, 0x96, 0x4d, 0xee, 0x48, 0xe0, 0x64, 0x1c, 0xcd, 0x1d, 0x1c, 0x44, 0x8d, 0x7b, 0x47, 0x7d, +- 0x2d, 0xf7, 0xe1, 0xbb, 0x66, 0xf8, 0x01, 0xdd, 0xed, 0xb6, 0x4d, 0x17, 0x87, 0x1c, 0x0e, 0x7f, +- 0x6c, 0x10, 0x6f, 0xcf, 0xa2, 0xbd, 0x0e, 0x22, 0xa9, 0x81, 0xd8, 0x7c, 0x6b, 0xb9, 0x0c, 0x97, +- 0x51, 0xe4, 0xb5, 0x68, 0x10, 0x22, 0x25, 0x5f, 0x05, 0x86, 0x64, 0x2f, 0xa1, 0xc8, 0x7b, 0x1e, +- 0x84, 0x48, 0x56, 0xe0, 0x92, 0x87, 0xf6, 0x9d, 0x1e, 0xf2, 0x94, 0x4b, 0x55, 0x60, 0x2c, 0xdb, +- 0xd9, 0xdf, 0xfa, 0xea, 0xc9, 0x7b, 0x0d, 0xbc, 0xf9, 0xf9, 0xf1, 0xee, 0x18, 0x16, 0x7d, 0x1d, +- 0x6a, 0x53, 0x08, 0xda, 0x88, 0x74, 0x70, 0x44, 0x90, 0xfe, 0x0b, 0x9c, 0xd1, 0x3c, 0x45, 0x71, +- 0xe8, 0x44, 0x28, 0xa2, 0x4f, 0xb0, 0xbb, 0x87, 0xbc, 0x8c, 0x76, 0x5d, 0x48, 0xbb, 0x74, 0xda, +- 0xd7, 0xae, 0xf7, 0x9c, 0x70, 0xbf, 0xae, 0x8f, 0x1d, 0x3a, 0x0e, 0xfb, 0x81, 0x00, 0xf6, 0xea, +- 0x69, 0x5f, 0xbb, 0xc6, 0x9c, 0x7f, 0x6a, 0xfa, 0xff, 0x26, 0x5d, 0xcf, 0x27, 0xd0, 0xf4, 0x3b, +- 0xf0, 0xf6, 0x9c, 0xfb, 0x8f, 0x58, 0x9d, 0x4c, 0xb0, 0x0a, 0xb0, 0x17, 0xb8, 0x13, 0xc9, 0x5c, +- 0x17, 0xb1, 0x1a, 0x47, 0xb2, 0x76, 0x1e, 0xc9, 0xd9, 0xbb, 0xaf, 0x41, 0x48, 0xa8, 0x13, 0x53, +- 0x16, 0x01, 0x29, 0x8d, 0x40, 0x21, 0x5d, 0x49, 0x43, 0xd0, 0x84, 0x57, 0xf9, 0x00, 0xb5, 0x3a, +- 0x69, 0x0b, 0x44, 0xc9, 0xa7, 0x8c, 0x54, 0x53, 0x3c, 0xd8, 0x26, 0xeb, 0xb4, 0x91, 0x4f, 0x40, +- 0xd9, 0x57, 0x78, 0x95, 0x2d, 0x92, 0x34, 0x39, 0xb9, 0xf3, 0xc9, 0x99, 0xa0, 0x22, 0xb8, 0x69, +- 0x46, 0x65, 0xf3, 0xb3, 0x04, 0xa5, 0x26, 0xf1, 0xe5, 0xd7, 0x00, 0x16, 0x85, 0xc3, 0x6a, 0x4d, +- 0x6b, 0x6c, 0x4a, 0x36, 0x2b, 0x5b, 0x7f, 0x69, 0xc8, 0x5a, 0x91, 0xdf, 0x01, 0x78, 0x73, 0x66, +- 0x92, 0xe7, 0xef, 0x2c, 0x36, 0x56, 0x1e, 0xfd, 0xa3, 0x51, 0xdc, 0x9a, 0x28, 0x38, 0x17, 0x6a, +- 0x4d, 0x60, 0xbc, 0x58, 0x6b, 0x33, 0x5e, 0x60, 0xe3, 0xf1, 0xd1, 0x40, 0x05, 0xc7, 0x03, 0x15, +- 0xfc, 0x18, 0xa8, 0xe0, 0xed, 0x50, 0xcd, 0x1d, 0x0f, 0xd5, 0xdc, 0xb7, 0xa1, 0x9a, 0x7b, 0x59, +- 0x9b, 0x39, 0x53, 0x87, 0x96, 0xd3, 0xa5, 0xbb, 0xa3, 0xcf, 0x7b, 0x3a, 0x62, 0xed, 0xc5, 0xf4, +- 0xe3, 0x7d, 0xff, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3d, 0xa4, 0x06, 0x42, 0x87, 0x06, 0x00, +- 0x00, ++ // 614 bytes of a gzipped FileDescriptorProto ++ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0x31, 0x6f, 0xd3, 0x40, ++ 0x14, 0xce, 0xd5, 0xa1, 0x6d, 0xae, 0x08, 0x84, 0x49, 0x89, 0x13, 0x51, 0x3b, 0xb5, 0x90, 0x08, ++ 0x48, 0xb5, 0x49, 0x41, 0xaa, 0x14, 0x06, 0xd4, 0x74, 0x84, 0x48, 0xc8, 0x20, 0x06, 0x96, 0xc8, ++ 0xb1, 0x0f, 0xd7, 0x6a, 0xed, 0x8b, 0x7c, 0x97, 0xaa, 0xd9, 0x10, 0xbf, 0x80, 0x91, 0x91, 0x99, ++ 0x89, 0x81, 0x99, 0xb9, 0x63, 0xc5, 0xc4, 0x94, 0xa2, 0x64, 0xa0, 0x73, 0x7f, 0x00, 0x42, 0xf6, ++ 0x9d, 0x43, 0x9d, 0x5e, 0x92, 0xc2, 0xc0, 0x74, 0xf6, 0xbd, 0xef, 0x7b, 0xf7, 0xdd, 0xf7, 0xde, ++ 0x3b, 0xa8, 0x39, 0x98, 0x04, 0x98, 0x98, 0x07, 0x88, 0x50, 0x3f, 0xf4, 0xcc, 0x83, 0x7a, 0x07, ++ 0x51, 0xbb, 0x6e, 0xd2, 0x43, 0xa3, 0x1b, 0x61, 0x8a, 0xe5, 0x5b, 0x0c, 0x60, 0x70, 0x80, 0xc1, ++ 0x01, 0x95, 0xa2, 0x87, 0x3d, 0x9c, 0x40, 0xcc, 0xf8, 0x8b, 0xa1, 0x2b, 0x2a, 0x4f, 0xd7, 0xb1, ++ 0x09, 0x1a, 0xe7, 0x72, 0xb0, 0x1f, 0xf2, 0x78, 0x99, 0xc5, 0xdb, 0x8c, 0xc8, 0x53, 0xb3, 0xd0, ++ 0x9d, 0x29, 0x4a, 0xd2, 0x83, 0x19, 0xaa, 0xc4, 0x51, 0x01, 0x89, 0x11, 0xf1, 0xc2, 0x02, 0xfa, ++ 0xc9, 0x02, 0x2c, 0xb5, 0x88, 0xb7, 0x13, 0x21, 0x9b, 0xa2, 0x57, 0x8c, 0xb3, 0xed, 0x38, 0xb8, ++ 0x17, 0x52, 0xf9, 0x31, 0xbc, 0xfa, 0x26, 0xc2, 0x41, 0xdb, 0x76, 0xdd, 0x08, 0x11, 0xa2, 0x80, ++ 0x2a, 0xa8, 0x15, 0x9a, 0xca, 0xb7, 0x2f, 0x1b, 0x45, 0x2e, 0x61, 0x9b, 0x45, 0x5e, 0xd0, 0xc8, ++ 0x0f, 0x3d, 0x6b, 0x25, 0x46, 0xf3, 0x2d, 0x79, 0x0b, 0x42, 0x8a, 0xc7, 0xd4, 0x85, 0x39, 0xd4, ++ 0x02, 0xc5, 0x29, 0xd1, 0x81, 0x8b, 0x76, 0x10, 0x9f, 0xaf, 0x48, 0x55, 0xa9, 0xb6, 0xb2, 0x59, ++ 0x36, 0x38, 0x23, 0x36, 0x27, 0xf5, 0xd1, 0xd8, 0xc1, 0x7e, 0xd8, 0x7c, 0x70, 0x34, 0xd0, 0x72, ++ 0x9f, 0x4e, 0xb4, 0x9a, 0xe7, 0xd3, 0xdd, 0x5e, 0xc7, 0x70, 0x70, 0xc0, 0xcd, 0xe1, 0xcb, 0x06, ++ 0x71, 0xf7, 0x4c, 0xda, 0xef, 0x22, 0x92, 0x10, 0x88, 0xc5, 0x53, 0xcb, 0x65, 0xb8, 0x8c, 0x42, ++ 0xb7, 0x4d, 0xfd, 0x00, 0x29, 0xf9, 0x2a, 0xa8, 0x49, 0xd6, 0x12, 0x0a, 0xdd, 0x97, 0x7e, 0x80, ++ 0x64, 0x05, 0x2e, 0xb9, 0x68, 0xdf, 0xee, 0x23, 0x57, 0xb9, 0x52, 0x05, 0xb5, 0x65, 0x2b, 0xfd, ++ 0x95, 0xd7, 0x20, 0x24, 0xd4, 0x8e, 0x28, 0xa3, 0x2d, 0x26, 0xb4, 0x42, 0xb2, 0x13, 0x13, 0x1b, ++ 0xab, 0xa7, 0x1f, 0x35, 0xf0, 0xee, 0xe7, 0xe7, 0xfb, 0x19, 0xd7, 0xf4, 0x75, 0xa8, 0x4d, 0x31, ++ 0xd8, 0x42, 0xa4, 0x8b, 0x43, 0x82, 0xf4, 0x5f, 0xe0, 0x1c, 0xe6, 0x39, 0x8a, 0x02, 0x3b, 0x44, ++ 0x21, 0x7d, 0x86, 0x9d, 0x3d, 0xe4, 0xa6, 0xc5, 0x68, 0x08, 0x8b, 0x51, 0x3a, 0x1b, 0x68, 0x37, ++ 0xfb, 0x76, 0xb0, 0xdf, 0xd0, 0x33, 0x87, 0x66, 0x6b, 0xf1, 0x48, 0x50, 0x8b, 0xd5, 0xb3, 0x81, ++ 0x76, 0x83, 0x31, 0xff, 0xc4, 0xf4, 0xff, 0x5d, 0x88, 0x46, 0x3e, 0x36, 0x4d, 0xbf, 0x07, 0xef, ++ 0xce, 0xb9, 0xff, 0xd8, 0xab, 0xd3, 0x09, 0xaf, 0x7c, 0xec, 0xfa, 0xce, 0x44, 0xe3, 0xae, 0x8b, ++ 0xbc, 0xca, 0x5a, 0xb2, 0x76, 0xd1, 0x92, 0xf3, 0x77, 0xcf, 0x96, 0x5a, 0x9a, 0x28, 0xb5, 0xdc, ++ 0x82, 0xd7, 0xf9, 0x7c, 0xb5, 0xbb, 0x89, 0x04, 0xa2, 0xe4, 0x13, 0x8f, 0x54, 0x43, 0x3c, 0xf7, ++ 0x06, 0x53, 0xda, 0xcc, 0xc7, 0x46, 0x59, 0xd7, 0x78, 0x94, 0x6d, 0x92, 0xa4, 0x73, 0x72, 0x17, ++ 0x3b, 0x67, 0xc2, 0x15, 0xc1, 0x4d, 0x53, 0x57, 0x36, 0xbf, 0x4a, 0x50, 0x6a, 0x11, 0x4f, 0x7e, ++ 0x0b, 0x60, 0x51, 0x38, 0xcb, 0xe6, 0x34, 0x61, 0x53, 0x7a, 0xb3, 0xb2, 0xf5, 0x97, 0x84, 0x54, ++ 0x8a, 0xfc, 0x01, 0xc0, 0xdb, 0x33, 0x3b, 0x79, 0x7e, 0x66, 0x31, 0xb1, 0xf2, 0xe4, 0x1f, 0x89, ++ 0x62, 0x69, 0xa2, 0xc6, 0xb9, 0x94, 0x34, 0x01, 0xf1, 0x72, 0xd2, 0x66, 0x14, 0xb0, 0xf9, 0xf4, ++ 0x68, 0xa8, 0x82, 0xe3, 0xa1, 0x0a, 0x7e, 0x0c, 0x55, 0xf0, 0x7e, 0xa4, 0xe6, 0x8e, 0x47, 0x6a, ++ 0xee, 0xfb, 0x48, 0xcd, 0xbd, 0xae, 0xcf, 0x9c, 0xa9, 0x43, 0xd3, 0xee, 0xd1, 0xdd, 0xf1, 0xeb, ++ 0x9f, 0x8c, 0x58, 0x67, 0x31, 0x79, 0xdb, 0x1f, 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xab, 0xdc, ++ 0x57, 0xe2, 0xa6, 0x06, 0x00, 0x00, + } + + func (this *MsgCreateVestingAccount) Equal(that interface{}) bool { +@@ -461,6 +470,9 @@ func (this *MsgCreateVestingAccount) Equal(that interface{}) bool { + if this.Delayed != that1.Delayed { + return false + } ++ if this.StartTime != that1.StartTime { ++ return false ++ } + return true + } + func (this *MsgCreatePermanentLockedAccount) Equal(that interface{}) bool { +@@ -691,6 +703,11 @@ func (m *MsgCreateVestingAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) + _ = i + var l int + _ = l ++ if m.StartTime != 0 { ++ i = encodeVarintTx(dAtA, i, uint64(m.StartTime)) ++ i-- ++ dAtA[i] = 0x30 ++ } + if m.Delayed { + i-- + if m.Delayed { +@@ -950,6 +967,9 @@ func (m *MsgCreateVestingAccount) Size() (n int) { + if m.Delayed { + n += 2 + } ++ if m.StartTime != 0 { ++ n += 1 + sovTx(uint64(m.StartTime)) ++ } + return n + } + +@@ -1201,6 +1221,25 @@ func (m *MsgCreateVestingAccount) Unmarshal(dAtA []byte) error { + } + } + m.Delayed = bool(v != 0) ++ case 6: ++ if wireType != 0 { ++ return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) ++ } ++ m.StartTime = 0 ++ for shift := uint(0); ; shift += 7 { ++ if shift >= 64 { ++ return ErrIntOverflowTx ++ } ++ if iNdEx >= l { ++ return io.ErrUnexpectedEOF ++ } ++ b := dAtA[iNdEx] ++ iNdEx++ ++ m.StartTime |= int64(b&0x7F) << shift ++ if b < 0x80 { ++ break ++ } ++ } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) +diff --git a/x/auth/vesting/types/vesting_account_test.go b/x/auth/vesting/types/vesting_account_test.go +index 56ae59b05b..ca630182ee 100644 +--- a/x/auth/vesting/types/vesting_account_test.go ++++ b/x/auth/vesting/types/vesting_account_test.go +@@ -38,67 +38,95 @@ func (s *VestingAccountTestSuite) SetupTest() { + + func TestGetVestedCoinsContVestingAcc(t *testing.T) { + now := tmtime.Now() +- endTime := now.Add(24 * time.Hour) ++ startTime := now.Add(24 * time.Hour) ++ endTime := startTime.Add(24 * time.Hour) + + bacc, origCoins := initBaseAccount() +- cva := types.NewContinuousVestingAccount(bacc, origCoins, now.Unix(), endTime.Unix()) ++ cva := types.NewContinuousVestingAccount(bacc, origCoins, startTime.Unix(), endTime.Unix()) + +- // require no coins vested in the very beginning of the vesting schedule ++ // require no coins vested _before_ the start time of the vesting schedule + vestedCoins := cva.GetVestedCoins(now) + require.Nil(t, vestedCoins) + ++ // require no coins vested _before_ the very beginning of the vesting schedule ++ vestedCoins = cva.GetVestedCoins(startTime.Add(-1)) ++ require.Nil(t, vestedCoins) ++ + // require all coins vested at the end of the vesting schedule + vestedCoins = cva.GetVestedCoins(endTime) + require.Equal(t, origCoins, vestedCoins) + + // require 50% of coins vested +- vestedCoins = cva.GetVestedCoins(now.Add(12 * time.Hour)) ++ vestedCoins = cva.GetVestedCoins(startTime.Add(12 * time.Hour)) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}, vestedCoins) + ++ // require 75% of coins vested ++ vestedCoins = cva.GetVestedCoins(startTime.Add(18 * time.Hour)) ++ require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 750), sdk.NewInt64Coin(stakeDenom, 75)}, vestedCoins) ++ + // require 100% of coins vested +- vestedCoins = cva.GetVestedCoins(now.Add(48 * time.Hour)) ++ vestedCoins = cva.GetVestedCoins(endTime) + require.Equal(t, origCoins, vestedCoins) + } + + func TestGetVestingCoinsContVestingAcc(t *testing.T) { + now := tmtime.Now() +- endTime := now.Add(24 * time.Hour) ++ startTime := now.Add(24 * time.Hour) ++ endTime := startTime.Add(24 * time.Hour) + + bacc, origCoins := initBaseAccount() +- cva := types.NewContinuousVestingAccount(bacc, origCoins, now.Unix(), endTime.Unix()) ++ cva := types.NewContinuousVestingAccount(bacc, origCoins, startTime.Unix(), endTime.Unix()) + +- // require all coins vesting in the beginning of the vesting schedule ++ // require all coins vesting before the start time of the vesting schedule + vestingCoins := cva.GetVestingCoins(now) + require.Equal(t, origCoins, vestingCoins) + ++ // require all coins vesting right before the start time of the vesting schedule ++ vestingCoins = cva.GetVestingCoins(startTime.Add(-1)) ++ require.Equal(t, origCoins, vestingCoins) ++ + // require no coins vesting at the end of the vesting schedule + vestingCoins = cva.GetVestingCoins(endTime) + require.Nil(t, vestingCoins) + +- // require 50% of coins vesting +- vestingCoins = cva.GetVestingCoins(now.Add(12 * time.Hour)) ++ // require 50% of coins vesting in the middle between start and end time ++ vestingCoins = cva.GetVestingCoins(startTime.Add(12 * time.Hour)) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}, vestingCoins) ++ ++ // require 25% of coins vesting after 3/4 of the time between start and end time has passed ++ vestingCoins = cva.GetVestingCoins(startTime.Add(18 * time.Hour)) ++ require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}, vestingCoins) + } + + func TestSpendableCoinsContVestingAcc(t *testing.T) { + now := tmtime.Now() +- endTime := now.Add(24 * time.Hour) ++ startTime := now.Add(24 * time.Hour) ++ endTime := startTime.Add(24 * time.Hour) + + bacc, origCoins := initBaseAccount() +- cva := types.NewContinuousVestingAccount(bacc, origCoins, now.Unix(), endTime.Unix()) ++ cva := types.NewContinuousVestingAccount(bacc, origCoins, startTime.Unix(), endTime.Unix()) + +- // require that all original coins are locked at the end of the vesting ++ // require that all original coins are locked before the beginning of the vesting + // schedule + lockedCoins := cva.LockedCoins(now) + require.Equal(t, origCoins, lockedCoins) + +- // require that there exist no locked coins in the beginning of the ++ // require that all original coins are locked at the beginning of the vesting ++ // schedule ++ lockedCoins = cva.LockedCoins(startTime) ++ require.Equal(t, origCoins, lockedCoins) ++ ++ // require that there exist no locked coins in the end of the vesting schedule + lockedCoins = cva.LockedCoins(endTime) + require.Equal(t, sdk.NewCoins(), lockedCoins) + + // require that all vested coins (50%) are spendable +- lockedCoins = cva.LockedCoins(now.Add(12 * time.Hour)) ++ lockedCoins = cva.LockedCoins(startTime.Add(12 * time.Hour)) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}, lockedCoins) ++ ++ // require 25% of coins vesting after 3/4 of the time between start and end time has passed ++ lockedCoins = cva.LockedCoins(startTime.Add(18 * time.Hour)) ++ require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}, lockedCoins) + } + + func TestTrackDelegationContVestingAcc(t *testing.T) { +diff --git a/x/bank/migrations/v046/store_test.go b/x/bank/migrations/v046/store_test.go +index 0322f1e892..9fe34d09e3 100644 +--- a/x/bank/migrations/v046/store_test.go ++++ b/x/bank/migrations/v046/store_test.go +@@ -16,34 +16,32 @@ import ( + "github.com/cosmos/cosmos-sdk/x/bank/types" + ) + +-var ( +- metaData = []types.Metadata{ +- { +- Name: "Cosmos Hub Atom", +- Symbol: "ATOM", +- Description: "The native staking token of the Cosmos Hub.", +- DenomUnits: []*types.DenomUnit{ +- {"uatom", uint32(0), []string{"microatom"}}, +- {"matom", uint32(3), []string{"milliatom"}}, +- {"atom", uint32(6), nil}, +- }, +- Base: "uatom", +- Display: "atom", ++var metaData = []types.Metadata{ ++ { ++ Name: "Cosmos Hub Atom", ++ Symbol: "ATOM", ++ Description: "The native staking token of the Cosmos Hub.", ++ DenomUnits: []*types.DenomUnit{ ++ {"uatom", uint32(0), []string{"microatom"}}, ++ {"matom", uint32(3), []string{"milliatom"}}, ++ {"atom", uint32(6), nil}, + }, +- { +- Name: "Token", +- Symbol: "TOKEN", +- Description: "The native staking token of the Token Hub.", +- DenomUnits: []*types.DenomUnit{ +- {"1token", uint32(5), []string{"decitoken"}}, +- {"2token", uint32(4), []string{"centitoken"}}, +- {"3token", uint32(7), []string{"dekatoken"}}, +- }, +- Base: "utoken", +- Display: "token", ++ Base: "uatom", ++ Display: "atom", ++ }, ++ { ++ Name: "Token", ++ Symbol: "TOKEN", ++ Description: "The native staking token of the Token Hub.", ++ DenomUnits: []*types.DenomUnit{ ++ {"1token", uint32(5), []string{"decitoken"}}, ++ {"2token", uint32(4), []string{"centitoken"}}, ++ {"3token", uint32(7), []string{"dekatoken"}}, + }, +- } +-) ++ Base: "utoken", ++ Display: "token", ++ }, ++} + + func TestMigrateStore(t *testing.T) { + encCfg := simapp.MakeTestEncodingConfig() +diff --git a/x/genutil/client/cli/init.go b/x/genutil/client/cli/init.go +index f3a186b77f..91d0255dc8 100644 +--- a/x/genutil/client/cli/init.go ++++ b/x/genutil/client/cli/init.go +@@ -163,6 +163,10 @@ func InitCmd(mbm module.BasicManager, defaultNodeHome string) *cobra.Command { + genDoc.Validators = nil + genDoc.AppState = appState + ++ if serverCtx.DefaultConsensusParams != nil { ++ genDoc.ConsensusParams = serverCtx.DefaultConsensusParams ++ } ++ + if err = genutil.ExportGenesisFile(genDoc, genFile); err != nil { + return errors.Wrap(err, "Failed to export genesis file") + } +diff --git a/x/genutil/client/cli/init_test.go b/x/genutil/client/cli/init_test.go +index 705af61cac..058c088565 100644 +--- a/x/genutil/client/cli/init_test.go ++++ b/x/genutil/client/cli/init_test.go +@@ -14,6 +14,7 @@ import ( + abci_server "github.com/tendermint/tendermint/abci/server" + "github.com/tendermint/tendermint/libs/cli" + "github.com/tendermint/tendermint/libs/log" ++ coretypes "github.com/tendermint/tendermint/types" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" +@@ -283,6 +284,43 @@ func TestInitConfig(t *testing.T) { + require.Contains(t, out, "\"chain_id\": \"foo\"") + } + ++func TestInitWithConsensusParams(t *testing.T) { ++ home := t.TempDir() ++ logger := log.NewNopLogger() ++ cfg, err := genutiltest.CreateDefaultTendermintConfig(home) ++ require.NoError(t, err) ++ ++ serverCtx := server.NewContext(viper.New(), cfg, logger) ++ ++ // set new default consensus params ++ cps := coretypes.DefaultConsensusParams() ++ cps.Block.MaxBytes = 100000000 ++ cps.Block.MaxGas = 420420420 ++ serverCtx.DefaultConsensusParams = cps ++ ++ interfaceRegistry := types.NewInterfaceRegistry() ++ marshaler := codec.NewProtoCodec(interfaceRegistry) ++ clientCtx := client.Context{}. ++ WithCodec(marshaler). ++ WithLegacyAmino(makeCodec()). ++ WithHomeDir(home) ++ ++ ctx := context.Background() ++ ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx) ++ ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx) ++ ++ cmd := genutilcli.InitCmd(testMbm, home) ++ cmd.SetArgs([]string{"testnode"}) ++ ++ err = cmd.ExecuteContext(ctx) ++ require.NoError(t, err) ++ ++ genDoc, err := coretypes.GenesisDocFromFile(cfg.GenesisFile()) ++ require.NoError(t, err) ++ ++ require.Equal(t, genDoc.ConsensusParams, cps) ++} ++ + // custom tx codec + func makeCodec() *codec.LegacyAmino { + cdc := codec.NewLegacyAmino() +diff --git a/x/genutil/client/cli/migrate.go b/x/genutil/client/cli/migrate.go +index c16fcb843d..33b2d0c760 100644 +--- a/x/genutil/client/cli/migrate.go ++++ b/x/genutil/client/cli/migrate.go +@@ -62,73 +62,7 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 + `, version.AppName), + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { +- clientCtx := client.GetClientContextFromCmd(cmd) +- +- var err error +- +- target := args[0] +- importGenesis := args[1] +- +- genDoc, err := validateGenDoc(importGenesis) +- if err != nil { +- return err +- } +- +- // Since some default values are valid values, we just print to +- // make sure the user didn't forget to update these values. +- if genDoc.ConsensusParams.Evidence.MaxBytes == 0 { +- fmt.Printf("Warning: consensus_params.evidence.max_bytes is set to 0. If this is"+ +- " deliberate, feel free to ignore this warning. If not, please have a look at the chain"+ +- " upgrade guide at %s.\n", chainUpgradeGuide) +- } +- +- var initialState types.AppMap +- if err := json.Unmarshal(genDoc.AppState, &initialState); err != nil { +- return errors.Wrap(err, "failed to JSON unmarshal initial genesis state") +- } +- +- migrationFunc := GetMigrationCallback(target) +- if migrationFunc == nil { +- return fmt.Errorf("unknown migration function for version: %s", target) +- } +- +- // TODO: handler error from migrationFunc call +- newGenState := migrationFunc(initialState, clientCtx) +- +- genDoc.AppState, err = json.Marshal(newGenState) +- if err != nil { +- return errors.Wrap(err, "failed to JSON marshal migrated genesis state") +- } +- +- genesisTime, _ := cmd.Flags().GetString(flagGenesisTime) +- if genesisTime != "" { +- var t time.Time +- +- err := t.UnmarshalText([]byte(genesisTime)) +- if err != nil { +- return errors.Wrap(err, "failed to unmarshal genesis time") +- } +- +- genDoc.GenesisTime = t +- } +- +- chainID, _ := cmd.Flags().GetString(flags.FlagChainID) +- if chainID != "" { +- genDoc.ChainID = chainID +- } +- +- bz, err := tmjson.Marshal(genDoc) +- if err != nil { +- return errors.Wrap(err, "failed to marshal genesis doc") +- } +- +- sortedBz, err := sdk.SortJSON(bz) +- if err != nil { +- return errors.Wrap(err, "failed to sort JSON genesis doc") +- } +- +- cmd.Println(string(sortedBz)) +- return nil ++ return MigrateHandler(cmd, args, migrationMap) + }, + } + +@@ -137,3 +71,75 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 + + return cmd + } ++ ++// MigrateHandler handles the migration command with a migration map as input, ++// returning an error upon failure. ++func MigrateHandler(cmd *cobra.Command, args []string, migrations types.MigrationMap) error { ++ clientCtx := client.GetClientContextFromCmd(cmd) ++ ++ var err error ++ ++ target := args[0] ++ importGenesis := args[1] ++ ++ genDoc, err := validateGenDoc(importGenesis) ++ if err != nil { ++ return err ++ } ++ ++ // Since some default values are valid values, we just print to ++ // make sure the user didn't forget to update these values. ++ if genDoc.ConsensusParams.Evidence.MaxBytes == 0 { ++ fmt.Printf("Warning: consensus_params.evidence.max_bytes is set to 0. If this is"+ ++ " deliberate, feel free to ignore this warning. If not, please have a look at the chain"+ ++ " upgrade guide at %s.\n", chainUpgradeGuide) ++ } ++ ++ var initialState types.AppMap ++ if err := json.Unmarshal(genDoc.AppState, &initialState); err != nil { ++ return errors.Wrap(err, "failed to JSON unmarshal initial genesis state") ++ } ++ ++ migrationFunc := migrations[target] ++ if migrationFunc == nil { ++ return fmt.Errorf("unknown migration function for version: %s", target) ++ } ++ ++ // TODO: handler error from migrationFunc call ++ newGenState := migrationFunc(initialState, clientCtx) ++ ++ genDoc.AppState, err = json.Marshal(newGenState) ++ if err != nil { ++ return errors.Wrap(err, "failed to JSON marshal migrated genesis state") ++ } ++ ++ genesisTime, _ := cmd.Flags().GetString(flagGenesisTime) ++ if genesisTime != "" { ++ var t time.Time ++ ++ err := t.UnmarshalText([]byte(genesisTime)) ++ if err != nil { ++ return errors.Wrap(err, "failed to unmarshal genesis time") ++ } ++ ++ genDoc.GenesisTime = t ++ } ++ ++ chainID, _ := cmd.Flags().GetString(flags.FlagChainID) ++ if chainID != "" { ++ genDoc.ChainID = chainID ++ } ++ ++ bz, err := tmjson.Marshal(genDoc) ++ if err != nil { ++ return errors.Wrap(err, "failed to marshal genesis doc") ++ } ++ ++ sortedBz, err := sdk.SortJSON(bz) ++ if err != nil { ++ return errors.Wrap(err, "failed to sort JSON genesis doc") ++ } ++ ++ cmd.Println(string(sortedBz)) ++ return nil ++} +diff --git a/x/gov/keeper/vote.go b/x/gov/keeper/vote.go +index 4e2436ff84..8fa690eeca 100644 +--- a/x/gov/keeper/vote.go ++++ b/x/gov/keeper/vote.go +@@ -38,6 +38,7 @@ func (keeper Keeper) AddVote(ctx sdk.Context, proposalID uint64, voterAddr sdk.A + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeProposalVote, ++ sdk.NewAttribute(types.AttributeKeyVoter, voterAddr.String()), + sdk.NewAttribute(types.AttributeKeyOption, options.String()), + sdk.NewAttribute(types.AttributeKeyProposalID, fmt.Sprintf("%d", proposalID)), + ), +diff --git a/x/gov/types/events.go b/x/gov/types/events.go +index 7217e7e387..9468c0fc98 100644 +--- a/x/gov/types/events.go ++++ b/x/gov/types/events.go +@@ -10,6 +10,7 @@ const ( + EventTypeSignalProposal = "signal_proposal" + + AttributeKeyProposalResult = "proposal_result" ++ AttributeKeyVoter = "voter" + AttributeKeyOption = "option" + AttributeKeyProposalID = "proposal_id" + AttributeKeyProposalMessages = "proposal_messages" // Msg type_urls in the proposal +diff --git a/x/gov/types/v1/msgs.go b/x/gov/types/v1/msgs.go +index dd83bf5dfa..e78121b0ab 100644 +--- a/x/gov/types/v1/msgs.go ++++ b/x/gov/types/v1/msgs.go +@@ -40,6 +40,18 @@ func (m *MsgSubmitProposal) GetMsgs() ([]sdk.Msg, error) { + return sdktx.GetMsgs(m.Messages, "sdk.MsgProposal") + } + ++// SetMsgs packs sdk.Msg's into m.Messages Any's ++// NOTE: this will overwrite any existing messages ++func (m *MsgSubmitProposal) SetMsgs(msgs []sdk.Msg) error { ++ anys, err := sdktx.SetMsgs(msgs) ++ if err != nil { ++ return err ++ } ++ ++ m.Messages = anys ++ return nil ++} ++ + // Route implements Msg + func (m MsgSubmitProposal) Route() string { return types.RouterKey } + From 5d61b061ec517382b3f91a32f1f81fbb500a8e96 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 6 Nov 2023 19:40:02 +0100 Subject: [PATCH 02/10] docs: remove original git diff --- cosmos-sdk.diff | 7511 ----------------------------------------------- 1 file changed, 7511 deletions(-) delete mode 100644 cosmos-sdk.diff diff --git a/cosmos-sdk.diff b/cosmos-sdk.diff deleted file mode 100644 index a0ec60a2fa1d..000000000000 --- a/cosmos-sdk.diff +++ /dev/null @@ -1,7511 +0,0 @@ -diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS -index 4b9db54900..964f80acb8 100644 ---- a/.github/CODEOWNERS -+++ b/.github/CODEOWNERS -@@ -4,4 +4,4 @@ - # most precedence. - - # Primary repo maintainers --* @cosmos/sdk-core-dev -+* @liamsi @evan-forbes -diff --git a/.github/dependabot.yml b/.github/dependabot.yml -index b2766ba8d1..75670d241f 100644 ---- a/.github/dependabot.yml -+++ b/.github/dependabot.yml -@@ -1,62 +1,12 @@ - version: 2 - updates: --- package-ecosystem: github-actions -- directory: "/" -- schedule: -- interval: daily -- open-pull-requests-limit: 10 --- package-ecosystem: npm -- directory: "/docs" -- schedule: -- interval: daily -- open-pull-requests-limit: 10 -- reviewers: -- - fadeev --- package-ecosystem: gomod -- directory: "/" -- schedule: -- interval: daily -- open-pull-requests-limit: 10 -- labels: -- - "A:automerge" -- - dependencies --- package-ecosystem: gomod -- directory: "/db" -- schedule: -- interval: daily -- open-pull-requests-limit: 10 -- labels: -- - "A:automerge" -- - dependencies --- package-ecosystem: gomod -- directory: "/api" -- schedule: -- interval: daily -- open-pull-requests-limit: 10 -- labels: -- - "A:automerge" -- - dependencies --- package-ecosystem: gomod -- directory: "/orm" -- schedule: -- interval: daily -- open-pull-requests-limit: 10 -- labels: -- - "A:automerge" -- - dependencies --- package-ecosystem: gomod -- directory: "/container" -- schedule: -- interval: daily -- open-pull-requests-limit: 10 -- labels: -- - "A:automerge" -- - dependencies --- package-ecosystem: gomod -- directory: "/cosmovisor" -- schedule: -- interval: daily -- open-pull-requests-limit: 10 -- labels: -- - "A:automerge" -- - dependencies -+ - package-ecosystem: gomod -+ directory: "/" -+ schedule: -+ interval: daily -+ open-pull-requests-limit: 10 -+ labels: -+ - automerge -+ - dependencies -+ allow: -+ - dependency-name: "*/celestiaorg/*" -diff --git a/.github/labeler.yml b/.github/labeler.yml -deleted file mode 100644 -index e34b8d5eeb..0000000000 ---- a/.github/labeler.yml -+++ /dev/null -@@ -1,65 +0,0 @@ --"C:x/auth": -- - x/auth/**/* --"C:x/authz": -- - x/authz/**/* --"C:x/bank": -- - x/bank/**/* --"C:x/capability": -- - x/capability/**/* --"C:x/crisis": -- - x/crisis/**/* --"C:x/distribution": -- - x/distribution/**/* --"C:x/evidence": -- - x/evidence/**/* --"C:x/feegrant": -- - x/feegrant/**/* --"C:x/genutil": -- - x/genutil/**/* --"C:x/gov": -- - x/gov/**/* --"C:x/group": -- - x/group/**/* --"C:x/mint": -- - x/mint/**/* --"C:x/nft": -- - x/nft/**/* --"C:x/params": -- - x/params/**/* --"C:Simulations": -- - x/simulation/**/* -- - x/*/simulation/**/* --"C:x/slashing": -- - x/slashing/**/* --"C:x/staking": -- - x/staking/**/* --"C:x/upgrade": -- - x/upgrade/**/* --"C:Cosmovisor": -- - cosmovisor/**/* --"C:Rosetta": -- - contrib/rosetta/**/* --"C:Keys": -- - client/keys/**/* --"Type: Build": -- - Makefile -- - Dockerfile -- - docker-compose.yml -- - scripts/* --"Type: CI": -- - .github/**/*.yml -- - buf.yaml -- - .mergify.yml -- - .golangci.yml --"C:CLI": -- - client/**/* -- - x/*/client/**/* --"Type: ADR": -- - docs/architecture/**/* --"C:container": -- - container/**/* --"C:Store": -- - store/**/* -- - db/**/* --"C:orm": -- - orm/**/* -diff --git a/.github/workflows/atlas.yml b/.github/workflows/atlas.yml -index 5c59de0308..e9ad4d0af8 100644 ---- a/.github/workflows/atlas.yml -+++ b/.github/workflows/atlas.yml -@@ -3,7 +3,8 @@ name: Atlas - on: - push: - branches: -- - main -+ - v[0-9]+.[0-9]+.x-celestia -+ - release/** - paths: - - "x/**/atlas/*" - pull_request: -diff --git a/.github/workflows/cosmovisor-release.yml b/.github/workflows/cosmovisor-release.yml -deleted file mode 100644 -index f28ca050bf..0000000000 ---- a/.github/workflows/cosmovisor-release.yml -+++ /dev/null -@@ -1,35 +0,0 @@ --name: Release Cosmovisor -- --on: -- push: -- tags: -- - "cosmovisor/v*.*.*" --jobs: -- goreleaser: -- runs-on: ubuntu-latest -- steps: -- - uses: actions/checkout@v3 -- with: -- fetch-depth: 0 -- - uses: actions/setup-go@v3 -- with: -- go-version: 1.19 -- # get 'v*.*.*' part from 'cosmovisor/v*.*.*' and save to $GITHUB_ENV -- - name: Set env -- run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/cosmovisor/}" >> $GITHUB_ENV -- # remove the possible pre-existing same tag for cosmos-sdk related tags instead of cosmovisor tags -- # Because goreleaser enforces semantic versioning and will error on non compliant tags.(https://goreleaser.com/limitations/semver/) -- - name: Tag without prefix locally to avoid error in goreleaser -- run: |- -- git tag -d ${{ env.RELEASE_VERSION }} || echo "No such a tag exists before" -- git tag ${{ env.RELEASE_VERSION }} HEAD -- - name: Run GoReleaser -- uses: goreleaser/goreleaser-action@v3 -- with: -- # stick to version v0.179.0(https://github.com/cosmos/cosmos-sdk/issues/11125) -- version: v0.179.0 -- args: release --rm-dist --skip-validate -- workdir: cosmovisor -- env: -- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -- GORELEASER_CURRENT_TAG: cosmovisor/${{ env.RELEASE_VERSION }} -diff --git a/.github/workflows/dependencies-review.yml b/.github/workflows/dependencies-review.yml -deleted file mode 100644 -index 52926d5742..0000000000 ---- a/.github/workflows/dependencies-review.yml -+++ /dev/null -@@ -1,14 +0,0 @@ --name: "Dependency Review" --on: [pull_request] -- --permissions: -- contents: read -- --jobs: -- dependency-review: -- runs-on: ubuntu-latest -- steps: -- - name: "Checkout Repository" -- uses: actions/checkout@v3 -- - name: "Dependency Review" -- uses: actions/dependency-review-action@v1 -diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml -index 6b80a78cad..f13b5e644b 100644 ---- a/.github/workflows/docker.yml -+++ b/.github/workflows/docker.yml -@@ -1,10 +1,10 @@ --name: Build & Push --# Build & Push builds the simapp docker image on every push to main and --# and pushes the image to https://hub.docker.com/r/interchainio/simapp/tags -+name: Build Simapp Docker -+# Builds the simapp docker image on every push to default branch. - on: - push: - branches: -- - main -+ - v[0-9]+.[0-9]+.x-celestia -+ - release/** - tags: - - "v[0-9]+.[0-9]+.[0-9]+" # Push events to matching v*, i.e. v1.0, v20.15.10 - - "v[0-9]+.[0-9]+.[0-9]+-rc*" # Push events to matching v*, i.e. v1.0-rc1, v20.15.10-rc5 -@@ -44,15 +44,7 @@ jobs: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - -- - name: Login to DockerHub -- if: ${{ github.event_name != 'pull_request' }} -- uses: docker/login-action@v2 -+ - name: Build but do not Publish to Docker Hub -+ uses: docker/build-push-action@v2 - with: -- username: ${{ secrets.DOCKER_USERNAME }} -- password: ${{ secrets.DOCKERHUB_TOKEN }} -- -- - name: Publish to Docker Hub -- uses: docker/build-push-action@v3 -- with: -- push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.prep.outputs.tags }} -diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml -deleted file mode 100644 -index 2f40ea5d36..0000000000 ---- a/.github/workflows/labeler.yml -+++ /dev/null -@@ -1,11 +0,0 @@ --name: "Pull Request Labeler" --on: -- - pull_request_target -- --jobs: -- labeler: -- runs-on: ubuntu-latest -- steps: -- - uses: actions/labeler@main -- with: -- repo-token: "${{ secrets.GITHUB_TOKEN }}" -\ No newline at end of file -diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml -index fe7226e9bb..57cfe37a8c 100644 ---- a/.github/workflows/lint.yml -+++ b/.github/workflows/lint.yml -@@ -4,7 +4,8 @@ on: - tags: - - v* - branches: -- - main -+ - v[0-9]+.[0-9]+.x-celestia -+ - release/** - pull_request: - permissions: - contents: read -diff --git a/.github/workflows/release-sims.yml b/.github/workflows/release-sims.yml -index 9df30442eb..bb2f6b968d 100644 ---- a/.github/workflows/release-sims.yml -+++ b/.github/workflows/release-sims.yml -@@ -21,8 +21,8 @@ jobs: - steps: - - name: install runsim - run: | -- export GO111MODULE="on" && go get github.com/cosmos/tools/cmd/runsim@v1.0.0 -- - uses: actions/cache@v3 -+ export GO111MODULE="on" && go install github.com/cosmos/tools/cmd/runsim@v1.0.0 -+ - uses: actions/cache@v3.0.2 - with: - path: ~/go/bin - key: ${{ runner.os }}-go-runsim-binary -diff --git a/.github/workflows/sims.yml b/.github/workflows/sims.yml -index 6a6e3723f6..c166abfa59 100644 ---- a/.github/workflows/sims.yml -+++ b/.github/workflows/sims.yml -@@ -2,10 +2,11 @@ name: Sims - # Sims workflow runs multiple types of simulations (nondeterminism, import-export, after-import, multi-seed-short) - # This workflow will run on all Pull Requests, if a .go, .mod or .sum file have been changed - on: -- schedule: -- - cron: "* */2 * * *" -- release: -- types: [published] -+ pull_request: -+ push: -+ branches: -+ - v[0-9]+.[0-9]+.x-celestia -+ - release/** - - jobs: - cleanup-runs: -@@ -37,7 +38,7 @@ jobs: - - name: Display go version - run: go version - - name: Install runsim -- run: go install github.com/cosmos/tools/cmd/runsim@v1.0.0 -+ run: export GO111MODULE="on" && go install github.com/cosmos/tools/cmd/runsim@v1.0.0 - - uses: actions/cache@v3 - with: - path: ~/go/bin -diff --git a/.github/workflows/test-race.yml b/.github/workflows/test-race.yml -index 642ca23bbd..d6d5849f43 100644 ---- a/.github/workflows/test-race.yml -+++ b/.github/workflows/test-race.yml -@@ -51,9 +51,6 @@ jobs: - - name: Build - run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make build - -- - name: Build cosmovisor -- run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make cosmovisor -- - split-test-files: - runs-on: ubuntu-latest - steps: -diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml -index 2b1a8bc600..8feec5f9ff 100644 ---- a/.github/workflows/test.yml -+++ b/.github/workflows/test.yml -@@ -5,7 +5,8 @@ on: - pull_request: - push: - branches: -- - main -+ - v[0-9]+.[0-9]+.x-celestia -+ - release/** - - permissions: - contents: read -@@ -38,9 +39,6 @@ jobs: - - name: Build - run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make build - -- - name: Build cosmovisor -- run: GOARCH=${{ matrix.go-arch }} LEDGER_ENABLED=false make cosmovisor -- - test-submodules: - runs-on: ubuntu-latest - container: tendermintdev/docker-tm-db-testing -@@ -177,23 +175,6 @@ jobs: - file: ./coverage.txt - if: env.GIT_DIFF - -- test-rosetta: -- runs-on: ubuntu-latest -- timeout-minutes: 10 -- steps: -- - uses: actions/checkout@v3 -- - uses: technote-space/get-diff-action@v6.0.1 -- id: git_diff -- with: -- PATTERNS: | -- **/**.go -- go.mod -- go.sum -- - name: test rosetta -- run: | -- make test-rosetta -- # if: env.GIT_DIFF -- - liveness-test: - runs-on: ubuntu-latest - timeout-minutes: 15 -diff --git a/.golangci.yml b/.golangci.yml -index 08df5b3583..a2155d7176 100644 ---- a/.golangci.yml -+++ b/.golangci.yml -@@ -19,7 +19,7 @@ linters: - - misspell - - nakedret - - nolintlint -- - staticcheck -+ # - staticcheck disabling due to the sheer number of "this package has been moved to it's own module" errors TODO: reenable - - stylecheck - - typecheck - - unconvert -diff --git a/CHANGELOG.md b/CHANGELOG.md -index 0c09d1af02..0592756764 100644 ---- a/CHANGELOG.md -+++ b/CHANGELOG.md -@@ -37,6 +37,13 @@ Ref: https://keepachangelog.com/en/1.0.0/ - - ## [Unreleased] - -+### Improvements -+ -+* (x/gov) [#17387](https://github.com/cosmos/cosmos-sdk/pull/17387) Add `MsgSubmitProposal` `SetMsgs` method. -+* (x/gov) [#17354](https://github.com/cosmos/cosmos-sdk/issues/17354) Emit `VoterAddr` in `proposal_vote` event. -+* (x/genutil) [#17296](https://github.com/cosmos/cosmos-sdk/pull/17296) Add `MigrateHandler` to allow reuse migrate genesis related function. -+ * In v0.46, v0.47 this function is additive to the `genesis migrate` command. However in v0.50+, adding custom migrations to the `genesis migrate` command is directly possible. -+ - ## [v0.46.14](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.46.14) - 2023-07-17 - - ### Features -@@ -499,8 +506,8 @@ replace github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8 - - ### Improvements - --* (types) [\#12201](https://github.com/cosmos/cosmos-sdk/pull/12201) Add `MustAccAddressFromBech32` util function --* [\#11696](https://github.com/cosmos/cosmos-sdk/pull/11696) Rename `helpers.GenTx` to `GenSignedMockTx` to avoid confusion with genutil's `GenTxCmd`. -+* [\#12576](https://github.com/cosmos/cosmos-sdk/pull/12576) Remove dependency on cosmos/keyring and upgrade to 99designs/keyring v1.2.1 -+* [\#11693](https://github.com/cosmos/cosmos-sdk/pull/11693) Add validation for gentx cmd. - * (x/auth/vesting) [\#11652](https://github.com/cosmos/cosmos-sdk/pull/11652) Add util functions for `Period(s)` - * [\#11630](https://github.com/cosmos/cosmos-sdk/pull/11630) Add SafeSub method to sdk.Coin. - * [\#11511](https://github.com/cosmos/cosmos-sdk/pull/11511) Add api server flags to start command. -diff --git a/Makefile b/Makefile -index 464ed93248..8c3bb74f94 100644 ---- a/Makefile -+++ b/Makefile -@@ -120,10 +120,7 @@ $(BUILD_TARGETS): go.sum $(BUILDDIR)/ - $(BUILDDIR)/: - mkdir -p $(BUILDDIR)/ - --cosmovisor: -- $(MAKE) -C cosmovisor cosmovisor -- --.PHONY: build build-linux cosmovisor -+.PHONY: build build-linux - - mockgen_cmd=go run github.com/golang/mock/mockgen - -diff --git a/baseapp/abci.go b/baseapp/abci.go -index 7147d6d885..00d908f058 100644 ---- a/baseapp/abci.go -+++ b/baseapp/abci.go -@@ -53,6 +53,7 @@ func (app *BaseApp) InitChain(req abci.RequestInitChain) (res abci.ResponseInitC - // initialize the deliver state and check state with a correct header - app.setDeliverState(initHeader) - app.setCheckState(initHeader) -+ app.chainID = req.ChainId - - // Store the consensus params in the BaseApp's paramstore. Note, this must be - // done after the deliver state and context have been set as it's persisted -@@ -295,6 +296,25 @@ func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) (res abci.ResponseDeliv - } - } - -+// PreprocessTxs fullfills the celestia-core version of the ACBI interface. It -+// allows for arbitrary processing steps before transaction data is included in -+// the block. -+func (app *BaseApp) PrepareProposal(req abci.RequestPrepareProposal) abci.ResponsePrepareProposal { -+ // TODO(evan): fully implement -+ // pass through txs w/o processing for now -+ return abci.ResponsePrepareProposal{ -+ BlockData: req.BlockData, -+ } -+} -+ -+// ProcessProposal fulfills the celestia-core version of the ABCI++ interface. -+// It allows for arbitrary processing to occur after receiving a proposal block -+func (app *BaseApp) ProcessProposal(req abci.RequestProcessProposal) abci.ResponseProcessProposal { -+ return abci.ResponseProcessProposal{ -+ Result: abci.ResponseProcessProposal_ACCEPT, -+ } -+} -+ - // Commit implements the ABCI interface. It will commit all state that exists in - // the deliver state's multi-store and includes the resulting commit ID in the - // returned abci.ResponseCommit. Commit will set the check state based on the -diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go -index b42a56efca..41cc39eb62 100644 ---- a/baseapp/baseapp.go -+++ b/baseapp/baseapp.go -@@ -111,6 +111,10 @@ type BaseApp struct { // nolint: maligned - // abciListeners for hooking into the ABCI message processing of the BaseApp - // and exposing the requests and responses to external consumers - abciListeners []ABCIListener -+ -+ // chainID is the chainID of the chain that is set upon starting the chain -+ // via InitChain. -+ chainID string - } - - type appStore struct { -@@ -221,6 +225,10 @@ func (app *BaseApp) Trace() bool { - return app.trace - } - -+func (app *BaseApp) GetChainID() string { -+ return app.chainID -+} -+ - // MsgServiceRouter returns the MsgServiceRouter of a BaseApp. - func (app *BaseApp) MsgServiceRouter() *MsgServiceRouter { return app.msgServiceRouter } - -@@ -474,6 +482,8 @@ func (app *BaseApp) GetConsensusParams(ctx sdk.Context) *abci.ConsensusParams { - cp.Validator = &vp - } - -+ cp.Version = &tmproto.VersionParams{AppVersion: app.appVersion} -+ - return cp - } - -@@ -577,6 +587,17 @@ func (app *BaseApp) getState(mode runTxMode) *state { - return app.checkState - } - -+// NewProposalContext returns a context with a branched version of the state -+// that is safe to query during ProcessProposal. -+func (app *BaseApp) NewProposalContext(header tmproto.Header) sdk.Context { -+ // use custom query multistore if provided -+ ms := app.cms.CacheMultiStore() -+ ctx := sdk.NewContext(ms, header, false, app.logger).WithBlockGasMeter(storetypes.NewInfiniteGasMeter()) -+ ctx = ctx.WithConsensusParams(app.GetConsensusParams(ctx)) -+ -+ return ctx -+} -+ - // retrieve the context for the tx w/ txBytes and other memoized values. - func (app *BaseApp) getContextForTx(mode runTxMode, txBytes []byte) sdk.Context { - ctx := app.getState(mode).ctx. -diff --git a/client/config/config.go b/client/config/config.go -index f9e48c989d..806ef29048 100644 ---- a/client/config/config.go -+++ b/client/config/config.go -@@ -11,7 +11,7 @@ import ( - // Default constants - const ( - chainID = "" -- keyringBackend = "os" -+ keyringBackend = "test" - output = "text" - node = "tcp://localhost:26657" - broadcastMode = "sync" -diff --git a/client/flags/flags.go b/client/flags/flags.go -index 6dacc23737..96306f5ca4 100644 ---- a/client/flags/flags.go -+++ b/client/flags/flags.go -@@ -15,11 +15,11 @@ const ( - // failures due to state changes that might occur between the tx simulation - // and the actual run. - DefaultGasAdjustment = 1.0 -- DefaultGasLimit = 200000 -+ DefaultGasLimit = 210000 - GasFlagAuto = "auto" - - // DefaultKeyringBackend -- DefaultKeyringBackend = keyring.BackendOS -+ DefaultKeyringBackend = keyring.BackendTest - - // BroadcastBlock defines a tx broadcasting mode where the client waits for - // the tx to be committed in a block. -diff --git a/client/grpc/tmservice/types.pb.go b/client/grpc/tmservice/types.pb.go -index e9bb255f21..5473ff3db3 100644 ---- a/client/grpc/tmservice/types.pb.go -+++ b/client/grpc/tmservice/types.pb.go -@@ -32,10 +32,9 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - // Block is tendermint type Block, with the Header proposer address - // field converted to bech32 string. - type Block struct { -- Header Header `protobuf:"bytes,1,opt,name=header,proto3" json:"header"` -- Data types.Data `protobuf:"bytes,2,opt,name=data,proto3" json:"data"` -- Evidence types.EvidenceList `protobuf:"bytes,3,opt,name=evidence,proto3" json:"evidence"` -- LastCommit *types.Commit `protobuf:"bytes,4,opt,name=last_commit,json=lastCommit,proto3" json:"last_commit,omitempty"` -+ Header Header `protobuf:"bytes,1,opt,name=header,proto3" json:"header"` -+ Data types.Data `protobuf:"bytes,2,opt,name=data,proto3" json:"data"` -+ LastCommit *types.Commit `protobuf:"bytes,4,opt,name=last_commit,json=lastCommit,proto3" json:"last_commit,omitempty"` - } - - func (m *Block) Reset() { *m = Block{} } -@@ -85,13 +84,6 @@ func (m *Block) GetData() types.Data { - return types.Data{} - } - --func (m *Block) GetEvidence() types.EvidenceList { -- if m != nil { -- return m.Evidence -- } -- return types.EvidenceList{} --} -- - func (m *Block) GetLastCommit() *types.Commit { - if m != nil { - return m.LastCommit -@@ -266,46 +258,45 @@ func init() { - } - - var fileDescriptor_bb9931519c08e0d6 = []byte{ -- // 623 bytes of a gzipped FileDescriptorProto -- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xc1, 0x6e, 0xd3, 0x4c, -- 0x14, 0x85, 0xe3, 0xbf, 0x69, 0xe2, 0x4e, 0x9a, 0xb6, 0xff, 0xa8, 0xaa, 0xdc, 0x00, 0x4e, 0x55, -- 0x44, 0x29, 0x95, 0xb0, 0xdb, 0xb2, 0x81, 0x05, 0x12, 0x24, 0x41, 0x6a, 0xa5, 0xae, 0x2c, 0xc4, -- 0x82, 0x4d, 0x34, 0xb6, 0x07, 0x7b, 0x54, 0xdb, 0x63, 0x79, 0x26, 0x11, 0xbc, 0x45, 0x1f, 0xab, -- 0xcb, 0x2e, 0x59, 0x15, 0x94, 0x4a, 0x3c, 0x05, 0x0b, 0x34, 0x77, 0xc6, 0x6d, 0x42, 0x24, 0x56, -- 0xb1, 0xcf, 0xfd, 0xce, 0xf1, 0xdc, 0x7b, 0x47, 0x41, 0x47, 0x11, 0x17, 0x39, 0x17, 0x7e, 0x48, -- 0x04, 0xf5, 0x25, 0x2d, 0x62, 0x5a, 0xe5, 0xac, 0x90, 0xfe, 0xf4, 0x24, 0xa4, 0x92, 0x9c, 0xf8, -- 0xf2, 0x5b, 0x49, 0x85, 0x57, 0x56, 0x5c, 0x72, 0xec, 0x6a, 0xd6, 0x53, 0xac, 0xf7, 0xc0, 0x7a, -- 0x86, 0xed, 0x6d, 0x27, 0x3c, 0xe1, 0x80, 0xfa, 0xea, 0x49, 0xbb, 0x7a, 0x8f, 0xe7, 0x52, 0x21, -- 0x6d, 0x3e, 0xb3, 0xd7, 0x5f, 0xaa, 0xd2, 0x29, 0x8b, 0x69, 0x11, 0x51, 0x03, 0xb8, 0xf3, 0x87, -- 0xa2, 0x95, 0x60, 0xbc, 0x58, 0x0c, 0x48, 0x38, 0x4f, 0x32, 0xea, 0xc3, 0x5b, 0x38, 0xf9, 0xe2, -- 0x4b, 0x96, 0x53, 0x21, 0x49, 0x5e, 0x6a, 0x60, 0xff, 0xb7, 0x85, 0x56, 0x07, 0x19, 0x8f, 0x2e, -- 0xf1, 0x08, 0xb5, 0x52, 0x4a, 0x62, 0x5a, 0x39, 0xd6, 0x9e, 0x75, 0xd8, 0x39, 0x3d, 0xf0, 0xfe, -- 0xdd, 0x90, 0x77, 0x06, 0xf4, 0xa0, 0x79, 0x7d, 0xdb, 0x6f, 0x04, 0xc6, 0x8b, 0x8f, 0x51, 0x33, -- 0x26, 0x92, 0x38, 0xff, 0x41, 0xc6, 0xce, 0xbc, 0x4f, 0x9f, 0x6b, 0x44, 0x24, 0x31, 0x1e, 0x20, -- 0xf1, 0x3b, 0x64, 0xd7, 0x4d, 0x39, 0x2b, 0xe0, 0x72, 0x97, 0x5d, 0x1f, 0x0c, 0x71, 0xc1, 0x84, -- 0x34, 0xee, 0x7b, 0x17, 0x7e, 0x83, 0x3a, 0x19, 0x11, 0x72, 0x1c, 0xf1, 0x3c, 0x67, 0xd2, 0x69, -- 0x42, 0x88, 0xb3, 0x1c, 0x32, 0x84, 0x7a, 0x80, 0x14, 0xac, 0x9f, 0xf7, 0x7f, 0x35, 0x51, 0x4b, -- 0xf7, 0x81, 0xdf, 0xa2, 0xb6, 0x99, 0xa0, 0x19, 0xc0, 0x93, 0x85, 0xa6, 0x75, 0xc9, 0x1b, 0xf2, -- 0x42, 0xd0, 0x42, 0x4c, 0x84, 0x39, 0x45, 0xed, 0xc1, 0x07, 0xc8, 0x8e, 0x52, 0xc2, 0x8a, 0x31, -- 0x8b, 0xa1, 0xf9, 0xb5, 0x41, 0x67, 0x76, 0xdb, 0x6f, 0x0f, 0x95, 0x76, 0x3e, 0x0a, 0xda, 0x50, -- 0x3c, 0x8f, 0xf1, 0x8e, 0x1a, 0x33, 0x4b, 0x52, 0x09, 0xcd, 0xae, 0x04, 0xe6, 0x0d, 0xbf, 0x46, -- 0x4d, 0xb5, 0x1b, 0x73, 0xfa, 0x9e, 0xa7, 0x17, 0xe7, 0xd5, 0x8b, 0xf3, 0x3e, 0xd6, 0x8b, 0x1b, -- 0xd8, 0xea, 0xc3, 0x57, 0x3f, 0xfa, 0x56, 0x00, 0x0e, 0x3c, 0x44, 0x5d, 0x68, 0x3f, 0x54, 0x6b, -- 0x54, 0x9f, 0x5f, 0x85, 0x88, 0xdd, 0xe5, 0x01, 0xc0, 0xa2, 0xcf, 0x47, 0xe6, 0xe8, 0x30, 0x34, -- 0x2d, 0xc5, 0xf8, 0x10, 0x6d, 0xcd, 0xcd, 0x70, 0x9c, 0x12, 0x91, 0x3a, 0xad, 0x3d, 0xeb, 0x70, -- 0x3d, 0xd8, 0x78, 0x18, 0xd7, 0x19, 0x11, 0x29, 0x7e, 0x84, 0xd6, 0xd4, 0xde, 0x34, 0xd2, 0x06, -- 0xc4, 0x56, 0x02, 0x14, 0x9f, 0xa3, 0xcd, 0x29, 0xc9, 0x58, 0x4c, 0x24, 0xaf, 0x84, 0x46, 0x6c, -- 0x9d, 0xf2, 0x20, 0x03, 0x78, 0x8c, 0xb6, 0x0b, 0xfa, 0x55, 0x8e, 0xff, 0xa6, 0xd7, 0x80, 0xc6, -- 0xaa, 0xf6, 0x69, 0xd1, 0xf1, 0x0c, 0x6d, 0x44, 0xf5, 0xf0, 0x35, 0x8b, 0x80, 0xed, 0xde, 0xab, -- 0x80, 0xed, 0x22, 0x9b, 0x94, 0xa5, 0x06, 0x3a, 0x00, 0xb4, 0x49, 0x59, 0x42, 0xe9, 0x08, 0xfd, -- 0x0f, 0x3d, 0x56, 0x54, 0x4c, 0x32, 0x69, 0x42, 0xd6, 0x81, 0xd9, 0x54, 0x85, 0x40, 0xeb, 0xc0, -- 0x3e, 0x45, 0xdd, 0xfa, 0x7e, 0x69, 0xae, 0x0b, 0xdc, 0x7a, 0x2d, 0x02, 0xf4, 0x02, 0x6d, 0x95, -- 0x15, 0x2f, 0xb9, 0xa0, 0xd5, 0x98, 0xc4, 0x71, 0x45, 0x85, 0x70, 0x36, 0xd4, 0xee, 0x83, 0xcd, -- 0x5a, 0x7f, 0xaf, 0xe5, 0xc1, 0xc5, 0xf5, 0xcc, 0xb5, 0x6e, 0x66, 0xae, 0xf5, 0x73, 0xe6, 0x5a, -- 0x57, 0x77, 0x6e, 0xe3, 0xe6, 0xce, 0x6d, 0x7c, 0xbf, 0x73, 0x1b, 0x9f, 0x4f, 0x13, 0x26, 0xd3, -- 0x49, 0xe8, 0x45, 0x3c, 0xf7, 0xcd, 0xdf, 0x8d, 0xfe, 0x79, 0x29, 0xe2, 0x4b, 0x3f, 0xca, 0x18, -- 0x2d, 0xa4, 0x9f, 0x54, 0x65, 0xe4, 0xcb, 0x5c, 0xd0, 0x6a, 0xca, 0x22, 0x1a, 0xb6, 0xe0, 0x5a, -- 0xbc, 0xfa, 0x13, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x09, 0x93, 0xea, 0xa0, 0x04, 0x00, 0x00, -+ // 598 bytes of a gzipped FileDescriptorProto -+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xcd, 0x6e, 0xd3, 0x4e, -+ 0x14, 0xc5, 0xe3, 0x7f, 0xd3, 0x7c, 0x4c, 0xbe, 0xfa, 0x1f, 0x55, 0x95, 0x1b, 0xc0, 0x89, 0x8a, -+ 0x28, 0xa1, 0x12, 0x76, 0x5b, 0x36, 0xb0, 0x60, 0x41, 0x92, 0x45, 0x23, 0xb1, 0xb2, 0x10, 0x0b, -+ 0x36, 0xd1, 0xd8, 0x1e, 0xec, 0x51, 0x6d, 0x8f, 0xe5, 0x99, 0x44, 0xf0, 0x16, 0x7d, 0x1e, 0x9e, -+ 0xa0, 0xcb, 0x2e, 0x59, 0x15, 0x94, 0x48, 0x3c, 0x07, 0x9a, 0x3b, 0x36, 0x49, 0xa8, 0xc4, 0x2a, -+ 0x33, 0xf7, 0xfe, 0xce, 0x9d, 0x33, 0x67, 0x22, 0xa3, 0x33, 0x9f, 0x8b, 0x84, 0x0b, 0xc7, 0x23, -+ 0x82, 0x3a, 0x92, 0xa6, 0x01, 0xcd, 0x13, 0x96, 0x4a, 0x67, 0x79, 0xe1, 0x51, 0x49, 0x2e, 0x1c, -+ 0xf9, 0x35, 0xa3, 0xc2, 0xce, 0x72, 0x2e, 0x39, 0xb6, 0x34, 0x6b, 0x2b, 0xd6, 0xde, 0xb0, 0x76, -+ 0xc1, 0xf6, 0x0f, 0x43, 0x1e, 0x72, 0x40, 0x1d, 0xb5, 0xd2, 0xaa, 0xfe, 0xe3, 0xad, 0xa9, 0x30, -+ 0x6d, 0x7b, 0x66, 0xdf, 0xda, 0x3e, 0x93, 0xe6, 0x82, 0xf1, 0x74, 0xa7, 0x3f, 0x08, 0x39, 0x0f, -+ 0x63, 0xea, 0xc0, 0xce, 0x5b, 0x7c, 0x76, 0x24, 0x4b, 0xa8, 0x90, 0x24, 0xc9, 0x34, 0x70, 0xf2, -+ 0xcd, 0x40, 0xfb, 0xe3, 0x98, 0xfb, 0xd7, 0x78, 0x8a, 0x6a, 0x11, 0x25, 0x01, 0xcd, 0x4d, 0x63, -+ 0x68, 0x8c, 0x5a, 0x97, 0xa7, 0xf6, 0xbf, 0xfd, 0xda, 0x57, 0x40, 0x8f, 0xab, 0xb7, 0xf7, 0x83, -+ 0x8a, 0x5b, 0x68, 0xf1, 0x39, 0xaa, 0x06, 0x44, 0x12, 0xf3, 0x3f, 0x98, 0x71, 0xb4, 0xad, 0xd3, -+ 0xbe, 0xa6, 0x44, 0x92, 0x42, 0x03, 0x24, 0x7e, 0x83, 0x5a, 0x31, 0x11, 0x72, 0xee, 0xf3, 0x24, -+ 0x61, 0xd2, 0xac, 0x82, 0xd0, 0x7c, 0x28, 0x9c, 0x40, 0xdf, 0x45, 0x0a, 0xd6, 0xeb, 0x93, 0x5f, -+ 0x55, 0x54, 0xd3, 0x2e, 0xf0, 0x5b, 0x54, 0x2f, 0xee, 0x5f, 0xd8, 0x7f, 0xb2, 0x63, 0x59, 0xb7, -+ 0xec, 0x09, 0x4f, 0x05, 0x4d, 0xc5, 0x42, 0x14, 0x0e, 0x4a, 0x0d, 0x3e, 0x45, 0x0d, 0x3f, 0x22, -+ 0x2c, 0x9d, 0xb3, 0x00, 0xac, 0x37, 0xc7, 0xad, 0xd5, 0xfd, 0xa0, 0x3e, 0x51, 0xb5, 0xd9, 0xd4, -+ 0xad, 0x43, 0x73, 0x16, 0xe0, 0x23, 0x15, 0x12, 0x0b, 0x23, 0x69, 0xee, 0x0d, 0x8d, 0xd1, 0x9e, -+ 0x5b, 0xec, 0xf0, 0x6b, 0x54, 0x55, 0xc9, 0x16, 0xee, 0xfb, 0xb6, 0x8e, 0xdd, 0x2e, 0x63, 0xb7, -+ 0x3f, 0x94, 0xb1, 0x8f, 0x1b, 0xea, 0xe0, 0x9b, 0x1f, 0x03, 0xc3, 0x05, 0x05, 0x9e, 0xa0, 0x0e, -+ 0x5c, 0xdf, 0x53, 0x8f, 0xa0, 0x8e, 0xdf, 0x87, 0x11, 0xc7, 0x0f, 0x03, 0x80, 0x67, 0x9a, 0x4d, -+ 0x0b, 0xeb, 0x10, 0x9a, 0x2e, 0x05, 0x78, 0x84, 0x0e, 0xb6, 0x32, 0x9c, 0x47, 0x44, 0x44, 0x66, -+ 0x6d, 0x68, 0x8c, 0xda, 0x6e, 0x77, 0x13, 0xd7, 0x15, 0x11, 0x11, 0x7e, 0x84, 0x9a, 0x2a, 0x75, -+ 0x8d, 0xd4, 0x01, 0x69, 0xa8, 0x02, 0x34, 0x9f, 0xa3, 0xde, 0x92, 0xc4, 0x2c, 0x20, 0x92, 0xe7, -+ 0x42, 0x23, 0x0d, 0x3d, 0x65, 0x53, 0x06, 0xf0, 0x1c, 0x1d, 0xa6, 0xf4, 0x8b, 0x9c, 0xff, 0x4d, -+ 0x37, 0x81, 0xc6, 0xaa, 0xf7, 0x71, 0x57, 0xf1, 0x0c, 0x75, 0xfd, 0x32, 0x7c, 0xcd, 0x22, 0x60, -+ 0x3b, 0x7f, 0xaa, 0x80, 0x1d, 0xa3, 0x06, 0xc9, 0x32, 0x0d, 0xb4, 0x00, 0xa8, 0x93, 0x2c, 0x83, -+ 0xd6, 0x19, 0xfa, 0x1f, 0xee, 0x98, 0x53, 0xb1, 0x88, 0x65, 0x31, 0xa4, 0x0d, 0x4c, 0x4f, 0x35, -+ 0x5c, 0x5d, 0x07, 0xf6, 0x29, 0xea, 0xd0, 0x25, 0x0b, 0x68, 0xea, 0x53, 0xcd, 0x75, 0x80, 0x6b, -+ 0x97, 0x45, 0x80, 0x5e, 0xa0, 0x83, 0x2c, 0xe7, 0x19, 0x17, 0x34, 0x9f, 0x93, 0x20, 0xc8, 0xa9, -+ 0x10, 0x66, 0x57, 0xbd, 0xbd, 0xdb, 0x2b, 0xeb, 0xef, 0x74, 0x79, 0xfc, 0xfe, 0x76, 0x65, 0x19, -+ 0x77, 0x2b, 0xcb, 0xf8, 0xb9, 0xb2, 0x8c, 0x9b, 0xb5, 0x55, 0xb9, 0x5b, 0x5b, 0x95, 0xef, 0x6b, -+ 0xab, 0xf2, 0xe9, 0x32, 0x64, 0x32, 0x5a, 0x78, 0xb6, 0xcf, 0x13, 0xa7, 0xf8, 0x16, 0xe8, 0x9f, -+ 0x97, 0x22, 0xb8, 0x76, 0xfc, 0x98, 0xd1, 0x54, 0x3a, 0x61, 0x9e, 0xf9, 0x8e, 0x4c, 0x04, 0xcd, -+ 0x97, 0xcc, 0xa7, 0x5e, 0x0d, 0xfe, 0x16, 0xaf, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x61, -+ 0xed, 0x16, 0x3d, 0x04, 0x00, 0x00, - } - - func (m *Block) Marshal() (dAtA []byte, err error) { -@@ -340,16 +331,6 @@ func (m *Block) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i-- - dAtA[i] = 0x22 - } -- { -- size, err := m.Evidence.MarshalToSizedBuffer(dAtA[:i]) -- if err != nil { -- return 0, err -- } -- i -= size -- i = encodeVarintTypes(dAtA, i, uint64(size)) -- } -- i-- -- dAtA[i] = 0x1a - { - size, err := m.Data.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { -@@ -466,12 +447,12 @@ func (m *Header) MarshalToSizedBuffer(dAtA []byte) (int, error) { - } - i-- - dAtA[i] = 0x2a -- n6, err6 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) -- if err6 != nil { -- return 0, err6 -+ n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) -+ if err5 != nil { -+ return 0, err5 - } -- i -= n6 -- i = encodeVarintTypes(dAtA, i, uint64(n6)) -+ i -= n5 -+ i = encodeVarintTypes(dAtA, i, uint64(n5)) - i-- - dAtA[i] = 0x22 - if m.Height != 0 { -@@ -520,8 +501,6 @@ func (m *Block) Size() (n int) { - n += 1 + l + sovTypes(uint64(l)) - l = m.Data.Size() - n += 1 + l + sovTypes(uint64(l)) -- l = m.Evidence.Size() -- n += 1 + l + sovTypes(uint64(l)) - if m.LastCommit != nil { - l = m.LastCommit.Size() - n += 1 + l + sovTypes(uint64(l)) -@@ -688,39 +667,6 @@ func (m *Block) Unmarshal(dAtA []byte) error { - return err - } - iNdEx = postIndex -- case 3: -- if wireType != 2 { -- return fmt.Errorf("proto: wrong wireType = %d for field Evidence", wireType) -- } -- var msglen int -- for shift := uint(0); ; shift += 7 { -- if shift >= 64 { -- return ErrIntOverflowTypes -- } -- if iNdEx >= l { -- return io.ErrUnexpectedEOF -- } -- b := dAtA[iNdEx] -- iNdEx++ -- msglen |= int(b&0x7F) << shift -- if b < 0x80 { -- break -- } -- } -- if msglen < 0 { -- return ErrInvalidLengthTypes -- } -- postIndex := iNdEx + msglen -- if postIndex < 0 { -- return ErrInvalidLengthTypes -- } -- if postIndex > l { -- return io.ErrUnexpectedEOF -- } -- if err := m.Evidence.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { -- return err -- } -- iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastCommit", wireType) -diff --git a/client/grpc/tmservice/util.go b/client/grpc/tmservice/util.go -index aeffaa84c3..932ce60db8 100644 ---- a/client/grpc/tmservice/util.go -+++ b/client/grpc/tmservice/util.go -@@ -32,7 +32,6 @@ func convertBlock(tmblock *tmprototypes.Block) *Block { - b.Header = convertHeader(tmblock.Header) - b.LastCommit = tmblock.LastCommit - b.Data = tmblock.Data -- b.Evidence = tmblock.Evidence - - return b - } -diff --git a/client/tx_config.go b/client/tx_config.go -index 5c5fd2695e..2b319fa6ca 100644 ---- a/client/tx_config.go -+++ b/client/tx_config.go -@@ -13,6 +13,7 @@ type ( - TxEncodingConfig interface { - TxEncoder() sdk.TxEncoder - TxDecoder() sdk.TxDecoder -+ SetTxDecoder(sdk.TxDecoder) - TxJSONEncoder() sdk.TxEncoder - TxJSONDecoder() sdk.TxDecoder - MarshalSignatureJSON([]signingtypes.SignatureV2) ([]byte, error) -diff --git a/client/v2/internal/buf.lock b/client/v2/internal/buf.lock -index 373428d3a3..3278c9b656 100644 ---- a/client/v2/internal/buf.lock -+++ b/client/v2/internal/buf.lock -@@ -4,16 +4,20 @@ deps: - - remote: buf.build - owner: cosmos - repository: cosmos-proto -+ branch: main - commit: 1935555c206d4afb9e94615dfd0fad31 - - remote: buf.build - owner: cosmos - repository: cosmos-sdk -- commit: 8cb30a2c4de74dc9bd8d260b1e75e176 -+ branch: main -+ commit: 86d2a697b026488089f13a71ceb3815c - - remote: buf.build - owner: cosmos - repository: gogo-proto -+ branch: main - commit: bee5511075b7499da6178d9e4aaa628b - - remote: buf.build - owner: googleapis - repository: googleapis -- commit: 62f35d8aed1149c291d606d958a7ce32 -+ branch: main -+ commit: 40f07f5b563941f2b20b991a7aedd53d -diff --git a/contrib/devtools/Makefile b/contrib/devtools/Makefile -index f8a5de4edd..62765e7476 100644 ---- a/contrib/devtools/Makefile -+++ b/contrib/devtools/Makefile -@@ -57,17 +57,17 @@ tools-stamp: statik runsim - # in a row. - touch $@ - --# Install the runsim binary -+# Install the runsim binary. - statik: $(STATIK) - $(STATIK): - @echo "Installing statik..." -- @go install github.com/rakyll/statik@v0.1.6 -+ @(cd /tmp && go install github.com/rakyll/statik@v0.1.6) - --# Install the runsim binary -+# Install the runsim binary. - runsim: $(RUNSIM) - $(RUNSIM): - @echo "Installing runsim..." -- @go install github.com/cosmos/tools/cmd/runsim@v1.0.0 -+ @(cd /tmp && go install github.com/cosmos/tools/cmd/runsim@v1.0.0) - - tools-clean: - rm -f $(STATIK) $(GOLANGCI_LINT) $(RUNSIM) -diff --git a/cosmovisor/.gitignore b/cosmovisor/.gitignore -deleted file mode 100644 -index fe1602e647..0000000000 ---- a/cosmovisor/.gitignore -+++ /dev/null -@@ -1 +0,0 @@ --/cosmovisor -diff --git a/cosmovisor/.goreleaser.yml b/cosmovisor/.goreleaser.yml -deleted file mode 100644 -index 3cb3f9a5f8..0000000000 ---- a/cosmovisor/.goreleaser.yml -+++ /dev/null -@@ -1,40 +0,0 @@ --project_name: cosmovisor -- --release: -- disable: false -- name_template: "{{.Tag}}" -- --before: -- hooks: -- - go mod tidy -- --builds: -- - main: ./cmd/cosmovisor -- ldflags: -- - -X 'github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor/cmd.Version={{ replace .Version "cosmovisor/" "" }}' -- goos: -- - linux -- - windows -- - darwin -- goarch: -- - amd64 -- - arm64 -- env: -- - CGO_ENABLED=0 -- --archives: -- - name_template: '{{ replace .Version "cosmovisor/" "cosmovisor-" }}-{{ .Os }}-{{ .Arch }}' -- format_overrides: -- - goos: windows -- format: zip -- --checksum: -- name_template: 'SHA256SUMS-{{ replace .Version "cosmovisor/" "cosmovisor-" }}.txt' -- algorithm: sha256 --changelog: -- skip: true -- sort: asc -- filters: -- exclude: -- - '^docs:' -- - '^test:' -diff --git a/cosmovisor/CHANGELOG.md b/cosmovisor/CHANGELOG.md -deleted file mode 100644 -index 60be657971..0000000000 ---- a/cosmovisor/CHANGELOG.md -+++ /dev/null -@@ -1,85 +0,0 @@ -- -- --# Changelog -- --## [Unreleased] -- -- --### Features -- --* [\#11823](https://github.com/cosmos/cosmos-sdk/pull/11823) Refactor `cosmovisor` CLI to use `cobra`. --* [\#11731](https://github.com/cosmos/cosmos-sdk/pull/11731) `cosmovisor version -o json` returns the cosmovisor version and the result of `simd --output json --long` in one JSON object. -- --## v1.1.0 2022-10-02 -- --### Features -- --* [\#10285](https://github.com/cosmos/cosmos-sdk/pull/10316) Added `run` command to run the associated app. --* [\#10649](https://github.com/cosmos/cosmos-sdk/pull/10649) Customize backup directory. Added new env variable: `DAEMON_BACKUP_DIR`. If it is set, cosmovisor will backup the app data in ``DAEMON_BACKUP_DIR` before running the update. -- --### Deprecated -- --* [\#10285](https://github.com/cosmos/cosmos-sdk/pull/10316) Running `cosmovisor` without the `run` argument. -- --### Bug Fixes -- --* [\#10458](https://github.com/cosmos/cosmos-sdk/pull/10458) Fix version when using 'go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0' to install cosmovisor. -- --## v1.0.0 2021-09-30 -- --### Features -- --* [\#8590](https://github.com/cosmos/cosmos-sdk/pull/8590) File watcher for cosmovisor. Instead of parsing logs from stdin and stderr, we watch the `/data/upgrade-info.json` file updates using polling mechanism. --* [\#9999](https://github.com/cosmos/cosmos-sdk/pull/10103) Added `version` command that returns the cosmovisor version and the application version. --* [\#9973](https://github.com/cosmos/cosmos-sdk/pull/10056) Added support for pre-upgrade command in Cosmovisor to be called before the binary is upgraded. Added new environmental variable `DAEMON_PREUPGRADE_MAX_RETRIES` that holds the maximum number of times to reattempt pre-upgrade before failing. --* [\#10126](https://github.com/cosmos/cosmos-sdk/pull/10229) Added `help`. -- --### Improvements -- --* [\#10018](https://github.com/cosmos/cosmos-sdk/pull/10018) Strict boolean argument parsing: cosmovisor will fail if user will not set correctly a boolean variable. Correct values are: "true", "false", "" (not setting) - all case not sensitive. --* [\#10036](https://github.com/cosmos/cosmos-sdk/pull/10036) Improve logs when downloading the binary. --* [\#10217](https://github.com/cosmos/cosmos-sdk/pull/10217) Replacing logging to use zerolog. -- --### CLI Breaking -- --* [\#10128](https://github.com/cosmos/cosmos-sdk/pull/10128) Change default value of `DAEMON_RESTART_AFTER_UPGRADE` to `true`. -- --## v0.1 2021-08-06 -- --This is the first release and we started this changelog on 2021-07-01. See the [README](https://github.com/cosmos/cosmos-sdk/blob/release/cosmovisor/v0.1.x/cosmovisor/CHANGELOG.md) file for the full list of features. -- --## Features -- --* [\#9652](https://github.com/cosmos/cosmos-sdk/pull/9652) Add backup option for cosmovisor. -diff --git a/cosmovisor/Makefile b/cosmovisor/Makefile -deleted file mode 100644 -index d904c990cc..0000000000 ---- a/cosmovisor/Makefile -+++ /dev/null -@@ -1,13 +0,0 @@ --#!/usr/bin/make -f -- --VERSION := $(shell echo $(shell git describe --always --match "cosmovisor/v*") | sed 's/^cosmovisor[/]//') -- --all: cosmovisor test -- --cosmovisor: -- go build -ldflags="-X 'github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor/cmd.Version=$(VERSION)'" -mod=readonly ./cmd/cosmovisor -- --test: -- go test -mod=readonly -race ./... -- --.PHONY: all cosmovisor test -diff --git a/cosmovisor/README.md b/cosmovisor/README.md -deleted file mode 100644 -index 29dc3d000b..0000000000 ---- a/cosmovisor/README.md -+++ /dev/null -@@ -1,322 +0,0 @@ --# Cosmosvisor -- --`cosmovisor` is a small process manager for Cosmos SDK application binaries that monitors the governance module for incoming chain upgrade proposals. If it sees a proposal that gets approved, `cosmovisor` can automatically download the new binary, stop the current binary, switch from the old binary to the new one, and finally restart the node with the new binary. -- --## Design -- --Cosmovisor is designed to be used as a wrapper for a `Cosmos SDK` app: -- --* it will pass arguments to the associated app (configured by `DAEMON_NAME` env variable). -- Running `cosmovisor run arg1 arg2 ....` will run `app arg1 arg2 ...`; --* it will manage an app by restarting and upgrading if needed; --* it is configured using environment variables, not positional arguments. -- --*Note: If new versions of the application are not set up to run in-place store migrations, migrations will need to be run manually before restarting `cosmovisor` with the new binary. For this reason, we recommend applications adopt in-place store migrations.* -- --*Note: If validators would like to enable the auto-download option (which [we don't recommend](#auto-download)), and they are currently running an application using Cosmos SDK `v0.42`, they will need to use Cosmovisor [`v0.1`](https://github.com/cosmos/cosmos-sdk/releases/tag/cosmovisor%2Fv0.1.0). Later versions of Cosmovisor do not support Cosmos SDK `v0.44.3` or earlier if the auto-download option is enabled.* -- --## Contributing -- --Cosmovisor is part of the Cosmos SDK monorepo, but it's a separate module with it's own release schedule. -- --Release branches have the following format `release/cosmovisor/vA.B.x`, where A and B are a number (e.g. `release/cosmovisor/v0.1.x`). Releases are tagged using the following format: `cosmovisor/vA.B.C`. -- --## Setup -- --### Installation -- --To install the latest version of `cosmovisor`, run the following command: -- --```sh --go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@latest --``` -- --To install a previous version, you can specify the version. IMPORTANT: Chains that use Cosmos-SDK v0.44.3 or earlier (eg v0.44.2) and want to use auto-download feature MUST use Cosmovisor v0.1.0 -- --```sh --go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v0.1.0 --``` -- --You can run `cosmovisor version` to check the Cosmovisor version (works only with Cosmovisor >1.1.0). -- --You can also install from source by pulling the cosmos-sdk repository and switching to the correct version and building as follows: -- --```sh --git clone git@github.com:cosmos/cosmos-sdk --cd cosmos-sdk --git checkout cosmovisor/vx.x.x --make cosmovisor --``` -- --This will build cosmovisor in `/cosmovisor` directory. Afterwards you may want to put it into your machine's PATH like as follows: -- --```sh --cp cosmovisor/cosmovisor ~/go/bin/cosmovisor --``` -- --*Note: If you are using go `v1.15` or earlier, you will need to use `go get`, and you may want to run the command outside a project directory.* -- --### Command Line Arguments And Environment Variables -- --The first argument passed to `cosmovisor` is the action for `cosmovisor` to take. Options are: -- --* `help`, `--help`, or `-h` - Output `cosmovisor` help information and check your `cosmovisor` configuration. --* `run` - Run the configured binary using the rest of the provided arguments. --* `version` - Output the `cosmovisor` version and also run the binary with the `version` argument. -- --All arguments passed to `cosmovisor run` will be passed to the application binary (as a subprocess). `cosmovisor` will return `/dev/stdout` and `/dev/stderr` of the subprocess as its own. For this reason, `cosmovisor run` cannot accept any command-line arguments other than those available to the application binary. -- --*Note: Use of `cosmovisor` without one of the action arguments is deprecated. For backwards compatibility, if the first argument is not an action argument, `run` is assumed. However, this fallback might be removed in future versions, so it is recommended that you always provide `run`. -- --`cosmovisor` reads its configuration from environment variables: -- --* `DAEMON_HOME` is the location where the `cosmovisor/` directory is kept that contains the genesis binary, the upgrade binaries, and any additional auxiliary files associated with each binary (e.g. `$HOME/.gaiad`, `$HOME/.regend`, `$HOME/.simd`, etc.). --* `DAEMON_NAME` is the name of the binary itself (e.g. `gaiad`, `regend`, `simd`, etc.). --* `DAEMON_ALLOW_DOWNLOAD_BINARIES` (*optional*), if set to `true`, will enable auto-downloading of new binaries (for security reasons, this is intended for full nodes rather than validators). By default, `cosmovisor` will not auto-download new binaries. --* `DAEMON_RESTART_AFTER_UPGRADE` (*optional*, default = `true`), if `true`, restarts the subprocess with the same command-line arguments and flags (but with the new binary) after a successful upgrade. Otherwise (`false`), `cosmovisor` stops running after an upgrade and requires the system administrator to manually restart it. Note restart is only after the upgrade and does not auto-restart the subprocess after an error occurs. --* `DAEMON_POLL_INTERVAL` is the interval length for polling the upgrade plan file. The value can either be a number (in milliseconds) or a duration (e.g. `1s`). Default: 300 milliseconds. --* `DAEMON_BACKUP_DIR` option to set a custom backup directory. If not set, `DAEMON_HOME` is used. --* `UNSAFE_SKIP_BACKUP` (defaults to `false`), if set to `true`, upgrades directly without performing a backup. Otherwise (`false`, default) backs up the data before trying the upgrade. The default value of false is useful and recommended in case of failures and when a backup needed to rollback. We recommend using the default backup option `UNSAFE_SKIP_BACKUP=false`. --* `DAEMON_PREUPGRADE_MAX_RETRIES` (defaults to `0`). The maximum number of times to call `pre-upgrade` in the application after exit status of `31`. After the maximum number of retries, cosmovisor fails the upgrade. -- --### Folder Layout -- --`$DAEMON_HOME/cosmovisor` is expected to belong completely to `cosmovisor` and the subprocesses that are controlled by it. The folder content is organized as follows: -- --```text --. --├── current -> genesis or upgrades/ --├── genesis --│   └── bin --│   └── $DAEMON_NAME --└── upgrades -- └── -- ├── bin -- │   └── $DAEMON_NAME -- └── upgrade-info.json --``` -- --The `cosmovisor/` directory incudes a subdirectory for each version of the application (i.e. `genesis` or `upgrades/`). Within each subdirectory is the application binary (i.e. `bin/$DAEMON_NAME`) and any additional auxiliary files associated with each binary. `current` is a symbolic link to the currently active directory (i.e. `genesis` or `upgrades/`). The `name` variable in `upgrades/` is the URI-encoded name of the upgrade as specified in the upgrade module plan. -- --Please note that `$DAEMON_HOME/cosmovisor` only stores the *application binaries*. The `cosmovisor` binary itself can be stored in any typical location (e.g. `/usr/local/bin`). The application will continue to store its data in the default data directory (e.g. `$HOME/.gaiad`) or the data directory specified with the `--home` flag. `$DAEMON_HOME` is independent of the data directory and can be set to any location. If you set `$DAEMON_HOME` to the same directory as the data directory, you will end up with a configuation like the following: -- --```text --.gaiad --├── config --├── data --└── cosmovisor --``` -- --## Usage -- --The system administrator is responsible for: -- --* installing the `cosmovisor` binary --* configuring the host's init system (e.g. `systemd`, `launchd`, etc.) --* appropriately setting the environmental variables --* manually installing the `genesis` folder --* manually installing the `upgrades/` folders -- --`cosmovisor` will set the `current` link to point to `genesis` at first start (i.e. when no `current` link exists) and then handle switching binaries at the correct points in time so that the system administrator can prepare days in advance and relax at upgrade time. -- --In order to support downloadable binaries, a tarball for each upgrade binary will need to be packaged up and made available through a canonical URL. Additionally, a tarball that includes the genesis binary and all available upgrade binaries can be packaged up and made available so that all the necessary binaries required to sync a fullnode from start can be easily downloaded. -- --The `DAEMON` specific code and operations (e.g. tendermint config, the application db, syncing blocks, etc.) all work as expected. The application binaries' directives such as command-line flags and environment variables also work as expected. -- --### Detecting Upgrades -- --`cosmovisor` is polling the `$DAEMON_HOME/data/upgrade-info.json` file for new upgrade instructions. The file is created by the x/upgrade module in `BeginBlocker` when an upgrade is detected and the blockchain reaches the upgrade height. --The following heuristic is applied to detect the upgrade: -- --* When starting, `cosmovisor` doesn't know much about currently running upgrade, except the binary which is `current/bin/`. It tries to read the `current/update-info.json` file to get information about the current upgrade name. --* If neither `cosmovisor/current/upgrade-info.json` nor `data/upgrade-info.json` exist, then `cosmovisor` will wait for `data/upgrade-info.json` file to trigger an upgrade. --* If `cosmovisor/current/upgrade-info.json` doesn't exist but `data/upgrade-info.json` exists, then `cosmovisor` assumes that whatever is in `data/upgrade-info.json` is a valid upgrade request. In this case `cosmovisor` tries immediately to make an upgrade according to the `name` attribute in `data/upgrade-info.json`. --* Otherwise, `cosmovisor` waits for changes in `upgrade-info.json`. As soon as a new upgrade name is recorded in the file, `cosmovisor` will trigger an upgrade mechanism. -- --When the upgrade mechanism is triggered, `cosmovisor` will: -- --1. if `DAEMON_ALLOW_DOWNLOAD_BINARIES` is enabled, start by auto-downloading a new binary into `cosmovisor//bin` (where `` is the `upgrade-info.json:name` attribute); --2. update the `current` symbolic link to point to the new directory and save `data/upgrade-info.json` to `cosmovisor/current/upgrade-info.json`. -- --### Auto-Download -- --Generally, `cosmovisor` requires that the system administrator place all relevant binaries on disk before the upgrade happens. However, for people who don't need such control and want an automated setup (maybe they are syncing a non-validating fullnode and want to do little maintenance), there is another option. -- --**NOTE: we don't recommend using auto-download** because it doesn't verify in advance if a binary is available. If there will be any issue with downloading a binary, the cosmovisor will stop and won't restart an App (which could lead to a chain halt). -- --If `DAEMON_ALLOW_DOWNLOAD_BINARIES` is set to `true`, and no local binary can be found when an upgrade is triggered, `cosmovisor` will attempt to download and install the binary itself based on the instructions in the `info` attribute in the `data/upgrade-info.json` file. The files is constructed by the x/upgrade module and contains data from the upgrade `Plan` object. The `Plan` has an info field that is expected to have one of the following two valid formats to specify a download: -- --1. Store an os/architecture -> binary URI map in the upgrade plan info field as JSON under the `"binaries"` key. For example: -- -- ```json -- { -- "binaries": { -- "linux/amd64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f" -- } -- } -- ``` -- -- You can include multiple binaries at once to ensure more than one environment will receive the correct binaries: -- -- ```json -- { -- "binaries": { -- "linux/amd64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f", -- "linux/arm64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f", -- "darwin/amd64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f" -- } -- } -- ``` -- -- When submitting this as a proposal ensure there are no spaces. An example command using `gaiad` could look like: -- -- ```sh -- > gaiad tx gov submit-proposal software-upgrade Vega \ -- --title Vega \ -- --deposit 100uatom \ -- --upgrade-height 7368420 \ -- --upgrade-info '{"binaries":{"linux/amd64":"https://github.com/cosmos/gaia/releases/download/v6.0.0-rc1/gaiad-v6.0.0-rc1-linux-amd64","linux/arm64":"https://github.com/cosmos/gaia/releases/download/v6.0.0-rc1/gaiad-v6.0.0-rc1-linux-arm64","darwin/amd64":"https://github.com/cosmos/gaia/releases/download/v6.0.0-rc1/gaiad-v6.0.0-rc1-darwin-amd64"}}' \ -- --description "upgrade to Vega" \ -- --gas 400000 \ -- --from user \ -- --chain-id test \ -- --home test/val2 \ -- --node tcp://localhost:36657 \ -- --yes -- ``` -- --2. Store a link to a file that contains all information in the above format (e.g. if you want to specify lots of binaries, changelog info, etc. without filling up the blockchain). For example: -- -- ```text -- https://example.com/testnet-1001-info.json?checksum=sha256:deaaa99fda9407c4dbe1d04bd49bab0cc3c1dd76fa392cd55a9425be074af01e -- ``` -- --When `cosmovisor` is triggered to download the new binary, `cosmovisor` will parse the `"binaries"` field, download the new binary with [go-getter](https://github.com/hashicorp/go-getter), and unpack the new binary in the `upgrades/` folder so that it can be run as if it was installed manually. -- --Note that for this mechanism to provide strong security guarantees, all URLs should include a SHA 256/512 checksum. This ensures that no false binary is run, even if someone hacks the server or hijacks the DNS. `go-getter` will always ensure the downloaded file matches the checksum if it is provided. `go-getter` will also handle unpacking archives into directories (in this case the download link should point to a `zip` file of all data in the `bin` directory). -- --To properly create a sha256 checksum on linux, you can use the `sha256sum` utility. For example: -- --```sh --sha256sum ./testdata/repo/zip_directory/autod.zip --``` -- --The result will look something like the following: `29139e1381b8177aec909fab9a75d11381cab5adf7d3af0c05ff1c9c117743a7`. -- --You can also use `sha512sum` if you would prefer to use longer hashes, or `md5sum` if you would prefer to use broken hashes. Whichever you choose, make sure to set the hash algorithm properly in the checksum argument to the URL. -- --## Example: SimApp Upgrade -- --The following instructions provide a demonstration of `cosmovisor` using the simulation application (`simapp`) shipped with the Cosmos SDK's source code. The following commands are to be run from within the `cosmos-sdk` repository. -- --### Chain Setup -- --Let's create a new chain using the `v0.44` version of simapp (the Cosmos SDK demo app): -- --```sh --git checkout v0.44.6 --make build --``` -- --Clean `~/.simapp` (never do this in a production environment): -- --```sh --./build/simd unsafe-reset-all --``` -- --Set up app config: -- --```sh --./build/simd config chain-id test --./build/simd config keyring-backend test --./build/simd config broadcast-mode block --``` -- --Initialize the node and overwrite any previous genesis file (never do this in a production environment): -- -- -- --```sh --./build/simd init test --chain-id test --overwrite --``` -- --Set the minimum gas price to `0stake` in `~/.simapp/config/app.toml`: -- --```sh --minimum-gas-prices = "0stake" --``` -- --For the sake of this demonstration, amend `voting_period` in `genesis.json` to a reduced time of 20 seconds (`20s`): -- --```sh --cat <<< $(jq '.app_state.gov.voting_params.voting_period = "20s"' $HOME/.simapp/config/genesis.json) > $HOME/.simapp/config/genesis.json --``` -- --Create a validator, and setup genesis transaction: -- -- -- -- --```sh --./build/simd keys add validator --./build/simd add-genesis-account validator 1000000000stake --keyring-backend test --./build/simd gentx validator 1000000stake --chain-id test --./build/simd collect-gentxs --``` -- --#### Prepare Cosmovisor and Start the Chain -- --Set the required environment variables: -- --```sh --export DAEMON_NAME=simd --export DAEMON_HOME=$HOME/.simapp --``` -- --Set the optional environment variable to trigger an automatic app restart: -- --```sh --export DAEMON_RESTART_AFTER_UPGRADE=true --``` -- --Create the folder for the genesis binary and copy the `simd` binary: -- --```sh --mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin --cp ./build/simd $DAEMON_HOME/cosmovisor/genesis/bin --``` -- --Now you can run cosmovisor with simapp v0.44: -- --```sh --cosmovisor run start --``` -- --#### Update App -- --Update app to the latest version (e.g. v0.45). -- --Next, we can add a migration - which is defined using `x/upgrade` [upgrade plan](https://github.com/cosmos/cosmos-sdk/blob/main/docs/core/upgrade.md) (you may refer to a past version if you are using an older Cosmos SDK release). In a migration we can do any deterministic state change. -- --Build the new version `simd` binary: -- --```sh --make build --``` -- --Create the folder for the upgrade binary and copy the `simd` binary: -- --```sh --mkdir -p $DAEMON_HOME/cosmovisor/upgrades/test1/bin --cp ./build/simd $DAEMON_HOME/cosmovisor/upgrades/test1/bin --``` -- --Open a new terminal window and submit an upgrade proposal along with a deposit and a vote (these commands must be run within 20 seconds of each other): -- --```sh --./build/simd tx gov submit-proposal software-upgrade test1 --title upgrade --description upgrade --upgrade-height 200 --from validator --yes --./build/simd tx gov deposit 1 10000000stake --from validator --yes --./build/simd tx gov vote 1 yes --from validator --yes --``` -- --The upgrade will occur automatically at height 200. Note: you may need to change the upgrade height in the snippet above if your test play takes more time. -diff --git a/cosmovisor/RELEASE_NOTES.md b/cosmovisor/RELEASE_NOTES.md -deleted file mode 100644 -index ecec049981..0000000000 ---- a/cosmovisor/RELEASE_NOTES.md -+++ /dev/null -@@ -1,28 +0,0 @@ --# Cosmovisor v1.1.0 Release Notes -- --### New execution model -- --With this release we are shifting to a new CLI design: -- --* in the past, Cosmovisor was designed to act as a wrapper for a Cosmos App. An admin could link it and use it instead of the Cosmos App. When running it will pass all options and configuration parameters to the app. Hence the only way to configure the Cosmovisor was through environment variables. --* now, we are moving to a more traditional model, where Cosmovisor has it's own command set and is a true supervisor. -- --New commands have been added: -- --* `run` will start the Cosmos App and pass remaining arguments to the app (similar to `npm run`) --* `help` will display Cosmovisor help --* `version` will display both Cosmovisor and the associated app version. -- --The existing way of starting an app with Cosmovisor has been deprecated (`cosmovisor [app params]`) and will be removed in the future version. Please use `cosmovisor run [app pararms]` instead. -- --### New Features -- --We added a new configuration option: `DAEMON_BACKUP_DIR` (as env variable). When set, Cosmovisor will create backup the app data backup in that directory (instead of using the app home directory) before running the update. See the [README](https://github.com/cosmos/cosmos-sdk/blob/main/cosmovisor/README.md#command-line-arguments-and-environment-variables) file for more details. -- --### Bug Fixes -- --* Fixed `cosmovisor version` output when installed using 'go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v1.0.0'. -- --### Changelog -- --For more details, please see the [CHANGELOG](https://github.com/cosmos/cosmos-sdk/blob/cosmovisor/v1.1.0/cosmovisor/CHANGELOG.md). -diff --git a/cosmovisor/args.go b/cosmovisor/args.go -deleted file mode 100644 -index c9a0d36a92..0000000000 ---- a/cosmovisor/args.go -+++ /dev/null -@@ -1,360 +0,0 @@ --package cosmovisor -- --import ( -- "encoding/json" -- "errors" -- "fmt" -- "net/url" -- "os" -- "path/filepath" -- "strconv" -- "strings" -- "time" -- -- cverrors "github.com/cosmos/cosmos-sdk/cosmovisor/errors" -- upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" -- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" -- "github.com/rs/zerolog" --) -- --// environment variable names --const ( -- EnvHome = "DAEMON_HOME" -- EnvName = "DAEMON_NAME" -- EnvDownloadBin = "DAEMON_ALLOW_DOWNLOAD_BINARIES" -- EnvRestartUpgrade = "DAEMON_RESTART_AFTER_UPGRADE" -- EnvSkipBackup = "UNSAFE_SKIP_BACKUP" -- EnvDataBackupPath = "DAEMON_DATA_BACKUP_DIR" -- EnvInterval = "DAEMON_POLL_INTERVAL" -- EnvPreupgradeMaxRetries = "DAEMON_PREUPGRADE_MAX_RETRIES" --) -- --const ( -- rootName = "cosmovisor" -- genesisDir = "genesis" -- upgradesDir = "upgrades" -- currentLink = "current" --) -- --// must be the same as x/upgrade/types.UpgradeInfoFilename --const defaultFilename = "upgrade-info.json" -- --// Config is the information passed in to control the daemon --type Config struct { -- Home string -- Name string -- AllowDownloadBinaries bool -- RestartAfterUpgrade bool -- PollInterval time.Duration -- UnsafeSkipBackup bool -- DataBackupPath string -- PreupgradeMaxRetries int -- -- // currently running upgrade -- currentUpgrade upgradetypes.Plan --} -- --// Root returns the root directory where all info lives --func (cfg *Config) Root() string { -- return filepath.Join(cfg.Home, rootName) --} -- --// GenesisBin is the path to the genesis binary - must be in place to start manager --func (cfg *Config) GenesisBin() string { -- return filepath.Join(cfg.Root(), genesisDir, "bin", cfg.Name) --} -- --// UpgradeBin is the path to the binary for the named upgrade --func (cfg *Config) UpgradeBin(upgradeName string) string { -- return filepath.Join(cfg.UpgradeDir(upgradeName), "bin", cfg.Name) --} -- --// UpgradeDir is the directory named upgrade --func (cfg *Config) UpgradeDir(upgradeName string) string { -- safeName := url.PathEscape(upgradeName) -- return filepath.Join(cfg.BaseUpgradeDir(), safeName) --} -- --// BaseUpgradeDir is the directory containing the named upgrade directories. --func (cfg *Config) BaseUpgradeDir() string { -- return filepath.Join(cfg.Root(), upgradesDir) --} -- --// UpgradeInfoFilePath is the expected upgrade-info filename created by `x/upgrade/keeper`. --func (cfg *Config) UpgradeInfoFilePath() string { -- return filepath.Join(cfg.Home, "data", defaultFilename) --} -- --// SymLinkToGenesis creates a symbolic link from "./current" to the genesis directory. --func (cfg *Config) SymLinkToGenesis() (string, error) { -- genesis := filepath.Join(cfg.Root(), genesisDir) -- link := filepath.Join(cfg.Root(), currentLink) -- -- if err := os.Symlink(genesis, link); err != nil { -- return "", err -- } -- // and return the genesis binary -- return cfg.GenesisBin(), nil --} -- --// CurrentBin is the path to the currently selected binary (genesis if no link is set) --// This will resolve the symlink to the underlying directory to make it easier to debug --func (cfg *Config) CurrentBin() (string, error) { -- cur := filepath.Join(cfg.Root(), currentLink) -- // if nothing here, fallback to genesis -- info, err := os.Lstat(cur) -- if err != nil { -- // Create symlink to the genesis -- return cfg.SymLinkToGenesis() -- } -- // if it is there, ensure it is a symlink -- if info.Mode()&os.ModeSymlink == 0 { -- // Create symlink to the genesis -- return cfg.SymLinkToGenesis() -- } -- -- // resolve it -- dest, err := os.Readlink(cur) -- if err != nil { -- // Create symlink to the genesis -- return cfg.SymLinkToGenesis() -- } -- -- // and return the binary -- binpath := filepath.Join(dest, "bin", cfg.Name) -- return binpath, nil --} -- --// GetConfigFromEnv will read the environmental variables into a config --// and then validate it is reasonable --func GetConfigFromEnv() (*Config, error) { -- var errs []error -- cfg := &Config{ -- Home: os.Getenv(EnvHome), -- Name: os.Getenv(EnvName), -- DataBackupPath: os.Getenv(EnvDataBackupPath), -- } -- -- if cfg.DataBackupPath == "" { -- cfg.DataBackupPath = cfg.Home -- } -- -- var err error -- if cfg.AllowDownloadBinaries, err = booleanOption(EnvDownloadBin, false); err != nil { -- errs = append(errs, err) -- } -- if cfg.RestartAfterUpgrade, err = booleanOption(EnvRestartUpgrade, true); err != nil { -- errs = append(errs, err) -- } -- if cfg.UnsafeSkipBackup, err = booleanOption(EnvSkipBackup, false); err != nil { -- errs = append(errs, err) -- } -- -- interval := os.Getenv(EnvInterval) -- if interval != "" { -- var intervalUInt uint64 -- intervalUInt, err = strconv.ParseUint(interval, 10, 32) -- if err == nil { -- cfg.PollInterval = time.Millisecond * time.Duration(intervalUInt) -- } else { -- cfg.PollInterval, err = time.ParseDuration(interval) -- } -- switch { -- case err != nil: -- errs = append(errs, fmt.Errorf("invalid %s: could not parse \"%s\" into either a duration or uint (milliseconds)", EnvInterval, interval)) -- case cfg.PollInterval <= 0: -- errs = append(errs, fmt.Errorf("invalid %s: must be greater than 0", EnvInterval)) -- } -- } else { -- cfg.PollInterval = 300 * time.Millisecond -- } -- -- envPreupgradeMaxRetriesVal := os.Getenv(EnvPreupgradeMaxRetries) -- if cfg.PreupgradeMaxRetries, err = strconv.Atoi(envPreupgradeMaxRetriesVal); err != nil && envPreupgradeMaxRetriesVal != "" { -- errs = append(errs, fmt.Errorf("%s could not be parsed to int: %w", EnvPreupgradeMaxRetries, err)) -- } -- -- errs = append(errs, cfg.validate()...) -- -- if len(errs) > 0 { -- return nil, cverrors.FlattenErrors(errs...) -- } -- return cfg, nil --} -- --// LogConfigOrError logs either the config details or the error. --func LogConfigOrError(logger *zerolog.Logger, cfg *Config, err error) { -- if cfg == nil && err == nil { -- return -- } -- logger.Info().Msg("configuration:") -- switch { -- case err != nil: -- cverrors.LogErrors(logger, "configuration errors found", err) -- case cfg != nil: -- logger.Info().Msg(cfg.DetailString()) -- } --} -- --// validate returns an error if this config is invalid. --// it enforces Home/cosmovisor is a valid directory and exists, --// and that Name is set --func (cfg *Config) validate() []error { -- var errs []error -- if cfg.Name == "" { -- errs = append(errs, errors.New(EnvName+" is not set")) -- } -- -- switch { -- case cfg.Home == "": -- errs = append(errs, errors.New(EnvHome+" is not set")) -- case !filepath.IsAbs(cfg.Home): -- errs = append(errs, errors.New(EnvHome+" must be an absolute path")) -- default: -- switch info, err := os.Stat(cfg.Root()); { -- case err != nil: -- errs = append(errs, fmt.Errorf("cannot stat home dir: %w", err)) -- case !info.IsDir(): -- errs = append(errs, fmt.Errorf("%s is not a directory", cfg.Root())) -- } -- } -- -- // check the DataBackupPath -- if cfg.UnsafeSkipBackup == true { -- return errs -- } -- // if UnsafeSkipBackup is false, check if the DataBackupPath valid -- switch { -- case cfg.DataBackupPath == "": -- errs = append(errs, fmt.Errorf("%s must not be empty", EnvDataBackupPath)) -- case !filepath.IsAbs(cfg.DataBackupPath): -- errs = append(errs, fmt.Errorf("%s must be an absolute path", cfg.DataBackupPath)) -- default: -- switch info, err := os.Stat(cfg.DataBackupPath); { -- case err != nil: -- errs = append(errs, fmt.Errorf("%q must be a valid directory: %w", cfg.DataBackupPath, err)) -- case !info.IsDir(): -- errs = append(errs, fmt.Errorf("%q must be a valid directory", cfg.DataBackupPath)) -- } -- } -- -- return errs --} -- --// SetCurrentUpgrade sets the named upgrade to be the current link, returns error if this binary doesn't exist --func (cfg *Config) SetCurrentUpgrade(u upgradetypes.Plan) error { -- // ensure named upgrade exists -- bin := cfg.UpgradeBin(u.Name) -- -- if err := EnsureBinary(bin); err != nil { -- return err -- } -- -- // set a symbolic link -- link := filepath.Join(cfg.Root(), currentLink) -- safeName := url.PathEscape(u.Name) -- upgrade := filepath.Join(cfg.Root(), upgradesDir, safeName) -- -- // remove link if it exists -- if _, err := os.Stat(link); err == nil { -- os.Remove(link) -- } -- -- // point to the new directory -- if err := os.Symlink(upgrade, link); err != nil { -- return fmt.Errorf("creating current symlink: %w", err) -- } -- -- cfg.currentUpgrade = u -- f, err := os.Create(filepath.Join(upgrade, upgradekeeper.UpgradeInfoFileName)) -- if err != nil { -- return err -- } -- bz, err := json.Marshal(u) -- if err != nil { -- return err -- } -- if _, err := f.Write(bz); err != nil { -- return err -- } -- return f.Close() --} -- --func (cfg *Config) UpgradeInfo() (upgradetypes.Plan, error) { -- if cfg.currentUpgrade.Name != "" { -- return cfg.currentUpgrade, nil -- } -- -- filename := filepath.Join(cfg.Root(), currentLink, upgradekeeper.UpgradeInfoFileName) -- _, err := os.Lstat(filename) -- var u upgradetypes.Plan -- var bz []byte -- if err != nil { // no current directory -- goto returnError -- } -- if bz, err = os.ReadFile(filename); err != nil { -- goto returnError -- } -- if err = json.Unmarshal(bz, &u); err != nil { -- goto returnError -- } -- cfg.currentUpgrade = u -- return cfg.currentUpgrade, nil -- --returnError: -- cfg.currentUpgrade.Name = "_" -- return cfg.currentUpgrade, fmt.Errorf("failed to read %q: %w", filename, err) --} -- --// checks and validates env option --func booleanOption(name string, defaultVal bool) (bool, error) { -- p := strings.ToLower(os.Getenv(name)) -- switch p { -- case "": -- return defaultVal, nil -- case "false": -- return false, nil -- case "true": -- return true, nil -- } -- return false, fmt.Errorf("env variable %q must have a boolean value (\"true\" or \"false\"), got %q", name, p) --} -- --// DetailString returns a multi-line string with details about this config. --func (cfg Config) DetailString() string { -- configEntries := []struct{ name, value string }{ -- {EnvHome, cfg.Home}, -- {EnvName, cfg.Name}, -- {EnvDownloadBin, fmt.Sprintf("%t", cfg.AllowDownloadBinaries)}, -- {EnvRestartUpgrade, fmt.Sprintf("%t", cfg.RestartAfterUpgrade)}, -- {EnvInterval, fmt.Sprintf("%s", cfg.PollInterval)}, -- {EnvSkipBackup, fmt.Sprintf("%t", cfg.UnsafeSkipBackup)}, -- {EnvDataBackupPath, cfg.DataBackupPath}, -- {EnvPreupgradeMaxRetries, fmt.Sprintf("%d", cfg.PreupgradeMaxRetries)}, -- } -- derivedEntries := []struct{ name, value string }{ -- {"Root Dir", cfg.Root()}, -- {"Upgrade Dir", cfg.BaseUpgradeDir()}, -- {"Genesis Bin", cfg.GenesisBin()}, -- {"Monitored File", cfg.UpgradeInfoFilePath()}, -- {"Data Backup Dir", cfg.DataBackupPath}, -- } -- -- var sb strings.Builder -- sb.WriteString("Configurable Values:\n") -- for _, kv := range configEntries { -- sb.WriteString(fmt.Sprintf(" %s: %s\n", kv.name, kv.value)) -- } -- sb.WriteString("Derived Values:\n") -- dnl := 0 -- for _, kv := range derivedEntries { -- if len(kv.name) > dnl { -- dnl = len(kv.name) -- } -- } -- dFmt := fmt.Sprintf(" %%%ds: %%s\n", dnl) -- for _, kv := range derivedEntries { -- sb.WriteString(fmt.Sprintf(dFmt, kv.name, kv.value)) -- } -- return sb.String() --} -diff --git a/cosmovisor/args_test.go b/cosmovisor/args_test.go -deleted file mode 100644 -index e2f0a956b9..0000000000 ---- a/cosmovisor/args_test.go -+++ /dev/null -@@ -1,638 +0,0 @@ --package cosmovisor -- --import ( -- "bytes" -- "fmt" -- "io" -- "os" -- "path/filepath" -- "testing" -- "time" -- -- "github.com/rs/zerolog" -- "github.com/stretchr/testify/assert" -- "github.com/stretchr/testify/require" -- "github.com/stretchr/testify/suite" -- -- "github.com/cosmos/cosmos-sdk/cosmovisor/errors" --) -- --type argsTestSuite struct { -- suite.Suite --} -- --func TestArgsTestSuite(t *testing.T) { -- suite.Run(t, new(argsTestSuite)) --} -- --// cosmovisorEnv are the string values of environment variables used to configure Cosmovisor. --type cosmovisorEnv struct { -- Home string -- Name string -- DownloadBin string -- RestartUpgrade string -- SkipBackup string -- DataBackupPath string -- Interval string -- PreupgradeMaxRetries string --} -- --// ToMap creates a map of the cosmovisorEnv where the keys are the env var names. --func (c cosmovisorEnv) ToMap() map[string]string { -- return map[string]string{ -- EnvHome: c.Home, -- EnvName: c.Name, -- EnvDownloadBin: c.DownloadBin, -- EnvRestartUpgrade: c.RestartUpgrade, -- EnvSkipBackup: c.SkipBackup, -- EnvDataBackupPath: c.DataBackupPath, -- EnvInterval: c.Interval, -- EnvPreupgradeMaxRetries: c.PreupgradeMaxRetries, -- } --} -- --// Set sets the field in this cosmovisorEnv corresponding to the provided envVar to the given envVal. --func (c *cosmovisorEnv) Set(envVar, envVal string) { -- switch envVar { -- case EnvHome: -- c.Home = envVal -- case EnvName: -- c.Name = envVal -- case EnvDownloadBin: -- c.DownloadBin = envVal -- case EnvRestartUpgrade: -- c.RestartUpgrade = envVal -- case EnvSkipBackup: -- c.SkipBackup = envVal -- case EnvDataBackupPath: -- c.DataBackupPath = envVal -- case EnvInterval: -- c.Interval = envVal -- case EnvPreupgradeMaxRetries: -- c.PreupgradeMaxRetries = envVal -- default: -- panic(fmt.Errorf("Unknown environment variable [%s]. Ccannot set field to [%s]. ", envVar, envVal)) -- } --} -- --// clearEnv clears environment variables and what they were. --// Designed to be used like this: --// --// initialEnv := clearEnv() --// defer setEnv(nil, initialEnv) --func (s *argsTestSuite) clearEnv() *cosmovisorEnv { -- s.T().Logf("Clearing environment variables.") -- rv := cosmovisorEnv{} -- for envVar := range rv.ToMap() { -- rv.Set(envVar, os.Getenv(envVar)) -- s.Require().NoError(os.Unsetenv(envVar)) -- } -- return &rv --} -- --// setEnv sets environment variables to the values provided. --// If t is not nil, and there's a problem, the test will fail immediately. --// If t is nil, problems will just be logged using s.T(). --func (s *argsTestSuite) setEnv(t *testing.T, env *cosmovisorEnv) { -- if t == nil { -- s.T().Logf("Restoring environment variables.") -- } -- for envVar, envVal := range env.ToMap() { -- var err error -- var msg string -- if len(envVal) != 0 { -- err = os.Setenv(envVar, envVal) -- msg = fmt.Sprintf("setting %s to %s", envVar, envVal) -- } else { -- err = os.Unsetenv(envVar) -- msg = fmt.Sprintf("unsetting %s", envVar) -- } -- switch { -- case t != nil: -- require.NoError(t, err, msg) -- case err != nil: -- s.T().Logf("error %s: %v", msg, err) -- default: -- s.T().Logf("done %s", msg) -- } -- } --} -- --func (s *argsTestSuite) TestConfigPaths() { -- cases := map[string]struct { -- cfg Config -- upgradeName string -- expectRoot string -- expectGenesis string -- expectUpgrade string -- }{ -- "simple": { -- cfg: Config{Home: "/foo", Name: "myd"}, -- upgradeName: "bar", -- expectRoot: fmt.Sprintf("/foo/%s", rootName), -- expectGenesis: fmt.Sprintf("/foo/%s/genesis/bin/myd", rootName), -- expectUpgrade: fmt.Sprintf("/foo/%s/upgrades/bar/bin/myd", rootName), -- }, -- "handle space": { -- cfg: Config{Home: "/longer/prefix/", Name: "yourd"}, -- upgradeName: "some spaces", -- expectRoot: fmt.Sprintf("/longer/prefix/%s", rootName), -- expectGenesis: fmt.Sprintf("/longer/prefix/%s/genesis/bin/yourd", rootName), -- expectUpgrade: "/longer/prefix/cosmovisor/upgrades/some%20spaces/bin/yourd", -- }, -- } -- -- for _, tc := range cases { -- s.Require().Equal(tc.cfg.Root(), filepath.FromSlash(tc.expectRoot)) -- s.Require().Equal(tc.cfg.GenesisBin(), filepath.FromSlash(tc.expectGenesis)) -- s.Require().Equal(tc.cfg.UpgradeBin(tc.upgradeName), filepath.FromSlash(tc.expectUpgrade)) -- } --} -- --// Test validate --// add more test in test validate --func (s *argsTestSuite) TestValidate() { -- relPath := filepath.Join("testdata", "validate") -- absPath, err := filepath.Abs(relPath) -- s.Require().NoError(err) -- -- testdata, err := filepath.Abs("testdata") -- s.Require().NoError(err) -- -- cases := map[string]struct { -- cfg Config -- valid bool -- }{ -- "happy": { -- cfg: Config{Home: absPath, Name: "bind", DataBackupPath: absPath}, -- valid: true, -- }, -- "happy with download": { -- cfg: Config{Home: absPath, Name: "bind", AllowDownloadBinaries: true, DataBackupPath: absPath}, -- valid: true, -- }, -- "happy with skip data backup": { -- cfg: Config{Home: absPath, Name: "bind", UnsafeSkipBackup: true, DataBackupPath: absPath}, -- valid: true, -- }, -- "happy with skip data backup and empty data backup path": { -- cfg: Config{Home: absPath, Name: "bind", UnsafeSkipBackup: true, DataBackupPath: ""}, -- valid: true, -- }, -- "happy with skip data backup and no such data backup path dir": { -- cfg: Config{Home: absPath, Name: "bind", UnsafeSkipBackup: true, DataBackupPath: filepath.FromSlash("/no/such/dir")}, -- valid: true, -- }, -- "happy with skip data backup and relative data backup path": { -- cfg: Config{Home: absPath, Name: "bind", UnsafeSkipBackup: true, DataBackupPath: relPath}, -- valid: true, -- }, -- "missing home": { -- cfg: Config{Name: "bind"}, -- valid: false, -- }, -- "missing name": { -- cfg: Config{Home: absPath}, -- valid: false, -- }, -- "relative home path": { -- cfg: Config{Home: relPath, Name: "bind"}, -- valid: false, -- }, -- "no upgrade manager subdir": { -- cfg: Config{Home: testdata, Name: "bind"}, -- valid: false, -- }, -- "no such home dir": { -- cfg: Config{Home: filepath.FromSlash("/no/such/dir"), Name: "bind"}, -- valid: false, -- }, -- "empty data backup path": { -- cfg: Config{Home: absPath, Name: "bind", DataBackupPath: ""}, -- valid: false, -- }, -- "no such data backup path dir": { -- cfg: Config{Home: absPath, Name: "bind", DataBackupPath: filepath.FromSlash("/no/such/dir")}, -- valid: false, -- }, -- "relative data backup path": { -- cfg: Config{Home: absPath, Name: "bind", DataBackupPath: relPath}, -- valid: false, -- }, -- } -- -- for _, tc := range cases { -- errs := tc.cfg.validate() -- if tc.valid { -- s.Require().Len(errs, 0) -- } else { -- s.Require().Greater(len(errs), 0, "number of errors returned") -- } -- } --} -- --func (s *argsTestSuite) TestEnsureBin() { -- relPath := filepath.Join("testdata", "validate") -- absPath, err := filepath.Abs(relPath) -- s.Require().NoError(err) -- -- cfg := Config{Home: absPath, Name: "dummyd", DataBackupPath: absPath} -- s.Require().Len(cfg.validate(), 0, "validation errors") -- -- s.Require().NoError(EnsureBinary(cfg.GenesisBin())) -- -- cases := map[string]struct { -- upgrade string -- hasBin bool -- }{ -- "proper": {"chain2", true}, -- "no binary": {"nobin", false}, -- "not executable": {"noexec", false}, -- "no directory": {"foobarbaz", false}, -- } -- -- for _, tc := range cases { -- err := EnsureBinary(cfg.UpgradeBin(tc.upgrade)) -- if tc.hasBin { -- s.Require().NoError(err) -- } else { -- s.Require().Error(err) -- } -- } --} -- --func (s *argsTestSuite) TestBooleanOption() { -- initialEnv := s.clearEnv() -- defer s.setEnv(nil, initialEnv) -- -- name := "COSMOVISOR_TEST_VAL" -- -- check := func(def, expected, isErr bool, msg string) { -- v, err := booleanOption(name, def) -- if isErr { -- s.Require().Error(err) -- return -- } -- s.Require().NoError(err) -- s.Require().Equal(expected, v, msg) -- } -- -- os.Setenv(name, "") -- check(true, true, false, "should correctly set default value") -- check(false, false, false, "should correctly set default value") -- -- os.Setenv(name, "wrong") -- check(true, true, true, "should error on wrong value") -- os.Setenv(name, "truee") -- check(true, true, true, "should error on wrong value") -- -- os.Setenv(name, "false") -- check(true, false, false, "should handle false value") -- check(false, false, false, "should handle false value") -- os.Setenv(name, "faLSe") -- check(true, false, false, "should handle false value case not sensitive") -- check(false, false, false, "should handle false value case not sensitive") -- -- os.Setenv(name, "true") -- check(true, true, false, "should handle true value") -- check(false, true, false, "should handle true value") -- -- os.Setenv(name, "TRUE") -- check(true, true, false, "should handle true value case not sensitive") -- check(false, true, false, "should handle true value case not sensitive") --} -- --func (s *argsTestSuite) TestDetailString() { -- home := "/home" -- name := "test-name" -- allowDownloadBinaries := true -- restartAfterUpgrade := true -- pollInterval := 406 * time.Millisecond -- unsafeSkipBackup := false -- dataBackupPath := "/home" -- preupgradeMaxRetries := 8 -- cfg := &Config{ -- Home: home, -- Name: name, -- AllowDownloadBinaries: allowDownloadBinaries, -- RestartAfterUpgrade: restartAfterUpgrade, -- PollInterval: pollInterval, -- UnsafeSkipBackup: unsafeSkipBackup, -- DataBackupPath: dataBackupPath, -- PreupgradeMaxRetries: preupgradeMaxRetries, -- } -- -- expectedPieces := []string{ -- "Configurable Values:", -- fmt.Sprintf("%s: %s", EnvHome, home), -- fmt.Sprintf("%s: %s", EnvName, name), -- fmt.Sprintf("%s: %t", EnvDownloadBin, allowDownloadBinaries), -- fmt.Sprintf("%s: %t", EnvRestartUpgrade, restartAfterUpgrade), -- fmt.Sprintf("%s: %s", EnvInterval, pollInterval), -- fmt.Sprintf("%s: %t", EnvSkipBackup, unsafeSkipBackup), -- fmt.Sprintf("%s: %s", EnvDataBackupPath, home), -- fmt.Sprintf("%s: %d", EnvPreupgradeMaxRetries, preupgradeMaxRetries), -- "Derived Values:", -- fmt.Sprintf("Root Dir: %s", home), -- fmt.Sprintf("Upgrade Dir: %s", home), -- fmt.Sprintf("Genesis Bin: %s", home), -- fmt.Sprintf("Monitored File: %s", home), -- fmt.Sprintf("Data Backup Dir: %s", home), -- } -- -- actual := cfg.DetailString() -- -- for _, piece := range expectedPieces { -- s.Assert().Contains(actual, piece) -- } --} -- --func (s *argsTestSuite) TestGetConfigFromEnv() { -- initialEnv := s.clearEnv() -- defer s.setEnv(nil, initialEnv) -- -- relPath := filepath.Join("testdata", "validate") -- absPath, perr := filepath.Abs(relPath) -- s.Require().NoError(perr) -- -- newConfig := func(home, name, dataBackupPath string, downloadBin, restartUpgrade, skipBackup bool, interval, preupgradeMaxRetries int) *Config { -- return &Config{ -- Home: home, -- Name: name, -- AllowDownloadBinaries: downloadBin, -- RestartAfterUpgrade: restartUpgrade, -- PollInterval: time.Millisecond * time.Duration(interval), -- UnsafeSkipBackup: skipBackup, -- DataBackupPath: dataBackupPath, -- PreupgradeMaxRetries: preupgradeMaxRetries, -- } -- } -- -- tests := []struct { -- name string -- envVals cosmovisorEnv -- expectedCfg *Config -- expectedErrCount int -- }{ -- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries -- { -- name: "all bad", -- envVals: cosmovisorEnv{"", "", "bad", "bad", "bad", "", "bad", "bad"}, -- expectedCfg: nil, -- expectedErrCount: 8, -- }, -- { -- name: "all good", -- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "true", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, true, false, true, 303, 1), -- expectedErrCount: 0, -- }, -- { -- name: "nothing set", -- envVals: cosmovisorEnv{"", "", "", "", "", "", "", ""}, -- expectedCfg: nil, -- expectedErrCount: 3, -- }, -- // Note: Home and Name tests are done in TestValidate -- { -- name: "download bin bad", -- envVals: cosmovisorEnv{absPath, "testname", "bad", "false", "true", "", "303", "1"}, -- expectedCfg: nil, -- expectedErrCount: 1, -- }, -- { -- name: "download bin not set", -- envVals: cosmovisorEnv{absPath, "testname", "", "false", "true", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, false, false, true, 303, 1), -- expectedErrCount: 0, -- }, -- { -- name: "download bin true", -- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "true", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, true, false, true, 303, 1), -- expectedErrCount: 0, -- }, -- { -- name: "download bin false", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "true", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, false, false, true, 303, 1), -- expectedErrCount: 0, -- }, -- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries -- { -- name: "restart upgrade bad", -- envVals: cosmovisorEnv{absPath, "testname", "true", "bad", "true", "", "303", "1"}, -- expectedCfg: nil, -- expectedErrCount: 1, -- }, -- { -- name: "restart upgrade not set", -- envVals: cosmovisorEnv{absPath, "testname", "true", "", "true", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, true, true, true, 303, 1), -- expectedErrCount: 0, -- }, -- { -- name: "restart upgrade true", -- envVals: cosmovisorEnv{absPath, "testname", "true", "true", "true", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, true, true, true, 303, 1), -- expectedErrCount: 0, -- }, -- { -- name: "restart upgrade true", -- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "true", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, true, false, true, 303, 1), -- expectedErrCount: 0, -- }, -- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries -- { -- name: "skip unsafe backups bad", -- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "bad", "", "303", "1"}, -- expectedCfg: nil, -- expectedErrCount: 1, -- }, -- { -- name: "skip unsafe backups not set", -- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, true, false, false, 303, 1), -- expectedErrCount: 0, -- }, -- { -- name: "skip unsafe backups true", -- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "true", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, true, false, true, 303, 1), -- expectedErrCount: 0, -- }, -- { -- name: "skip unsafe backups false", -- envVals: cosmovisorEnv{absPath, "testname", "true", "false", "false", "", "303", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, true, false, false, 303, 1), -- expectedErrCount: 0, -- }, -- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries -- { -- name: "poll interval bad", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "bad", "1"}, -- expectedCfg: nil, -- expectedErrCount: 1, -- }, -- { -- name: "poll interval 0", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "0", "1"}, -- expectedCfg: nil, -- expectedErrCount: 1, -- }, -- { -- name: "poll interval not set", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 300, 1), -- expectedErrCount: 0, -- }, -- { -- name: "poll interval 987", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "987", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 987, 1), -- expectedErrCount: 0, -- }, -- { -- name: "poll interval 1s", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "1s", "1"}, -- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 1000, 1), -- expectedErrCount: 0, -- }, -- { -- name: "poll interval -3m", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "-3m", "1"}, -- expectedCfg: nil, -- expectedErrCount: 1, -- }, -- // EnvHome, EnvName, EnvDownloadBin, EnvRestartUpgrade, EnvSkipBackup, EnvDataBackupPath, EnvInterval, EnvPreupgradeMaxRetries -- { -- name: "prepupgrade max retries bad", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "406", "bad"}, -- expectedCfg: nil, -- expectedErrCount: 1, -- }, -- { -- name: "prepupgrade max retries 0", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "406", "0"}, -- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 406, 0), -- expectedErrCount: 0, -- }, -- { -- name: "prepupgrade max retries not set", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "406", ""}, -- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 406, 0), -- expectedErrCount: 0, -- }, -- { -- name: "prepupgrade max retries 5", -- envVals: cosmovisorEnv{absPath, "testname", "false", "false", "false", "", "406", "5"}, -- expectedCfg: newConfig(absPath, "testname", absPath, false, false, false, 406, 5), -- expectedErrCount: 0, -- }, -- } -- -- for _, tc := range tests { -- s.T().Run(tc.name, func(t *testing.T) { -- s.setEnv(t, &tc.envVals) -- cfg, err := GetConfigFromEnv() -- if tc.expectedErrCount == 0 { -- assert.NoError(t, err) -- } else { -- if assert.Error(t, err) { -- errCount := 1 -- if multi, isMulti := err.(*errors.MultiError); isMulti { -- errCount = multi.Len() -- } -- assert.Equal(t, tc.expectedErrCount, errCount, "error count") -- } -- } -- assert.Equal(t, tc.expectedCfg, cfg, "config") -- }) -- } --} -- --func (s *argsTestSuite) TestLogConfigOrError() { -- cfg := &Config{ -- Home: "/no/place/like/it", -- Name: "cosmotestvisor", -- AllowDownloadBinaries: true, -- RestartAfterUpgrade: true, -- PollInterval: 999, -- UnsafeSkipBackup: false, -- DataBackupPath: "/no/place/like/it", -- PreupgradeMaxRetries: 20, -- } -- errNormal := fmt.Errorf("this is a single error") -- errs := []error{ -- fmt.Errorf("multi-error error 1"), -- fmt.Errorf("multi-error error 2"), -- fmt.Errorf("multi-error error 3"), -- } -- errMulti := errors.FlattenErrors(errs...) -- -- makeTestLogger := func(testName string, out io.Writer) *zerolog.Logger { -- output := zerolog.ConsoleWriter{Out: out, TimeFormat: time.Kitchen, NoColor: true} -- logger := zerolog.New(output).With().Str("test", testName).Timestamp().Logger() -- return &logger -- } -- -- tests := []struct { -- name string -- cfg *Config -- err error -- contains []string -- notcontains []string -- }{ -- { -- name: "normal error", -- cfg: nil, -- err: errNormal, -- contains: []string{"configuration error", errNormal.Error()}, // TODO: Fix this. -- notcontains: nil, -- }, -- { -- name: "multi error", -- cfg: nil, -- err: errMulti, -- contains: []string{"configuration errors found", errs[0].Error(), errs[1].Error(), errs[2].Error()}, -- notcontains: nil, -- }, -- { -- name: "config", -- cfg: cfg, -- err: nil, -- contains: []string{"Configurable Values", cfg.DetailString()}, -- notcontains: nil, -- }, -- { -- name: "error and config - no config details", -- cfg: cfg, -- err: errNormal, -- contains: []string{"error"}, -- notcontains: []string{"Configuration is valid", EnvName, cfg.Home}, // Just some spot checks. -- }, -- { -- name: "nil nil - no output", -- cfg: nil, -- err: nil, -- contains: nil, -- notcontains: []string{" "}, -- }, -- } -- -- for _, tc := range tests { -- s.T().Run(tc.name, func(t *testing.T) { -- var b bytes.Buffer -- logger := makeTestLogger(tc.name, &b) -- LogConfigOrError(logger, tc.cfg, tc.err) -- output := b.String() -- for _, expected := range tc.contains { -- assert.Contains(t, output, expected) -- } -- for _, unexpected := range tc.notcontains { -- assert.NotContains(t, output, unexpected) -- } -- }) -- } --} -diff --git a/cosmovisor/buffer_test.go b/cosmovisor/buffer_test.go -deleted file mode 100644 -index 04dd2bb4c5..0000000000 ---- a/cosmovisor/buffer_test.go -+++ /dev/null -@@ -1,34 +0,0 @@ --package cosmovisor_test -- --import ( -- "bytes" -- "sync" --) -- --// buffer is a thread safe bytes buffer --type buffer struct { -- b bytes.Buffer -- m sync.Mutex --} -- --func NewBuffer() *buffer { -- return &buffer{} --} -- --func (b *buffer) Write(bz []byte) (int, error) { -- b.m.Lock() -- defer b.m.Unlock() -- return b.b.Write(bz) --} -- --func (b *buffer) String() string { -- b.m.Lock() -- defer b.m.Unlock() -- return b.b.String() --} -- --func (b *buffer) Reset() { -- b.m.Lock() -- defer b.m.Unlock() -- b.b.Reset() --} -diff --git a/cosmovisor/cmd/cosmovisor/help.go b/cosmovisor/cmd/cosmovisor/help.go -deleted file mode 100644 -index 25f2ca6c17..0000000000 ---- a/cosmovisor/cmd/cosmovisor/help.go -+++ /dev/null -@@ -1,24 +0,0 @@ --package main -- --import ( -- "fmt" -- -- "github.com/cosmos/cosmos-sdk/cosmovisor" --) -- --// GetHelpText creates the help text multi-line string. --func GetHelpText() string { -- return fmt.Sprintf(`Cosmosvisor - A process manager for Cosmos SDK application binaries. -- --Cosmovisor is a wrapper for a Cosmos SDK based App (set using the required %s env variable). --It starts the App by passing all provided arguments and monitors the %s/data/upgrade-info.json --file to perform an update. The upgrade-info.json file is created by the App x/upgrade module --when the blockchain height reaches an approved upgrade proposal. The file includes data from --the proposal. Cosmovisor interprets that data to perform an update: switch a current binary --and restart the App. -- --Configuration of Cosmovisor is done through environment variables, which are --documented in: https://github.com/cosmos/cosmos-sdk/tree/main/cosmovisor/README.md`, -- cosmovisor.EnvName, cosmovisor.EnvHome, -- ) --} -diff --git a/cosmovisor/cmd/cosmovisor/help_test.go b/cosmovisor/cmd/cosmovisor/help_test.go -deleted file mode 100644 -index fad8adde81..0000000000 ---- a/cosmovisor/cmd/cosmovisor/help_test.go -+++ /dev/null -@@ -1,102 +0,0 @@ --package main -- --import ( -- "fmt" -- "os" -- "testing" -- -- "github.com/stretchr/testify/require" -- "github.com/stretchr/testify/suite" -- -- "github.com/cosmos/cosmos-sdk/cosmovisor" --) -- --type HelpTestSuite struct { -- suite.Suite --} -- --func TestHelpTestSuite(t *testing.T) { -- suite.Run(t, new(HelpTestSuite)) --} -- --// cosmovisorHelpEnv are some string values of environment variables used to configure Cosmovisor. --type cosmovisorHelpEnv struct { -- Home string -- Name string --} -- --// ToMap creates a map of the cosmovisorHelpEnv where the keys are the env var names. --func (c cosmovisorHelpEnv) ToMap() map[string]string { -- return map[string]string{ -- cosmovisor.EnvHome: c.Home, -- cosmovisor.EnvName: c.Name, -- } --} -- --// Set sets the field in this cosmovisorHelpEnv corresponding to the provided envVar to the given envVal. --func (c *cosmovisorHelpEnv) Set(envVar, envVal string) { -- switch envVar { -- case cosmovisor.EnvHome: -- c.Home = envVal -- case cosmovisor.EnvName: -- c.Name = envVal -- default: -- panic(fmt.Errorf("Unknown environment variable [%s]. Ccannot set field to [%s]. ", envVar, envVal)) -- } --} -- --// clearEnv clears environment variables and returns what they were. --// Designed to be used like this: --// --// initialEnv := clearEnv() --// defer setEnv(nil, initialEnv) --func (s *HelpTestSuite) clearEnv() *cosmovisorHelpEnv { -- s.T().Logf("Clearing environment variables.") -- rv := cosmovisorHelpEnv{} -- for envVar := range rv.ToMap() { -- rv.Set(envVar, os.Getenv(envVar)) -- s.Require().NoError(os.Unsetenv(envVar)) -- } -- return &rv --} -- --// setEnv sets environment variables to the values provided. --// If t is not nil, and there's a problem, the test will fail immediately. --// If t is nil, problems will just be logged using s.T(). --func (s *HelpTestSuite) setEnv(t *testing.T, env *cosmovisorHelpEnv) { -- if t == nil { -- s.T().Logf("Restoring environment variables.") -- } -- for envVar, envVal := range env.ToMap() { -- var err error -- var msg string -- if len(envVal) != 0 { -- err = os.Setenv(envVar, envVal) -- msg = fmt.Sprintf("setting %s to %s", envVar, envVal) -- } else { -- err = os.Unsetenv(envVar) -- msg = fmt.Sprintf("unsetting %s", envVar) -- } -- switch { -- case t != nil: -- require.NoError(t, err, msg) -- case err != nil: -- s.T().Logf("error %s: %v", msg, err) -- default: -- s.T().Logf("done %s", msg) -- } -- } --} -- --func (s *HelpTestSuite) TestGetHelpText() { -- expectedPieces := []string{ -- "Cosmosvisor", -- cosmovisor.EnvName, cosmovisor.EnvHome, -- "https://github.com/cosmos/cosmos-sdk/tree/main/cosmovisor/README.md", -- } -- -- actual := GetHelpText() -- for _, piece := range expectedPieces { -- s.Assert().Contains(actual, piece) -- } --} -diff --git a/cosmovisor/cmd/cosmovisor/main.go b/cosmovisor/cmd/cosmovisor/main.go -deleted file mode 100644 -index 628b7da4f7..0000000000 ---- a/cosmovisor/cmd/cosmovisor/main.go -+++ /dev/null -@@ -1,19 +0,0 @@ --package main -- --import ( -- "context" -- "os" -- -- "github.com/cosmos/cosmos-sdk/cosmovisor" -- cverrors "github.com/cosmos/cosmos-sdk/cosmovisor/errors" --) -- --func main() { -- logger := cosmovisor.NewLogger() -- ctx := context.WithValue(context.Background(), cosmovisor.LoggerKey, logger) -- -- if err := rootCmd.ExecuteContext(ctx); err != nil { -- cverrors.LogErrors(logger, "", err) -- os.Exit(1) -- } --} -diff --git a/cosmovisor/cmd/cosmovisor/root.go b/cosmovisor/cmd/cosmovisor/root.go -deleted file mode 100644 -index 69f6cfe075..0000000000 ---- a/cosmovisor/cmd/cosmovisor/root.go -+++ /dev/null -@@ -1,11 +0,0 @@ --package main -- --import ( -- "github.com/spf13/cobra" --) -- --var rootCmd = &cobra.Command{ -- Use: "cosmovisor", -- Short: "A process manager for Cosmos SDK application binaries.", -- Long: GetHelpText(), --} -diff --git a/cosmovisor/cmd/cosmovisor/run.go b/cosmovisor/cmd/cosmovisor/run.go -deleted file mode 100644 -index f0917a3fc9..0000000000 ---- a/cosmovisor/cmd/cosmovisor/run.go -+++ /dev/null -@@ -1,53 +0,0 @@ --package main -- --import ( -- "github.com/cosmos/cosmos-sdk/cosmovisor" -- "github.com/rs/zerolog" -- "github.com/spf13/cobra" --) -- --func init() { -- rootCmd.AddCommand(runCmd) --} -- --var runCmd = &cobra.Command{ -- Use: "run", -- Short: "Run an APP command.", -- SilenceUsage: true, -- DisableFlagParsing: true, -- RunE: func(cmd *cobra.Command, args []string) error { -- logger := cmd.Context().Value(cosmovisor.LoggerKey).(*zerolog.Logger) -- -- return Run(logger, args) -- }, --} -- --// Run runs the configured program with the given args and monitors it for upgrades. --func Run(logger *zerolog.Logger, args []string, options ...RunOption) error { -- cfg, err := cosmovisor.GetConfigFromEnv() -- if err != nil { -- return err -- } -- -- runCfg := DefaultRunConfig -- for _, opt := range options { -- opt(&runCfg) -- } -- -- launcher, err := cosmovisor.NewLauncher(logger, cfg) -- if err != nil { -- return err -- } -- -- doUpgrade, err := launcher.Run(args, runCfg.StdOut, runCfg.StdErr) -- // if RestartAfterUpgrade, we launch after a successful upgrade (only condition LaunchProcess returns nil) -- for cfg.RestartAfterUpgrade && err == nil && doUpgrade { -- logger.Info().Str("app", cfg.Name).Msg("upgrade detected, relaunching") -- doUpgrade, err = launcher.Run(args, runCfg.StdOut, runCfg.StdErr) -- } -- if doUpgrade && err == nil { -- logger.Info().Msg("upgrade detected, DAEMON_RESTART_AFTER_UPGRADE is off. Verify new upgrade and start cosmovisor again.") -- } -- -- return err --} -diff --git a/cosmovisor/cmd/cosmovisor/run_config.go b/cosmovisor/cmd/cosmovisor/run_config.go -deleted file mode 100644 -index 5a77e30b41..0000000000 ---- a/cosmovisor/cmd/cosmovisor/run_config.go -+++ /dev/null -@@ -1,34 +0,0 @@ --package main -- --import ( -- "io" -- "os" --) -- --// DefaultRunConfig defintes a default RunConfig that writes to os.Stdout and os.Stderr --var DefaultRunConfig = RunConfig{ -- StdOut: os.Stdout, -- StdErr: os.Stderr, --} -- --// RunConfig defines the configuration for running a command --type RunConfig struct { -- StdOut io.Writer -- StdErr io.Writer --} -- --type RunOption func(*RunConfig) -- --// StdOutRunOption sets the StdOut writer for the Run command --func StdOutRunOption(w io.Writer) RunOption { -- return func(cfg *RunConfig) { -- cfg.StdOut = w -- } --} -- --// SdErrRunOption sets the StdErr writer for the Run command --func StdErrRunOption(w io.Writer) RunOption { -- return func(cfg *RunConfig) { -- cfg.StdErr = w -- } --} -diff --git a/cosmovisor/cmd/cosmovisor/run_test.go b/cosmovisor/cmd/cosmovisor/run_test.go -deleted file mode 100644 -index 7c585d9b64..0000000000 ---- a/cosmovisor/cmd/cosmovisor/run_test.go -+++ /dev/null -@@ -1,4 +0,0 @@ --package main -- --// TODO: Write tests for func Run(args []string) error --// https://github.com/cosmos/cosmos-sdk/issues/11852 -diff --git a/cosmovisor/cmd/cosmovisor/version.go b/cosmovisor/cmd/cosmovisor/version.go -deleted file mode 100644 -index de5005a721..0000000000 ---- a/cosmovisor/cmd/cosmovisor/version.go -+++ /dev/null -@@ -1,81 +0,0 @@ --package main -- --import ( -- "encoding/json" -- "fmt" -- "strings" -- -- "github.com/cosmos/cosmos-sdk/cosmovisor" -- "github.com/rs/zerolog" -- "github.com/spf13/cobra" -- tmcli "github.com/tendermint/tendermint/libs/cli" --) -- --func init() { -- versionCmd.Flags().StringP(OutputFlag, "o", "text", "Output format (text|json)") -- rootCmd.AddCommand(versionCmd) --} -- --var ( -- // Version represents Cosmovisor version value. Overwritten during build -- Version = "1.1.0" -- // OutputFlag defines the output format flag -- OutputFlag = tmcli.OutputFlag --) -- --var versionCmd = &cobra.Command{ -- Use: "version", -- Short: "Prints the version of Cosmovisor.", -- SilenceUsage: true, -- RunE: func(cmd *cobra.Command, args []string) error { -- logger := cmd.Context().Value(cosmovisor.LoggerKey).(*zerolog.Logger) -- -- if val, err := cmd.Flags().GetString(OutputFlag); val == "json" && err == nil { -- return printVersionJSON(logger, args) -- } -- -- return printVersion(logger, args) -- }, --} -- --func printVersion(logger *zerolog.Logger, args []string) error { -- fmt.Println("cosmovisor version: ", Version) -- -- if err := Run(logger, append([]string{"version"}, args...)); err != nil { -- return fmt.Errorf("failed to run version command: %w", err) -- } -- -- return nil --} -- --func printVersionJSON(logger *zerolog.Logger, args []string) error { -- buf := new(strings.Builder) -- -- // disable logger -- l := logger.Level(zerolog.Disabled) -- logger = &l -- -- if err := Run( -- logger, -- []string{"version", "--long", "--output", "json"}, -- StdOutRunOption(buf), -- ); err != nil { -- return fmt.Errorf("failed to run version command: %w", err) -- } -- -- out, err := json.Marshal(struct { -- Version string `json:"cosmovisor_version"` -- AppVersion json.RawMessage `json:"app_version"` -- }{ -- Version: Version, -- AppVersion: json.RawMessage(buf.String()), -- }) -- if err != nil { -- l := logger.Level(zerolog.TraceLevel) -- logger = &l -- return fmt.Errorf("can't print version output, expected valid json from APP, got: %s - %w", buf.String(), err) -- } -- -- fmt.Println(string(out)) -- return nil --} -diff --git a/cosmovisor/cmd/cosmovisor/version_test.go b/cosmovisor/cmd/cosmovisor/version_test.go -deleted file mode 100644 -index f9dfa14014..0000000000 ---- a/cosmovisor/cmd/cosmovisor/version_test.go -+++ /dev/null -@@ -1,21 +0,0 @@ --package main -- --import ( -- "context" -- "testing" -- -- "github.com/cosmos/cosmos-sdk/cosmovisor" -- "github.com/cosmos/cosmos-sdk/testutil" -- "github.com/stretchr/testify/require" --) -- --func TestVersionCommand_Error(t *testing.T) { -- logger := cosmovisor.NewLogger() -- -- rootCmd.SetArgs([]string{"version"}) -- _, out := testutil.ApplyMockIO(rootCmd) -- ctx := context.WithValue(context.Background(), cosmovisor.LoggerKey, logger) -- -- require.Error(t, rootCmd.ExecuteContext(ctx)) -- require.Contains(t, out.String(), "DAEMON_NAME is not set") --} -diff --git a/cosmovisor/errors/multi.go b/cosmovisor/errors/multi.go -deleted file mode 100644 -index a78a61a4e8..0000000000 ---- a/cosmovisor/errors/multi.go -+++ /dev/null -@@ -1,85 +0,0 @@ --package errors -- --import ( -- "fmt" -- "strings" -- -- "github.com/rs/zerolog" --) -- --// MultiError is an error combining multiple other errors. --// It will never have 0 or 1 errors. It will always have two or more. --type MultiError struct { -- errs []error --} -- --// FlattenErrors possibly creates a MultiError. --// Nil entries are ignored. --// If all provided errors are nil (or nothing is provided), nil is returned. --// If only one non-nil error is provided, it is returned unchanged. --// If two or more non-nil errors are provided, the returned error will be of type *MultiError --// and it will contain each non-nil error. --func FlattenErrors(errs ...error) error { -- rv := MultiError{} -- for _, err := range errs { -- if err != nil { -- if merr, isMerr := err.(*MultiError); isMerr { -- rv.errs = append(rv.errs, merr.errs...) -- } else { -- rv.errs = append(rv.errs, err) -- } -- } -- } -- switch rv.Len() { -- case 0: -- return nil -- case 1: -- return rv.errs[0] -- } -- return &rv --} -- --// GetErrors gets all the errors that make up this MultiError. --func (e MultiError) GetErrors() []error { -- // Return a copy of the errs slice to prevent alteration of the original slice. -- rv := make([]error, e.Len()) -- copy(rv, e.errs) -- return rv --} -- --// Len gets the number of errors in this MultiError. --func (e MultiError) Len() int { -- return len(e.errs) --} -- --// Error implements the error interface for a MultiError. --func (e *MultiError) Error() string { -- var sb strings.Builder -- sb.WriteString(fmt.Sprintf("%d errors: ", len(e.errs))) -- for i, err := range e.errs { -- if i != 0 { -- sb.WriteString(", ") -- } -- sb.WriteString(fmt.Sprintf("%d: %v", i+1, err)) -- } -- return sb.String() --} -- --// String implements the string interface for a MultiError. --func (e MultiError) String() string { -- return e.Error() --} -- --func LogErrors(logger *zerolog.Logger, msg string, err error) { -- switch err := err.(type) { -- case *MultiError: -- if msg != "" { -- logger.Error().Msg(msg) -- } -- for i, e := range err.GetErrors() { -- logger.Error().Err(e).Msg(fmt.Sprintf(" %d:", i+1)) -- } -- default: -- logger.Error().Err(err).Msg(msg) -- } --} -diff --git a/cosmovisor/errors/multi_test.go b/cosmovisor/errors/multi_test.go -deleted file mode 100644 -index 83454b2cfb..0000000000 ---- a/cosmovisor/errors/multi_test.go -+++ /dev/null -@@ -1,190 +0,0 @@ --package errors -- --import ( -- "errors" -- "fmt" -- "testing" -- -- "github.com/stretchr/testify/require" -- "github.com/stretchr/testify/suite" --) -- --type MultiErrorTestSuite struct { -- suite.Suite -- -- err1 error -- err2 error -- err3 error -- err4 error --} -- --func TestMultiErrorTestSuite(t *testing.T) { -- suite.Run(t, new(MultiErrorTestSuite)) --} -- --func (s *MultiErrorTestSuite) SetupTest() { -- s.err1 = errors.New("expected error one") -- s.err2 = errors.New("expected error two") -- s.err3 = errors.New("expected error three") -- s.err3 = errors.New("expected error four") --} -- --func (s *MultiErrorTestSuite) TestFlattenErrors() { -- tests := []struct { -- name string -- input []error -- expected error -- }{ -- { -- name: "none in nil out", -- input: []error{}, -- expected: nil, -- }, -- { -- name: "nil in nil out", -- input: []error{nil}, -- expected: nil, -- }, -- { -- name: "nils in nil out", -- input: []error{nil, nil, nil}, -- expected: nil, -- }, -- { -- name: "one in same out", -- input: []error{s.err1}, -- expected: s.err1, -- }, -- { -- name: "nils and one in that one out", -- input: []error{nil, s.err2, nil}, -- expected: s.err2, -- }, -- { -- name: "two in multi out with both", -- input: []error{s.err1, s.err2}, -- expected: &MultiError{errs: []error{s.err1, s.err2}}, -- }, -- { -- name: "two and nils in multi out with both", -- input: []error{nil, s.err1, nil, s.err2, nil}, -- expected: &MultiError{errs: []error{s.err1, s.err2}}, -- }, -- { -- name: "lots in multi out", -- input: []error{s.err1, s.err2, s.err3, s.err2, s.err1}, -- expected: &MultiError{errs: []error{s.err1, s.err2, s.err3, s.err2, s.err1}}, -- }, -- { -- name: "multi and non in one multi out with all", -- input: []error{&MultiError{errs: []error{s.err1, s.err2}}, s.err3}, -- expected: &MultiError{errs: []error{s.err1, s.err2, s.err3}}, -- }, -- { -- name: "non and multi in one multi out with all", -- input: []error{s.err1, &MultiError{errs: []error{s.err2, s.err3}}}, -- expected: &MultiError{errs: []error{s.err1, s.err2, s.err3}}, -- }, -- { -- name: "two multi in one multi out with all", -- input: []error{&MultiError{errs: []error{s.err1, s.err2}}, &MultiError{errs: []error{s.err3, s.err4}}}, -- expected: &MultiError{errs: []error{s.err1, s.err2, s.err3, s.err4}}, -- }, -- } -- -- for _, tc := range tests { -- s.T().Run(tc.name, func(t *testing.T) { -- actual := FlattenErrors(tc.input...) -- require.Equal(t, tc.expected, actual) -- }) -- } --} -- --func (s *MultiErrorTestSuite) TestGetErrors() { -- tests := []struct { -- name string -- multi MultiError -- expected []error -- }{ -- { -- name: "two", -- multi: MultiError{errs: []error{s.err3, s.err1}}, -- expected: []error{s.err3, s.err1}, -- }, -- { -- name: "three", -- multi: MultiError{errs: []error{s.err3, s.err1, s.err2}}, -- expected: []error{s.err3, s.err1, s.err2}, -- }, -- } -- -- for _, tc := range tests { -- s.T().Run(tc.name, func(t *testing.T) { -- // Make sure it's getting what's expected. -- actual1 := tc.multi.GetErrors() -- require.NotSame(t, tc.expected, actual1) -- require.Equal(t, tc.expected, actual1) -- // Make sure that changing what was given back doesn't alter the original. -- actual1[0] = errors.New("unexpected error") -- actual2 := tc.multi.GetErrors() -- require.NotEqual(t, actual1, actual2) -- require.Equal(t, tc.expected, actual2) -- }) -- } --} -- --func (s *MultiErrorTestSuite) TestLen() { -- tests := []struct { -- name string -- multi MultiError -- expected int -- }{ -- { -- name: "two", -- multi: MultiError{errs: []error{s.err3, s.err1}}, -- expected: 2, -- }, -- { -- name: "three", -- multi: MultiError{errs: []error{s.err3, s.err1, s.err2}}, -- expected: 3, -- }, -- } -- -- for _, tc := range tests { -- s.T().Run(tc.name, func(t *testing.T) { -- actual := tc.multi.Len() -- require.Equal(t, tc.expected, actual) -- }) -- } --} -- --func (s *MultiErrorTestSuite) TestErrorAndString() { -- tests := []struct { -- name string -- multi MultiError -- expected string -- }{ -- { -- name: "two", -- multi: MultiError{errs: []error{s.err1, s.err2}}, -- expected: fmt.Sprintf("2 errors: 1: %s, 2: %s", s.err1, s.err2), -- }, -- { -- name: "three", -- multi: MultiError{errs: []error{s.err1, s.err2, s.err3}}, -- expected: fmt.Sprintf("3 errors: 1: %s, 2: %s, 3: %s", s.err1, s.err2, s.err3), -- }, -- } -- -- for _, tc := range tests { -- s.T().Run(tc.name+" Error", func(t *testing.T) { -- actual := tc.multi.Error() -- require.Equal(t, tc.expected, actual) -- }) -- s.T().Run(tc.name+" String", func(t *testing.T) { -- actual := tc.multi.String() -- require.Equal(t, tc.expected, actual) -- }) -- } --} -diff --git a/cosmovisor/go.mod b/cosmovisor/go.mod -deleted file mode 100644 -index 1c3f2595da..0000000000 ---- a/cosmovisor/go.mod -+++ /dev/null -@@ -1,133 +0,0 @@ --module github.com/cosmos/cosmos-sdk/cosmovisor -- --go 1.18 -- --require ( -- github.com/cosmos/cosmos-sdk v0.46.1 -- github.com/hashicorp/go-getter v1.6.1 -- github.com/otiai10/copy v1.7.0 -- github.com/rs/zerolog v1.27.0 -- github.com/spf13/cobra v1.5.0 -- github.com/stretchr/testify v1.8.0 -- github.com/tendermint/tendermint v0.34.21 --) -- --require ( -- cloud.google.com/go v0.100.2 // indirect -- cloud.google.com/go/compute v1.6.1 // indirect -- cloud.google.com/go/iam v0.3.0 // indirect -- cloud.google.com/go/storage v1.14.0 // indirect -- cosmossdk.io/errors v1.0.0-beta.7 // indirect -- cosmossdk.io/math v1.0.0-beta.3 // indirect -- filippo.io/edwards25519 v1.0.0-rc.1 // indirect -- github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect -- github.com/99designs/keyring v1.2.1 // indirect -- github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect -- github.com/armon/go-metrics v0.4.0 // indirect -- github.com/aws/aws-sdk-go v1.40.45 // 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.0 // indirect -- github.com/btcsuite/btcd v0.22.1 // indirect -- github.com/cespare/xxhash v1.1.0 // indirect -- github.com/cespare/xxhash/v2 v2.1.2 // indirect -- github.com/confio/ics23/go v0.7.0 // indirect -- github.com/cosmos/btcutil v1.0.4 // indirect -- github.com/cosmos/cosmos-proto v1.0.0-alpha7 // indirect -- github.com/cosmos/go-bip39 v1.0.0 // indirect -- github.com/cosmos/gorocksdb v1.2.0 // indirect -- github.com/cosmos/iavl v0.19.1 // indirect -- github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect -- github.com/cosmos/ledger-go v0.9.2 // indirect -- github.com/danieljoos/wincred v1.1.2 // indirect -- github.com/davecgh/go-spew v1.1.1 // indirect -- github.com/dgraph-io/badger/v2 v2.2007.4 // indirect -- github.com/dgraph-io/ristretto v0.1.0 // indirect -- github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect -- github.com/dustin/go-humanize v1.0.0 // indirect -- github.com/dvsekhvalnov/jose2go v1.5.0 // indirect -- github.com/fsnotify/fsnotify v1.5.4 // indirect -- github.com/go-kit/kit v0.12.0 // indirect -- github.com/go-kit/log v0.2.1 // indirect -- github.com/go-logfmt/logfmt v0.5.1 // indirect -- github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect -- github.com/gogo/protobuf v1.3.3 // indirect -- github.com/golang/glog v1.0.0 // indirect -- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect -- github.com/golang/protobuf v1.5.2 // indirect -- github.com/golang/snappy v0.0.4 // indirect -- github.com/google/btree v1.0.1 // indirect -- github.com/googleapis/gax-go/v2 v2.4.0 // indirect -- github.com/gorilla/websocket v1.5.0 // indirect -- github.com/grpc-ecosystem/go-grpc-middleware v1.3.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-immutable-radix v1.3.1 // indirect -- github.com/hashicorp/go-safetemp v1.0.0 // indirect -- github.com/hashicorp/go-version v1.6.0 // indirect -- github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect -- github.com/hashicorp/hcl v1.0.0 // indirect -- github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect -- github.com/inconshreveable/mousetrap v1.0.0 // indirect -- github.com/jmespath/go-jmespath v0.4.0 // indirect -- github.com/jmhodges/levigo v1.0.0 // indirect -- github.com/klauspost/compress v1.15.9 // indirect -- github.com/libp2p/go-buffer-pool v0.1.0 // indirect -- github.com/magiconair/properties v1.8.6 // indirect -- github.com/mattn/go-colorable v0.1.12 // indirect -- github.com/mattn/go-isatty v0.0.14 // indirect -- github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect -- github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect -- github.com/mitchellh/go-homedir v1.1.0 // indirect -- github.com/mitchellh/go-testing-interface v1.0.0 // indirect -- github.com/mitchellh/mapstructure v1.5.0 // indirect -- github.com/mtibben/percent v0.2.1 // indirect -- github.com/pelletier/go-toml v1.9.5 // indirect -- github.com/pelletier/go-toml/v2 v2.0.2 // indirect -- github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect -- github.com/pkg/errors v0.9.1 // indirect -- github.com/pmezard/go-difflib v1.0.0 // indirect -- github.com/prometheus/client_golang v1.12.2 // indirect -- github.com/prometheus/client_model v0.2.0 // indirect -- github.com/prometheus/common v0.34.0 // indirect -- github.com/prometheus/procfs v0.7.3 // indirect -- github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect -- github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect -- github.com/spf13/afero v1.8.2 // indirect -- github.com/spf13/cast v1.5.0 // indirect -- github.com/spf13/jwalterweatherman v1.1.0 // indirect -- github.com/spf13/pflag v1.0.5 // indirect -- github.com/spf13/viper v1.12.0 // indirect -- github.com/subosito/gotenv v1.4.0 // indirect -- github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect -- github.com/tendermint/btcd v0.1.1 // indirect -- github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect -- github.com/tendermint/go-amino v0.16.0 // indirect -- github.com/tendermint/tm-db v0.6.7 // indirect -- github.com/ulikunitz/xz v0.5.8 // indirect -- github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 // indirect -- go.etcd.io/bbolt v1.3.6 // indirect -- go.opencensus.io v0.23.0 // indirect -- golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect -- golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect -- golang.org/x/net v0.0.0-20220726230323-06994584191e // indirect -- golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect -- golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 // indirect -- golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect -- golang.org/x/text v0.3.7 // indirect -- golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect -- google.golang.org/api v0.81.0 // indirect -- google.golang.org/appengine v1.6.7 // indirect -- google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b // indirect -- google.golang.org/grpc v1.48.0 // indirect -- google.golang.org/protobuf v1.28.0 // indirect -- gopkg.in/ini.v1 v1.66.6 // indirect -- gopkg.in/yaml.v2 v2.4.0 // indirect -- gopkg.in/yaml.v3 v3.0.1 // indirect -- sigs.k8s.io/yaml v1.3.0 // indirect --) -- --replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 -diff --git a/cosmovisor/go.sum b/cosmovisor/go.sum -deleted file mode 100644 -index 29bd9181e9..0000000000 ---- a/cosmovisor/go.sum -+++ /dev/null -@@ -1,1109 +0,0 @@ --cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= --cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= --cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= --cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= --cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= --cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= --cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= --cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= --cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= --cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= --cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= --cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= --cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= --cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= --cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= --cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= --cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= --cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= --cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= --cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= --cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= --cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= --cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= --cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= --cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= --cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= --cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= --cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= --cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= --cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= --cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= --cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= --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/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 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wqc= --cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= --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/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= --cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= --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/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 h1:6RRlFMv1omScs6iq2hfE3IvgE+l6RfJPampq8UZc5TU= --cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= --cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= --cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= --cosmossdk.io/math v1.0.0-beta.3 h1:TbZxSopz2LqjJ7aXYfn7nJSb8vNaBklW6BLpcei1qwM= --cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= --dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= --filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= --filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= --jackfan.us.kg/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= --jackfan.us.kg/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= --jackfan.us.kg/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= --jackfan.us.kg/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= --jackfan.us.kg/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= --jackfan.us.kg/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= --jackfan.us.kg/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= --jackfan.us.kg/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= --jackfan.us.kg/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= --jackfan.us.kg/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= --jackfan.us.kg/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= --jackfan.us.kg/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= --jackfan.us.kg/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= --jackfan.us.kg/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= --jackfan.us.kg/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= --jackfan.us.kg/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= --jackfan.us.kg/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= --jackfan.us.kg/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= --jackfan.us.kg/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= --jackfan.us.kg/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= --jackfan.us.kg/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= --jackfan.us.kg/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= --jackfan.us.kg/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= --jackfan.us.kg/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= --jackfan.us.kg/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI= --jackfan.us.kg/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= --jackfan.us.kg/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= --jackfan.us.kg/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= --jackfan.us.kg/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= --jackfan.us.kg/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= --jackfan.us.kg/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= --jackfan.us.kg/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= --jackfan.us.kg/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= --jackfan.us.kg/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= --jackfan.us.kg/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= --jackfan.us.kg/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= --jackfan.us.kg/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= --jackfan.us.kg/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= --jackfan.us.kg/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= --jackfan.us.kg/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= --jackfan.us.kg/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= --jackfan.us.kg/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= --jackfan.us.kg/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= --jackfan.us.kg/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= --jackfan.us.kg/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= --jackfan.us.kg/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= --jackfan.us.kg/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= --jackfan.us.kg/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= --jackfan.us.kg/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= --jackfan.us.kg/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= --jackfan.us.kg/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= --jackfan.us.kg/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= --jackfan.us.kg/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= --jackfan.us.kg/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= --jackfan.us.kg/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= --jackfan.us.kg/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= --jackfan.us.kg/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= --jackfan.us.kg/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= --jackfan.us.kg/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= --jackfan.us.kg/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= --jackfan.us.kg/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= --jackfan.us.kg/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= --jackfan.us.kg/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= --jackfan.us.kg/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= --jackfan.us.kg/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= --jackfan.us.kg/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= --jackfan.us.kg/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= --jackfan.us.kg/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= --jackfan.us.kg/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= --jackfan.us.kg/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= --jackfan.us.kg/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= --jackfan.us.kg/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= --jackfan.us.kg/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= --jackfan.us.kg/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= --jackfan.us.kg/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= --jackfan.us.kg/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= --jackfan.us.kg/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= --jackfan.us.kg/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= --jackfan.us.kg/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= --jackfan.us.kg/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= --jackfan.us.kg/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= --jackfan.us.kg/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= --jackfan.us.kg/cosmos/cosmos-proto v1.0.0-alpha7 h1:yqYUOHF2jopwZh4dVQp3xgqwftE5/2hkrwIV6vkUbO0= --jackfan.us.kg/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= --jackfan.us.kg/cosmos/cosmos-sdk v0.46.1 h1:7vUZXMyrmEb4xtBYpz1TobtrcnpgiZTi+tVjc0XWB4o= --jackfan.us.kg/cosmos/cosmos-sdk v0.46.1/go.mod h1:2+o8Qw8qnE02V+lQVZDJFQ8tri/hsiA5GmWaPERqVa0= --jackfan.us.kg/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= --jackfan.us.kg/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= --jackfan.us.kg/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= --jackfan.us.kg/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= --jackfan.us.kg/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= --jackfan.us.kg/cosmos/iavl v0.19.1 h1:3gaq9b6SjiB0KBTygRnAvEGml2pQlu1TH8uma5g63Ys= --jackfan.us.kg/cosmos/iavl v0.19.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= --jackfan.us.kg/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= --jackfan.us.kg/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= --jackfan.us.kg/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= --jackfan.us.kg/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= --jackfan.us.kg/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= --jackfan.us.kg/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= --jackfan.us.kg/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= --jackfan.us.kg/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= --jackfan.us.kg/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= --jackfan.us.kg/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= --jackfan.us.kg/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= --jackfan.us.kg/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= --jackfan.us.kg/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= --jackfan.us.kg/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= --jackfan.us.kg/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= --jackfan.us.kg/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= --jackfan.us.kg/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= --jackfan.us.kg/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= --jackfan.us.kg/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= --jackfan.us.kg/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= --jackfan.us.kg/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= --jackfan.us.kg/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= --jackfan.us.kg/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= --jackfan.us.kg/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= --jackfan.us.kg/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= --jackfan.us.kg/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= --jackfan.us.kg/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= --jackfan.us.kg/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= --jackfan.us.kg/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= --jackfan.us.kg/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= --jackfan.us.kg/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= --jackfan.us.kg/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= --jackfan.us.kg/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= --jackfan.us.kg/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= --jackfan.us.kg/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= --jackfan.us.kg/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= --jackfan.us.kg/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= --jackfan.us.kg/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= --jackfan.us.kg/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= --jackfan.us.kg/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= --jackfan.us.kg/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= --jackfan.us.kg/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= --jackfan.us.kg/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= --jackfan.us.kg/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= --jackfan.us.kg/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= --jackfan.us.kg/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= --jackfan.us.kg/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= --jackfan.us.kg/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= --jackfan.us.kg/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= --jackfan.us.kg/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= --jackfan.us.kg/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= --jackfan.us.kg/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= --jackfan.us.kg/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= --jackfan.us.kg/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= --jackfan.us.kg/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= --jackfan.us.kg/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= --jackfan.us.kg/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= --jackfan.us.kg/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= --jackfan.us.kg/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= --jackfan.us.kg/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= --jackfan.us.kg/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= --jackfan.us.kg/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= --jackfan.us.kg/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= --jackfan.us.kg/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= --jackfan.us.kg/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= --jackfan.us.kg/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= --jackfan.us.kg/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= --jackfan.us.kg/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= --jackfan.us.kg/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= --jackfan.us.kg/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= --jackfan.us.kg/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= --jackfan.us.kg/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= --jackfan.us.kg/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= --jackfan.us.kg/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= --jackfan.us.kg/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= --jackfan.us.kg/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= --jackfan.us.kg/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= --jackfan.us.kg/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= --jackfan.us.kg/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= --jackfan.us.kg/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= --jackfan.us.kg/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= --jackfan.us.kg/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= --jackfan.us.kg/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= --jackfan.us.kg/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= --jackfan.us.kg/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= --jackfan.us.kg/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= --jackfan.us.kg/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= --jackfan.us.kg/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= --jackfan.us.kg/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= --jackfan.us.kg/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= --jackfan.us.kg/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= --jackfan.us.kg/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= --jackfan.us.kg/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= --jackfan.us.kg/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= --jackfan.us.kg/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= --jackfan.us.kg/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= --jackfan.us.kg/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= --jackfan.us.kg/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= --jackfan.us.kg/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= --jackfan.us.kg/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= --jackfan.us.kg/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= --jackfan.us.kg/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= --jackfan.us.kg/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= --jackfan.us.kg/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= --jackfan.us.kg/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= --jackfan.us.kg/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= --jackfan.us.kg/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= --jackfan.us.kg/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= --jackfan.us.kg/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= --jackfan.us.kg/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= --jackfan.us.kg/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= --jackfan.us.kg/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= --jackfan.us.kg/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= --jackfan.us.kg/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= --jackfan.us.kg/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= --jackfan.us.kg/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= --jackfan.us.kg/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= --jackfan.us.kg/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= --jackfan.us.kg/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= --jackfan.us.kg/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= --jackfan.us.kg/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= --jackfan.us.kg/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= --jackfan.us.kg/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= --jackfan.us.kg/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= --jackfan.us.kg/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= --jackfan.us.kg/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= --jackfan.us.kg/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= --jackfan.us.kg/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= --jackfan.us.kg/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= --jackfan.us.kg/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= --jackfan.us.kg/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= --jackfan.us.kg/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= --jackfan.us.kg/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= --jackfan.us.kg/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= --jackfan.us.kg/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= --jackfan.us.kg/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= --jackfan.us.kg/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= --jackfan.us.kg/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= --jackfan.us.kg/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= --jackfan.us.kg/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= --jackfan.us.kg/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= --jackfan.us.kg/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= --jackfan.us.kg/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= --jackfan.us.kg/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= --jackfan.us.kg/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= --jackfan.us.kg/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= --jackfan.us.kg/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= --jackfan.us.kg/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= --jackfan.us.kg/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= --jackfan.us.kg/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= --jackfan.us.kg/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= --jackfan.us.kg/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= --jackfan.us.kg/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= --jackfan.us.kg/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= --jackfan.us.kg/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= --jackfan.us.kg/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= --jackfan.us.kg/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= --jackfan.us.kg/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= --jackfan.us.kg/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= --jackfan.us.kg/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= --jackfan.us.kg/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= --jackfan.us.kg/googleapis/gax-go/v2 v2.4.0 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk= --jackfan.us.kg/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= --jackfan.us.kg/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= --jackfan.us.kg/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= --jackfan.us.kg/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= --jackfan.us.kg/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= --jackfan.us.kg/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= --jackfan.us.kg/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= --jackfan.us.kg/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= --jackfan.us.kg/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= --jackfan.us.kg/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= --jackfan.us.kg/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= --jackfan.us.kg/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= --jackfan.us.kg/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= --jackfan.us.kg/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= --jackfan.us.kg/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= --jackfan.us.kg/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= --jackfan.us.kg/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= --jackfan.us.kg/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= --jackfan.us.kg/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= --jackfan.us.kg/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= --jackfan.us.kg/hashicorp/go-getter v1.6.1 h1:NASsgP4q6tL94WH6nJxKWj8As2H/2kop/bB1d8JMyRY= --jackfan.us.kg/hashicorp/go-getter v1.6.1/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= --jackfan.us.kg/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= --jackfan.us.kg/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= --jackfan.us.kg/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= --jackfan.us.kg/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= --jackfan.us.kg/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= --jackfan.us.kg/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= --jackfan.us.kg/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM= --jackfan.us.kg/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= --jackfan.us.kg/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= --jackfan.us.kg/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= --jackfan.us.kg/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= --jackfan.us.kg/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= --jackfan.us.kg/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= --jackfan.us.kg/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= --jackfan.us.kg/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= --jackfan.us.kg/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= --jackfan.us.kg/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= --jackfan.us.kg/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= --jackfan.us.kg/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= --jackfan.us.kg/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= --jackfan.us.kg/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= --jackfan.us.kg/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= --jackfan.us.kg/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= --jackfan.us.kg/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= --jackfan.us.kg/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= --jackfan.us.kg/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= --jackfan.us.kg/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= --jackfan.us.kg/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= --jackfan.us.kg/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= --jackfan.us.kg/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= --jackfan.us.kg/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= --jackfan.us.kg/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= --jackfan.us.kg/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= --jackfan.us.kg/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= --jackfan.us.kg/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= --jackfan.us.kg/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= --jackfan.us.kg/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= --jackfan.us.kg/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= --jackfan.us.kg/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= --jackfan.us.kg/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= --jackfan.us.kg/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= --jackfan.us.kg/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= --jackfan.us.kg/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= --jackfan.us.kg/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= --jackfan.us.kg/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= --jackfan.us.kg/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= --jackfan.us.kg/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= --jackfan.us.kg/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= --jackfan.us.kg/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= --jackfan.us.kg/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= --jackfan.us.kg/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= --jackfan.us.kg/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= --jackfan.us.kg/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= --jackfan.us.kg/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= --jackfan.us.kg/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= --jackfan.us.kg/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= --jackfan.us.kg/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= --jackfan.us.kg/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= --jackfan.us.kg/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= --jackfan.us.kg/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= --jackfan.us.kg/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= --jackfan.us.kg/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= --jackfan.us.kg/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= --jackfan.us.kg/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= --jackfan.us.kg/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= --jackfan.us.kg/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= --jackfan.us.kg/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= --jackfan.us.kg/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= --jackfan.us.kg/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= --jackfan.us.kg/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= --jackfan.us.kg/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= --jackfan.us.kg/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= --jackfan.us.kg/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= --jackfan.us.kg/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= --jackfan.us.kg/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= --jackfan.us.kg/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= --jackfan.us.kg/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= --jackfan.us.kg/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= --jackfan.us.kg/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= --jackfan.us.kg/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= --jackfan.us.kg/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= --jackfan.us.kg/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= --jackfan.us.kg/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= --jackfan.us.kg/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= --jackfan.us.kg/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= --jackfan.us.kg/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= --jackfan.us.kg/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= --jackfan.us.kg/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= --jackfan.us.kg/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= --jackfan.us.kg/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= --jackfan.us.kg/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= --jackfan.us.kg/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= --jackfan.us.kg/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= --jackfan.us.kg/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= --jackfan.us.kg/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= --jackfan.us.kg/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= --jackfan.us.kg/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= --jackfan.us.kg/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= --jackfan.us.kg/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= --jackfan.us.kg/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= --jackfan.us.kg/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= --jackfan.us.kg/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= --jackfan.us.kg/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= --jackfan.us.kg/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= --jackfan.us.kg/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= --jackfan.us.kg/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= --jackfan.us.kg/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= --jackfan.us.kg/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= --jackfan.us.kg/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= --jackfan.us.kg/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= --jackfan.us.kg/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE= --jackfan.us.kg/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U= --jackfan.us.kg/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= --jackfan.us.kg/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= --jackfan.us.kg/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= --jackfan.us.kg/otiai10/mint v1.3.3 h1:7JgpsBaN0uMkyju4tbYHu0mnM55hNKVYLsXmwr15NQI= --jackfan.us.kg/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= --jackfan.us.kg/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= --jackfan.us.kg/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= --jackfan.us.kg/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= --jackfan.us.kg/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= --jackfan.us.kg/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= --jackfan.us.kg/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= --jackfan.us.kg/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= --jackfan.us.kg/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= --jackfan.us.kg/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= --jackfan.us.kg/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= --jackfan.us.kg/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= --jackfan.us.kg/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= --jackfan.us.kg/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= --jackfan.us.kg/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= --jackfan.us.kg/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= --jackfan.us.kg/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= --jackfan.us.kg/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= --jackfan.us.kg/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= --jackfan.us.kg/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= --jackfan.us.kg/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= --jackfan.us.kg/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= --jackfan.us.kg/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= --jackfan.us.kg/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= --jackfan.us.kg/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= --jackfan.us.kg/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= --jackfan.us.kg/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= --jackfan.us.kg/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= --jackfan.us.kg/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= --jackfan.us.kg/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= --jackfan.us.kg/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= --jackfan.us.kg/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= --jackfan.us.kg/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= --jackfan.us.kg/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= --jackfan.us.kg/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= --jackfan.us.kg/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= --jackfan.us.kg/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= --jackfan.us.kg/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= --jackfan.us.kg/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= --jackfan.us.kg/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= --jackfan.us.kg/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= --jackfan.us.kg/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= --jackfan.us.kg/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= --jackfan.us.kg/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= --jackfan.us.kg/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= --jackfan.us.kg/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= --jackfan.us.kg/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= --jackfan.us.kg/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= --jackfan.us.kg/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= --jackfan.us.kg/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= --jackfan.us.kg/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= --jackfan.us.kg/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= --jackfan.us.kg/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= --jackfan.us.kg/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= --jackfan.us.kg/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= --jackfan.us.kg/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= --jackfan.us.kg/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= --jackfan.us.kg/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= --jackfan.us.kg/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= --jackfan.us.kg/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= --jackfan.us.kg/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= --jackfan.us.kg/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= --jackfan.us.kg/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= --jackfan.us.kg/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= --jackfan.us.kg/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= --jackfan.us.kg/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= --jackfan.us.kg/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= --jackfan.us.kg/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= --jackfan.us.kg/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= --jackfan.us.kg/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= --jackfan.us.kg/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= --jackfan.us.kg/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= --jackfan.us.kg/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= --jackfan.us.kg/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= --jackfan.us.kg/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= --jackfan.us.kg/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= --jackfan.us.kg/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= --jackfan.us.kg/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= --jackfan.us.kg/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= --jackfan.us.kg/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= --jackfan.us.kg/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= --jackfan.us.kg/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= --jackfan.us.kg/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= --jackfan.us.kg/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= --jackfan.us.kg/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= --jackfan.us.kg/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= --jackfan.us.kg/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= --jackfan.us.kg/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= --jackfan.us.kg/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= --jackfan.us.kg/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= --jackfan.us.kg/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= --jackfan.us.kg/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= --jackfan.us.kg/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= --jackfan.us.kg/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= --jackfan.us.kg/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= --jackfan.us.kg/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= --jackfan.us.kg/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= --jackfan.us.kg/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= --jackfan.us.kg/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= --jackfan.us.kg/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= --jackfan.us.kg/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= --jackfan.us.kg/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= --jackfan.us.kg/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= --jackfan.us.kg/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= --jackfan.us.kg/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= --jackfan.us.kg/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= --jackfan.us.kg/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= --jackfan.us.kg/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= --jackfan.us.kg/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= --jackfan.us.kg/tendermint/tendermint v0.34.21 h1:UiGGnBFHVrZhoQVQ7EfwSOLuCtarqCSsRf8VrklqB7s= --jackfan.us.kg/tendermint/tendermint v0.34.21/go.mod h1:XDvfg6U7grcFTDx7VkzxnhazQ/bspGJAn4DZ6DcLLjQ= --jackfan.us.kg/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= --jackfan.us.kg/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= --jackfan.us.kg/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= --jackfan.us.kg/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= --jackfan.us.kg/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= --jackfan.us.kg/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= --jackfan.us.kg/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= --jackfan.us.kg/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= --jackfan.us.kg/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= --jackfan.us.kg/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= --jackfan.us.kg/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= --jackfan.us.kg/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= --jackfan.us.kg/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= --jackfan.us.kg/zondax/hid v0.9.1-0.20220302062450-5552068d2266 h1:O9XLFXGkVswDFmH9LaYpqu+r/AAFWqr0DL6V00KEVFg= --jackfan.us.kg/zondax/hid v0.9.1-0.20220302062450-5552068d2266/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= --go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= --go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= --go.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 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= --go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= --go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= --go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= --go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= --go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= --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-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-20200115085410-6d4e4cb37c7d/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-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= --golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= --golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= --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-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= --golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= --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/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-20181114220301-adae6a3d119a/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-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-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-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= --golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= --golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= --golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= --golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= --golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= --golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= --golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= --golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= --golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= --golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= --golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= --golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= --golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= --golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= --golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= --golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= --golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= --golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= --golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= --golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= --golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= --golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= --golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= --golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= --golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= --golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= --golang.org/x/net v0.0.0-20220726230323-06994584191e h1:wOQNKh1uuDGRnmgF0jDxh7ctgGy/3P4rYWQRVJD4/Yg= --golang.org/x/net v0.0.0-20220726230323-06994584191e/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= --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 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= --golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= --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-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= --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-20181116152217-5ac8a444bdc5/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-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-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-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-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-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-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-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-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= --golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-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-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-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-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-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.0.0-20220727055044-e65921a090b8 h1:dyU22nBWzrmTQxtNrr4dzVOvaw35nUYE279vF9UmsI8= --golang.org/x/sys v0.0.0-20220727055044-e65921a090b8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --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.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc= --golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= --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 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= --golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= --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/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-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-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-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-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= --golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= --golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= --golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= --golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= --golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= --golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= --golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= --golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= --golang.org/x/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 h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= --golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= --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.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= --google.golang.org/api v0.81.0 h1:o8WF5AvfidafWbFjsRyupxyEQJNUWxLZJCK5NXrxZZ8= --google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= --google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= --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 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= --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-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-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= --google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= --google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= --google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= --google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= --google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= --google.golang.org/genproto v0.0.0-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-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-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= --google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= --google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM= --google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= --google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= --google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= --google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= --google.golang.org/grpc v1.23.0/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.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.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= --google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= --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 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= --google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= --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 h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= --gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= --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/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= --gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= --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/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.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= --gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= --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= --nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= --pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= --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.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= --sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= -diff --git a/cosmovisor/logger.go b/cosmovisor/logger.go -deleted file mode 100644 -index bcec3a0254..0000000000 ---- a/cosmovisor/logger.go -+++ /dev/null -@@ -1,16 +0,0 @@ --package cosmovisor -- --import ( -- "os" -- "time" -- -- "github.com/rs/zerolog" --) -- --var LoggerKey struct{} -- --func NewLogger() *zerolog.Logger { -- output := zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.Kitchen} -- logger := zerolog.New(output).With().Str("module", "cosmovisor").Timestamp().Logger() -- return &logger --} -diff --git a/cosmovisor/process.go b/cosmovisor/process.go -deleted file mode 100644 -index 5192953a74..0000000000 ---- a/cosmovisor/process.go -+++ /dev/null -@@ -1,244 +0,0 @@ --package cosmovisor -- --import ( -- "encoding/json" -- "fmt" -- "io" -- "os" -- "os/exec" -- "os/signal" -- "path/filepath" -- "strconv" -- "strings" -- "syscall" -- "time" -- -- "github.com/otiai10/copy" -- "github.com/rs/zerolog" -- -- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" --) -- --type Launcher struct { -- logger *zerolog.Logger -- cfg *Config -- fw *fileWatcher --} -- --func NewLauncher(logger *zerolog.Logger, cfg *Config) (Launcher, error) { -- fw, err := newUpgradeFileWatcher(logger, cfg.UpgradeInfoFilePath(), cfg.PollInterval) -- if err != nil { -- return Launcher{}, err -- } -- -- return Launcher{logger: logger, cfg: cfg, fw: fw}, nil --} -- --// Run launches the app in a subprocess and returns when the subprocess (app) --// exits (either when it dies, or *after* a successful upgrade.) and upgrade finished. --// Returns true if the upgrade request was detected and the upgrade process started. --func (l Launcher) Run(args []string, stdout, stderr io.Writer) (bool, error) { -- bin, err := l.cfg.CurrentBin() -- if err != nil { -- return false, fmt.Errorf("error creating symlink to genesis: %w", err) -- } -- -- if err := EnsureBinary(bin); err != nil { -- return false, fmt.Errorf("current binary is invalid: %w", err) -- } -- -- l.logger.Info().Str("path", bin).Strs("args", args).Msg("running app") -- cmd := exec.Command(bin, args...) -- cmd.Stdout = stdout -- cmd.Stderr = stderr -- if err := cmd.Start(); err != nil { -- return false, fmt.Errorf("launching process %s %s failed: %w", bin, strings.Join(args, " "), err) -- } -- -- sigs := make(chan os.Signal, 1) -- signal.Notify(sigs, syscall.SIGQUIT, syscall.SIGTERM) -- go func() { -- sig := <-sigs -- if err := cmd.Process.Signal(sig); err != nil { -- l.logger.Fatal().Err(err).Str("bin", bin).Msg("terminated") -- } -- }() -- -- needsUpdate, err := l.WaitForUpgradeOrExit(cmd) -- if err != nil || !needsUpdate { -- return false, err -- } -- -- if !IsSkipUpgradeHeight(args, l.fw.currentInfo) { -- if err := l.doBackup(); err != nil { -- return false, err -- } -- -- if err = l.doPreUpgrade(); err != nil { -- return false, err -- } -- } -- -- return true, DoUpgrade(l.logger, l.cfg, l.fw.currentInfo) --} -- --// WaitForUpgradeOrExit checks upgrade plan file created by the app. --// When it returns, the process (app) is finished. --// --// It returns (true, nil) if an upgrade should be initiated (and we killed the process) --// It returns (false, err) if the process died by itself, or there was an issue reading the upgrade-info file. --// It returns (false, nil) if the process exited normally without triggering an upgrade. This is very unlikely --// to happened with "start" but may happened with short-lived commands like `gaiad export ...` --func (l Launcher) WaitForUpgradeOrExit(cmd *exec.Cmd) (bool, error) { -- currentUpgrade, err := l.cfg.UpgradeInfo() -- if err != nil { -- l.logger.Error().Err(err) -- } -- -- cmdDone := make(chan error) -- go func() { -- cmdDone <- cmd.Wait() -- }() -- -- select { -- case <-l.fw.MonitorUpdate(currentUpgrade): -- // upgrade - kill the process and restart -- l.logger.Info().Msg("daemon shutting down in an attempt to restart") -- _ = cmd.Process.Kill() -- case err := <-cmdDone: -- l.fw.Stop() -- // no error -> command exits normally (eg. short command like `gaiad version`) -- if err == nil { -- return false, nil -- } -- // the app x/upgrade causes a panic and the app can die before the filwatcher finds the -- // update, so we need to recheck update-info file. -- if !l.fw.CheckUpdate(currentUpgrade) { -- return false, err -- } -- } -- return true, nil --} -- --func (l Launcher) doBackup() error { -- // take backup if `UNSAFE_SKIP_BACKUP` is not set. -- if !l.cfg.UnsafeSkipBackup { -- // check if upgrade-info.json is not empty. -- var uInfo upgradetypes.Plan -- upgradeInfoFile, err := os.ReadFile(filepath.Join(l.cfg.Home, "data", "upgrade-info.json")) -- if err != nil { -- return fmt.Errorf("error while reading upgrade-info.json: %w", err) -- } -- -- err = json.Unmarshal(upgradeInfoFile, &uInfo) -- if err != nil { -- return err -- } -- -- if uInfo.Name == "" { -- return fmt.Errorf("upgrade-info.json is empty") -- } -- -- // a destination directory, Format YYYY-MM-DD -- st := time.Now() -- stStr := fmt.Sprintf("%d-%d-%d", st.Year(), st.Month(), st.Day()) -- dst := filepath.Join(l.cfg.DataBackupPath, fmt.Sprintf("data"+"-backup-%s", stStr)) -- -- l.logger.Info().Time("backup start time", st).Msg("starting to take backup of data directory") -- -- // copy the $DAEMON_HOME/data to a backup dir -- err = copy.Copy(filepath.Join(l.cfg.Home, "data"), dst) -- -- if err != nil { -- return fmt.Errorf("error while taking data backup: %w", err) -- } -- -- // backup is done, lets check endtime to calculate total time taken for backup process -- et := time.Now() -- l.logger.Info().Str("backup saved at", dst).Time("backup completion time", et).TimeDiff("time taken to complete backup", et, st).Msg("backup completed") -- } -- -- return nil --} -- --// doPreUpgrade runs the pre-upgrade command defined by the application and handles respective error codes --// cfg contains the cosmovisor config from env var --func (l *Launcher) doPreUpgrade() error { -- counter := 0 -- for { -- if counter > l.cfg.PreupgradeMaxRetries { -- return fmt.Errorf("pre-upgrade command failed. reached max attempt of retries - %d", l.cfg.PreupgradeMaxRetries) -- } -- -- err := l.executePreUpgradeCmd() -- counter += 1 -- -- if err != nil { -- if err.(*exec.ExitError).ProcessState.ExitCode() == 1 { -- l.logger.Info().Msg("pre-upgrade command does not exist. continuing the upgrade.") -- return nil -- } -- if err.(*exec.ExitError).ProcessState.ExitCode() == 30 { -- return fmt.Errorf("pre-upgrade command failed : %w", err) -- } -- if err.(*exec.ExitError).ProcessState.ExitCode() == 31 { -- l.logger.Error().Err(err).Int("attempt", counter).Msg("pre-upgrade command failed. retrying") -- continue -- } -- } -- -- l.logger.Info().Msg("pre-upgrade successful. continuing the upgrade.") -- return nil -- } --} -- --// executePreUpgradeCmd runs the pre-upgrade command defined by the application --// cfg contains the cosmosvisor config from the env vars --func (l *Launcher) executePreUpgradeCmd() error { -- bin, err := l.cfg.CurrentBin() -- if err != nil { -- return err -- } -- -- preUpgradeCmd := exec.Command(bin, "pre-upgrade") -- _, err = preUpgradeCmd.Output() -- return err --} -- --// IsSkipUpgradeHeight checks if pre-upgrade script must be run. If the height in the upgrade plan matches any of the heights provided in --safe-skip-upgrade, the script is not run --func IsSkipUpgradeHeight(args []string, upgradeInfo upgradetypes.Plan) bool { -- skipUpgradeHeights := UpgradeSkipHeights(args) -- for _, h := range skipUpgradeHeights { -- if h == int(upgradeInfo.Height) { -- return true -- } -- } -- return false --} -- --// UpgradeSkipHeights gets all the heights provided when --// --// simd start --unsafe-skip-upgrades ... --func UpgradeSkipHeights(args []string) []int { -- var heights []int -- for i, arg := range args { -- if arg == "--unsafe-skip-upgrades" { -- j := i + 1 -- -- for j < len(args) { -- tArg := args[j] -- if strings.HasPrefix(tArg, "-") { -- break -- } -- h, err := strconv.Atoi(tArg) -- if err == nil { -- heights = append(heights, h) -- } -- j++ -- } -- -- break -- } -- } -- return heights --} -diff --git a/cosmovisor/process_test.go b/cosmovisor/process_test.go -deleted file mode 100644 -index 623634277b..0000000000 ---- a/cosmovisor/process_test.go -+++ /dev/null -@@ -1,210 +0,0 @@ --//go:build linux --// +build linux -- --package cosmovisor_test -- --import ( -- "fmt" -- "testing" -- -- "github.com/stretchr/testify/require" -- "github.com/stretchr/testify/suite" -- -- "github.com/cosmos/cosmos-sdk/cosmovisor" -- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" --) -- --type processTestSuite struct { -- suite.Suite --} -- --func TestProcessTestSuite(t *testing.T) { -- suite.Run(t, new(processTestSuite)) --} -- --// TestLaunchProcess will try running the script a few times and watch upgrades work properly --// and args are passed through --func (s *processTestSuite) TestLaunchProcess() { -- // binaries from testdata/validate directory -- require := s.Require() -- home := copyTestData(s.T(), "validate") -- cfg := &cosmovisor.Config{Home: home, Name: "dummyd", PollInterval: 20, UnsafeSkipBackup: true} -- logger := cosmovisor.NewLogger() -- -- // should run the genesis binary and produce expected output -- stdout, stderr := NewBuffer(), NewBuffer() -- currentBin, err := cfg.CurrentBin() -- require.NoError(err) -- require.Equal(cfg.GenesisBin(), currentBin) -- -- launcher, err := cosmovisor.NewLauncher(logger, cfg) -- require.NoError(err) -- -- upgradeFile := cfg.UpgradeInfoFilePath() -- -- args := []string{"foo", "bar", "1234", upgradeFile} -- doUpgrade, err := launcher.Run(args, stdout, stderr) -- require.NoError(err) -- require.True(doUpgrade) -- require.Equal("", stderr.String()) -- require.Equal(fmt.Sprintf("Genesis foo bar 1234 %s\nUPGRADE \"chain2\" NEEDED at height: 49: {}\n", upgradeFile), -- stdout.String()) -- -- // ensure this is upgraded now and produces new output -- -- currentBin, err = cfg.CurrentBin() -- require.NoError(err) -- -- require.Equal(cfg.UpgradeBin("chain2"), currentBin) -- args = []string{"second", "run", "--verbose"} -- stdout.Reset() -- stderr.Reset() -- -- doUpgrade, err = launcher.Run(args, stdout, stderr) -- require.NoError(err) -- require.False(doUpgrade) -- require.Equal("", stderr.String()) -- require.Equal("Chain 2 is live!\nArgs: second run --verbose\nFinished successfully\n", stdout.String()) -- -- // ended without other upgrade -- require.Equal(cfg.UpgradeBin("chain2"), currentBin) --} -- --// TestLaunchProcess will try running the script a few times and watch upgrades work properly --// and args are passed through --func (s *processTestSuite) TestLaunchProcessWithDownloads() { -- // test case upgrade path (binaries from testdata/download directory): -- // genesis -> chain2-zip_bin -- // chain2-zip_bin -> ref_to_chain3-zip_dir.json = (json for the next download instructions) -> chain3-zip_dir -- // chain3-zip_dir - doesn't upgrade -- require := s.Require() -- home := copyTestData(s.T(), "download") -- cfg := &cosmovisor.Config{Home: home, Name: "autod", AllowDownloadBinaries: true, PollInterval: 100, UnsafeSkipBackup: true} -- logger := cosmovisor.NewLogger() -- upgradeFilename := cfg.UpgradeInfoFilePath() -- -- // should run the genesis binary and produce expected output -- currentBin, err := cfg.CurrentBin() -- require.NoError(err) -- require.Equal(cfg.GenesisBin(), currentBin) -- -- launcher, err := cosmovisor.NewLauncher(logger, cfg) -- require.NoError(err) -- -- stdout, stderr := NewBuffer(), NewBuffer() -- args := []string{"some", "args", upgradeFilename} -- doUpgrade, err := launcher.Run(args, stdout, stderr) -- -- require.NoError(err) -- require.True(doUpgrade) -- require.Equal("", stderr.String()) -- require.Equal("Genesis autod. Args: some args "+upgradeFilename+"\n"+`ERROR: UPGRADE "chain2" NEEDED at height: 49: zip_binary`+"\n", stdout.String()) -- currentBin, err = cfg.CurrentBin() -- require.NoError(err) -- require.Equal(cfg.UpgradeBin("chain2"), currentBin) -- -- // start chain2 -- stdout.Reset() -- stderr.Reset() -- args = []string{"run", "--fast", upgradeFilename} -- doUpgrade, err = launcher.Run(args, stdout, stderr) -- require.NoError(err) -- -- require.Equal("", stderr.String()) -- require.Equal("Chain 2 from zipped binary\nArgs: run --fast "+upgradeFilename+"\n"+`ERROR: UPGRADE "chain3" NEEDED at height: 936: ref_to_chain3-zip_dir.json module=main`+"\n", stdout.String()) -- // ended with one more upgrade -- require.True(doUpgrade) -- currentBin, err = cfg.CurrentBin() -- require.NoError(err) -- require.Equal(cfg.UpgradeBin("chain3"), currentBin) -- -- // run the last chain -- args = []string{"end", "--halt", upgradeFilename} -- stdout.Reset() -- stderr.Reset() -- doUpgrade, err = launcher.Run(args, stdout, stderr) -- require.NoError(err) -- require.False(doUpgrade) -- require.Equal("", stderr.String()) -- require.Equal("Chain 3 from zipped directory\nArgs: end --halt "+upgradeFilename+"\n", stdout.String()) -- -- // and this doesn't upgrade -- currentBin, err = cfg.CurrentBin() -- require.NoError(err) -- require.Equal(cfg.UpgradeBin("chain3"), currentBin) --} -- --// TestSkipUpgrade tests heights that are identified to be skipped and return if upgrade height matches the skip heights --func TestSkipUpgrade(t *testing.T) { -- cases := []struct { -- args []string -- upgradeInfo upgradetypes.Plan -- expectRes bool -- }{{ -- args: []string{"appb", "start", "--unsafe-skip-upgrades"}, -- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 123}, -- expectRes: false, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades", "--abcd"}, -- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 123}, -- expectRes: false, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "--abcd"}, -- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 11}, -- expectRes: false, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "20", "--abcd"}, -- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 20}, -- expectRes: true, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "20", "--abcd", "34"}, -- upgradeInfo: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 34}, -- expectRes: false, -- }} -- -- for i := range cases { -- tc := cases[i] -- require := require.New(t) -- h := cosmovisor.IsSkipUpgradeHeight(tc.args, tc.upgradeInfo) -- require.Equal(h, tc.expectRes) -- } --} -- --// TestUpgradeSkipHeights tests if correct skip upgrade heights are identified from the cli args --func TestUpgradeSkipHeights(t *testing.T) { -- cases := []struct { -- args []string -- expectRes []int -- }{{ -- args: []string{}, -- expectRes: nil, -- }, { -- args: []string{"appb", "start"}, -- expectRes: nil, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades"}, -- expectRes: nil, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades", "--abcd"}, -- expectRes: nil, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "--abcd"}, -- expectRes: []int{10}, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "20", "--abcd"}, -- expectRes: []int{10, 20}, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "20", "--abcd", "34"}, -- expectRes: []int{10, 20}, -- }, { -- args: []string{"appb", "start", "--unsafe-skip-upgrades", "10", "as", "20", "--abcd"}, -- expectRes: []int{10, 20}, -- }} -- -- for i := range cases { -- tc := cases[i] -- require := require.New(t) -- h := cosmovisor.UpgradeSkipHeights(tc.args) -- require.Equal(h, tc.expectRes) -- } --} -diff --git a/cosmovisor/scanner.go b/cosmovisor/scanner.go -deleted file mode 100644 -index 7ed696f481..0000000000 ---- a/cosmovisor/scanner.go -+++ /dev/null -@@ -1,166 +0,0 @@ --package cosmovisor -- --import ( -- "encoding/json" -- "errors" -- "fmt" -- "os" -- "path/filepath" -- "strings" -- "time" -- -- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" -- "github.com/rs/zerolog" --) -- --type fileWatcher struct { -- logger *zerolog.Logger -- -- // full path to a watched file -- filename string -- interval time.Duration -- -- currentInfo upgradetypes.Plan -- lastModTime time.Time -- cancel chan bool -- ticker *time.Ticker -- needsUpdate bool -- -- initialized bool --} -- --func newUpgradeFileWatcher(logger *zerolog.Logger, filename string, interval time.Duration) (*fileWatcher, error) { -- if filename == "" { -- return nil, errors.New("filename undefined") -- } -- -- filenameAbs, err := filepath.Abs(filename) -- if err != nil { -- return nil, -- fmt.Errorf("invalid path; %s must be a valid file path: %w", filename, err) -- } -- -- dirname := filepath.Dir(filename) -- info, err := os.Stat(dirname) -- if err != nil || !info.IsDir() { -- return nil, fmt.Errorf("invalid path; %s must be an existing directory: %w", dirname, err) -- } -- -- return &fileWatcher{ -- logger: logger, -- filename: filenameAbs, -- interval: interval, -- currentInfo: upgradetypes.Plan{}, -- lastModTime: time.Time{}, -- cancel: make(chan bool), -- ticker: time.NewTicker(interval), -- needsUpdate: false, -- initialized: false, -- }, nil --} -- --func (fw *fileWatcher) Stop() { -- close(fw.cancel) --} -- --// pools the filesystem to check for new upgrade currentInfo. currentName is the name --// of currently running upgrade. The check is rejected if it finds an upgrade with the same --// name. --func (fw *fileWatcher) MonitorUpdate(currentUpgrade upgradetypes.Plan) <-chan struct{} { -- fw.ticker.Reset(fw.interval) -- done := make(chan struct{}) -- fw.cancel = make(chan bool) -- fw.needsUpdate = false -- -- go func() { -- for { -- select { -- case <-fw.ticker.C: -- if fw.CheckUpdate(currentUpgrade) { -- done <- struct{}{} -- return -- } -- -- case <-fw.cancel: -- return -- } -- } -- }() -- -- return done --} -- --// CheckUpdate reads update plan from file and checks if there is a new update request --// currentName is the name of currently running upgrade. The check is rejected if it finds --// an upgrade with the same name. --func (fw *fileWatcher) CheckUpdate(currentUpgrade upgradetypes.Plan) bool { -- if fw.needsUpdate { -- return true -- } -- -- stat, err := os.Stat(fw.filename) -- if err != nil { -- // file doesn't exists -- return false -- } -- -- if !stat.ModTime().After(fw.lastModTime) { -- return false -- } -- -- info, err := parseUpgradeInfoFile(fw.filename) -- if err != nil { -- fw.logger.Fatal().Err(err).Msg("failed to parse upgrade info file") -- return false -- } -- -- if !fw.initialized { -- // daemon has restarted -- fw.initialized = true -- fw.currentInfo = info -- fw.lastModTime = stat.ModTime() -- -- // Heuristic: Deamon has restarted, so we don't know if we successfully -- // downloaded the upgrade or not. So we try to compare the running upgrade -- // name (read from the cosmovisor file) with the upgrade info. -- if !strings.EqualFold(currentUpgrade.Name, fw.currentInfo.Name) { -- fw.needsUpdate = true -- return true -- } -- } -- -- if info.Height > fw.currentInfo.Height { -- fw.currentInfo = info -- fw.lastModTime = stat.ModTime() -- fw.needsUpdate = true -- return true -- } -- -- return false --} -- --func parseUpgradeInfoFile(filename string) (upgradetypes.Plan, error) { -- var ui upgradetypes.Plan -- -- f, err := os.Open(filename) -- if err != nil { -- return upgradetypes.Plan{}, err -- } -- defer f.Close() -- -- d := json.NewDecoder(f) -- if err := d.Decode(&ui); err != nil { -- return upgradetypes.Plan{}, err -- } -- -- // required values must be set -- if ui.Height <= 0 || ui.Name == "" { -- return upgradetypes.Plan{}, fmt.Errorf("invalid upgrade-info.json content; name and height must be not empty; got: %v", ui) -- } -- -- // Normalize name to prevent operator error in upgrade name case sensitivity -- // errors. -- ui.Name = strings.ToLower(ui.Name) -- -- return ui, err --} -diff --git a/cosmovisor/scanner_test.go b/cosmovisor/scanner_test.go -deleted file mode 100644 -index f45dfafe85..0000000000 ---- a/cosmovisor/scanner_test.go -+++ /dev/null -@@ -1,64 +0,0 @@ --package cosmovisor -- --import ( -- "path/filepath" -- "testing" -- -- "github.com/stretchr/testify/require" -- -- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" --) -- --func TestParseUpgradeInfoFile(t *testing.T) { -- cases := []struct { -- filename string -- expectUpgrade upgradetypes.Plan -- expectErr bool -- }{{ -- filename: "f1-good.json", -- expectUpgrade: upgradetypes.Plan{Name: "upgrade1", Info: "some info", Height: 123}, -- expectErr: false, -- }, { -- filename: "f2-bad-type.json", -- expectUpgrade: upgradetypes.Plan{}, -- expectErr: true, -- }, { -- filename: "f2-bad-type-2.json", -- expectUpgrade: upgradetypes.Plan{}, -- expectErr: true, -- }, { -- filename: "f3-empty.json", -- expectUpgrade: upgradetypes.Plan{}, -- expectErr: true, -- }, { -- filename: "f4-empty-obj.json", -- expectUpgrade: upgradetypes.Plan{}, -- expectErr: true, -- }, { -- filename: "f5-partial-obj-1.json", -- expectUpgrade: upgradetypes.Plan{}, -- expectErr: true, -- }, { -- filename: "f5-partial-obj-2.json", -- expectUpgrade: upgradetypes.Plan{}, -- expectErr: true, -- }, { -- filename: "unknown.json", -- expectUpgrade: upgradetypes.Plan{}, -- expectErr: true, -- }} -- -- for i := range cases { -- tc := cases[i] -- t.Run(tc.filename, func(t *testing.T) { -- require := require.New(t) -- ui, err := parseUpgradeInfoFile(filepath.Join(".", "testdata", "upgrade-files", tc.filename)) -- if tc.expectErr { -- require.Error(err) -- } else { -- require.NoError(err) -- require.Equal(tc.expectUpgrade, ui) -- } -- }) -- } --} -diff --git a/cosmovisor/testdata/download/cosmovisor/genesis/bin/autod b/cosmovisor/testdata/download/cosmovisor/genesis/bin/autod -deleted file mode 100755 -index 89cb77365a..0000000000 ---- a/cosmovisor/testdata/download/cosmovisor/genesis/bin/autod -+++ /dev/null -@@ -1,12 +0,0 @@ --#!/bin/sh -- --echo Genesis autod. Args: $@ --sleep 0.1 --echo 'ERROR: UPGRADE "chain2" NEEDED at height: 49: zip_binary' -- --# create upgrade info --# this info contains directly information about binaries (in chain2->chain3 update we test with info containing a link to the file with an address for the new chain binary) --echo '{"name":"chain2","height":49,"info":"{\"binaries\":{\"linux/amd64\":\"https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/chain2-zip_bin/autod.zip?checksum=sha256:b30cf0b1a3e46ac9587cc4d7b102eb796e39e3e0dfa3f8ca6e163fc1b1e913ca\"}}"}' >$3 -- --sleep 0.1 --echo Never should be printed!!! -diff --git a/cosmovisor/testdata/download/data/.gitkeep b/cosmovisor/testdata/download/data/.gitkeep -deleted file mode 100644 -index e69de29bb2..0000000000 -diff --git a/cosmovisor/testdata/repo/chain2-zip_bin/autod b/cosmovisor/testdata/repo/chain2-zip_bin/autod -deleted file mode 100755 -index 5bc99c5521..0000000000 ---- a/cosmovisor/testdata/repo/chain2-zip_bin/autod -+++ /dev/null -@@ -1,13 +0,0 @@ --#!/bin/sh -- --echo Chain 2 from zipped binary --echo Args: $@ --# note that we just have a url (follow the ref), not a full link --echo 'ERROR: UPGRADE "chain3" NEEDED at height: 936: ref_to_chain3-zip_dir.json module=main' -- --# this update info doesn't contain binaries, instead it is a reference for further download instructions. --# echo '{"name":"chain3","height":936,"info":"{\"binaries\":{\"linux/amd64\":\"https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json\"}}"}' > $3 --echo '{"name":"chain3","height":936,"info":"https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json"}' >$3 -- --sleep 1 --echo 'Do not print' -diff --git a/cosmovisor/testdata/repo/chain2-zip_bin/autod.zip b/cosmovisor/testdata/repo/chain2-zip_bin/autod.zip -deleted file mode 100644 -index 68d33a538c..0000000000 -Binary files a/cosmovisor/testdata/repo/chain2-zip_bin/autod.zip and /dev/null differ -diff --git a/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip b/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip -deleted file mode 100644 -index dffb1aba46..0000000000 -Binary files a/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip and /dev/null differ -diff --git a/cosmovisor/testdata/repo/chain3-zip_dir/bin/autod b/cosmovisor/testdata/repo/chain3-zip_dir/bin/autod -deleted file mode 100755 -index 235c82b630..0000000000 ---- a/cosmovisor/testdata/repo/chain3-zip_dir/bin/autod -+++ /dev/null -@@ -1,4 +0,0 @@ --#!/bin/sh -- --echo Chain 3 from zipped directory --echo Args: $@ -diff --git a/cosmovisor/testdata/repo/raw_binary/autod b/cosmovisor/testdata/repo/raw_binary/autod -deleted file mode 100755 -index 0022b84af2..0000000000 ---- a/cosmovisor/testdata/repo/raw_binary/autod -+++ /dev/null -@@ -1,6 +0,0 @@ --#!/bin/sh -- --echo Chain 2 is live! --echo Args: $@ --sleep 1 --echo Finished successfully -diff --git a/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json b/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json -deleted file mode 100644 -index 7baa216b96..0000000000 ---- a/cosmovisor/testdata/repo/ref_to_chain3-zip_dir.json -+++ /dev/null -@@ -1,5 +0,0 @@ --{ -- "binaries": { -- "linux/amd64": "https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip?checksum=sha256:8951f52a0aea8617de0ae459a20daf704c29d259c425e60d520e363df0f166b4" -- } --} -diff --git a/cosmovisor/testdata/repo/zip_directory/autod.zip b/cosmovisor/testdata/repo/zip_directory/autod.zip -deleted file mode 100644 -index 225cd4672a..0000000000 -Binary files a/cosmovisor/testdata/repo/zip_directory/autod.zip and /dev/null differ -diff --git a/cosmovisor/testdata/upgrade-files/f1-good.json b/cosmovisor/testdata/upgrade-files/f1-good.json -deleted file mode 100644 -index fd64644e18..0000000000 ---- a/cosmovisor/testdata/upgrade-files/f1-good.json -+++ /dev/null -@@ -1 +0,0 @@ --{"name": "upgrade1", "info": "some info", "height": 123} -diff --git a/cosmovisor/testdata/upgrade-files/f2-bad-type-2.json b/cosmovisor/testdata/upgrade-files/f2-bad-type-2.json -deleted file mode 100644 -index 8019e2a0c1..0000000000 ---- a/cosmovisor/testdata/upgrade-files/f2-bad-type-2.json -+++ /dev/null -@@ -1 +0,0 @@ --{"name": "upgrade1", "heigh": "123"} -diff --git a/cosmovisor/testdata/upgrade-files/f2-bad-type.json b/cosmovisor/testdata/upgrade-files/f2-bad-type.json -deleted file mode 100644 -index 4abd0f77c7..0000000000 ---- a/cosmovisor/testdata/upgrade-files/f2-bad-type.json -+++ /dev/null -@@ -1 +0,0 @@ --{"name": "upgrade1", "info": 123, "heigh": 123} -diff --git a/cosmovisor/testdata/upgrade-files/f3-empty.json b/cosmovisor/testdata/upgrade-files/f3-empty.json -deleted file mode 100644 -index 8b13789179..0000000000 ---- a/cosmovisor/testdata/upgrade-files/f3-empty.json -+++ /dev/null -@@ -1 +0,0 @@ -- -diff --git a/cosmovisor/testdata/upgrade-files/f4-empty-obj.json b/cosmovisor/testdata/upgrade-files/f4-empty-obj.json -deleted file mode 100644 -index 0967ef424b..0000000000 ---- a/cosmovisor/testdata/upgrade-files/f4-empty-obj.json -+++ /dev/null -@@ -1 +0,0 @@ --{} -diff --git a/cosmovisor/testdata/upgrade-files/f5-partial-obj-1.json b/cosmovisor/testdata/upgrade-files/f5-partial-obj-1.json -deleted file mode 100644 -index 19aecd9bcd..0000000000 ---- a/cosmovisor/testdata/upgrade-files/f5-partial-obj-1.json -+++ /dev/null -@@ -1 +0,0 @@ --{"name": "upgrade2"} -diff --git a/cosmovisor/testdata/upgrade-files/f5-partial-obj-2.json b/cosmovisor/testdata/upgrade-files/f5-partial-obj-2.json -deleted file mode 100644 -index 0f13ee91be..0000000000 ---- a/cosmovisor/testdata/upgrade-files/f5-partial-obj-2.json -+++ /dev/null -@@ -1 +0,0 @@ --{"height": 1} -diff --git a/cosmovisor/testdata/validate/cosmovisor/genesis/bin/dummyd b/cosmovisor/testdata/validate/cosmovisor/genesis/bin/dummyd -deleted file mode 100755 -index 8d54d60d07..0000000000 ---- a/cosmovisor/testdata/validate/cosmovisor/genesis/bin/dummyd -+++ /dev/null -@@ -1,9 +0,0 @@ --#!/bin/sh -- --echo Genesis $@ --sleep 1 --test -z $4 && exit 1001 --echo 'UPGRADE "chain2" NEEDED at height: 49: {}' --echo '{"name":"chain2","height":49,"info":""}' > $4 --sleep 2 --echo Never should be printed!!! -diff --git a/cosmovisor/testdata/validate/cosmovisor/upgrades/chain2/bin/dummyd b/cosmovisor/testdata/validate/cosmovisor/upgrades/chain2/bin/dummyd -deleted file mode 100755 -index 0022b84af2..0000000000 ---- a/cosmovisor/testdata/validate/cosmovisor/upgrades/chain2/bin/dummyd -+++ /dev/null -@@ -1,6 +0,0 @@ --#!/bin/sh -- --echo Chain 2 is live! --echo Args: $@ --sleep 1 --echo Finished successfully -diff --git a/cosmovisor/testdata/validate/cosmovisor/upgrades/chain3/bin/dummyd b/cosmovisor/testdata/validate/cosmovisor/upgrades/chain3/bin/dummyd -deleted file mode 100755 -index edfb6c403e..0000000000 ---- a/cosmovisor/testdata/validate/cosmovisor/upgrades/chain3/bin/dummyd -+++ /dev/null -@@ -1,6 +0,0 @@ --#!/bin/sh -- --echo Chain 3 finally! --echo Args: $@ --sleep 1 --echo Finished successfully -diff --git a/cosmovisor/testdata/validate/cosmovisor/upgrades/nobin/bin/.keep b/cosmovisor/testdata/validate/cosmovisor/upgrades/nobin/bin/.keep -deleted file mode 100644 -index e69de29bb2..0000000000 -diff --git a/cosmovisor/testdata/validate/cosmovisor/upgrades/noexec/bin/dummyd b/cosmovisor/testdata/validate/cosmovisor/upgrades/noexec/bin/dummyd -deleted file mode 100644 -index 9fa65cddeb..0000000000 ---- a/cosmovisor/testdata/validate/cosmovisor/upgrades/noexec/bin/dummyd -+++ /dev/null -@@ -1,3 +0,0 @@ --#!/bin/sh -- --echo 'exec flag not set' -diff --git a/cosmovisor/testdata/validate/data/.gitkeep b/cosmovisor/testdata/validate/data/.gitkeep -deleted file mode 100644 -index e69de29bb2..0000000000 -diff --git a/cosmovisor/upgrade.go b/cosmovisor/upgrade.go -deleted file mode 100644 -index 9667ffb5ed..0000000000 ---- a/cosmovisor/upgrade.go -+++ /dev/null -@@ -1,171 +0,0 @@ --package cosmovisor -- --import ( -- "encoding/json" -- "errors" -- "fmt" -- "net/url" -- "os" -- "path/filepath" -- "runtime" -- "strings" -- -- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" -- "github.com/hashicorp/go-getter" -- "github.com/otiai10/copy" -- "github.com/rs/zerolog" --) -- --// DoUpgrade will be called after the log message has been parsed and the process has terminated. --// We can now make any changes to the underlying directory without interference and leave it --// in a state, so we can make a proper restart --func DoUpgrade(logger *zerolog.Logger, cfg *Config, info upgradetypes.Plan) error { -- // Simplest case is to switch the link -- err := EnsureBinary(cfg.UpgradeBin(info.Name)) -- if err == nil { -- // we have the binary - do it -- return cfg.SetCurrentUpgrade(info) -- } -- // if auto-download is disabled, we fail -- if !cfg.AllowDownloadBinaries { -- return fmt.Errorf("binary not present, downloading disabled: %w", err) -- } -- -- // if the dir is there already, don't download either -- if _, err := os.Stat(cfg.UpgradeDir(info.Name)); !os.IsNotExist(err) { -- return errors.New("upgrade dir already exists, won't overwrite") -- } -- -- // If not there, then we try to download it... maybe -- logger.Info().Msg("no upgrade binary found, beginning to download it") -- if err := DownloadBinary(cfg, info); err != nil { -- return fmt.Errorf("cannot download binary. %w", err) -- } -- logger.Info().Msg("downloading binary complete") -- -- // and then set the binary again -- if err := EnsureBinary(cfg.UpgradeBin(info.Name)); err != nil { -- return fmt.Errorf("downloaded binary doesn't check out: %w", err) -- } -- -- return cfg.SetCurrentUpgrade(info) --} -- --// DownloadBinary will grab the binary and place it in the proper directory --func DownloadBinary(cfg *Config, info upgradetypes.Plan) error { -- url, err := GetDownloadURL(info) -- if err != nil { -- return err -- } -- -- // download into the bin dir (works for one file) -- binPath := cfg.UpgradeBin(info.Name) -- err = getter.GetFile(binPath, url) -- -- // if this fails, let's see if it is a zipped directory -- if err != nil { -- dirPath := cfg.UpgradeDir(info.Name) -- err = getter.Get(dirPath, url) -- if err != nil { -- return err -- } -- err = EnsureBinary(binPath) -- // copy binary to binPath from dirPath if zipped directory don't contain bin directory to wrap the binary -- if err != nil { -- err = copy.Copy(filepath.Join(dirPath, cfg.Name), binPath) -- if err != nil { -- return err -- } -- } -- } -- -- // if it is successful, let's ensure the binary is executable -- return MarkExecutable(binPath) --} -- --// MarkExecutable will try to set the executable bits if not already set --// Fails if file doesn't exist or we cannot set those bits --func MarkExecutable(path string) error { -- info, err := os.Stat(path) -- if err != nil { -- return fmt.Errorf("stating binary: %w", err) -- } -- // end early if world exec already set -- if info.Mode()&0o001 == 1 { -- return nil -- } -- // now try to set all exec bits -- newMode := info.Mode().Perm() | 0o111 -- return os.Chmod(path, newMode) --} -- --// UpgradeConfig is expected format for the info field to allow auto-download --type UpgradeConfig struct { -- Binaries map[string]string `json:"binaries"` --} -- --// GetDownloadURL will check if there is an arch-dependent binary specified in Info --func GetDownloadURL(info upgradetypes.Plan) (string, error) { -- doc := strings.TrimSpace(info.Info) -- // if this is a url, then we download that and try to get a new doc with the real info -- if _, err := url.Parse(doc); err == nil { -- tmpDir, err := os.MkdirTemp("", "upgrade-manager-reference") -- if err != nil { -- return "", fmt.Errorf("create tempdir for reference file: %w", err) -- } -- defer os.RemoveAll(tmpDir) -- -- refPath := filepath.Join(tmpDir, "ref") -- if err := getter.GetFile(refPath, doc); err != nil { -- return "", fmt.Errorf("downloading reference link %s: %w", doc, err) -- } -- -- refBytes, err := os.ReadFile(refPath) -- if err != nil { -- return "", fmt.Errorf("reading downloaded reference: %w", err) -- } -- // if download worked properly, then we use this new file as the binary map to parse -- doc = string(refBytes) -- } -- -- // check if it is the upgrade config -- var config UpgradeConfig -- -- if err := json.Unmarshal([]byte(doc), &config); err == nil { -- url, ok := config.Binaries[OSArch()] -- if !ok { -- url, ok = config.Binaries["any"] -- } -- if !ok { -- return "", fmt.Errorf("cannot find binary for os/arch: neither %s, nor any", OSArch()) -- } -- -- return url, nil -- } -- -- return "", errors.New("upgrade info doesn't contain binary map") --} -- --func OSArch() string { -- return fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH) --} -- --// EnsureBinary ensures the file exists and is executable, or returns an error --func EnsureBinary(path string) error { -- info, err := os.Stat(path) -- if err != nil { -- return fmt.Errorf("cannot stat dir %s: %w", path, err) -- } -- -- if !info.Mode().IsRegular() { -- return fmt.Errorf("%s is not a regular file", info.Name()) -- } -- -- // this checks if the world-executable bit is set (we cannot check owner easily) -- exec := info.Mode().Perm() & 0o001 -- if exec == 0 { -- return fmt.Errorf("%s is not world executable", info.Name()) -- } -- -- return nil --} -diff --git a/cosmovisor/upgrade_test.go b/cosmovisor/upgrade_test.go -deleted file mode 100644 -index 44a611222d..0000000000 ---- a/cosmovisor/upgrade_test.go -+++ /dev/null -@@ -1,300 +0,0 @@ --//go:build linux --// +build linux -- --package cosmovisor_test -- --import ( -- "errors" -- "fmt" -- "net" -- "os" -- "path/filepath" -- "strings" -- "testing" -- -- "github.com/otiai10/copy" -- -- "github.com/stretchr/testify/require" -- "github.com/stretchr/testify/suite" -- -- "github.com/cosmos/cosmos-sdk/cosmovisor" -- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" --) -- --type upgradeTestSuite struct { -- suite.Suite --} -- --func TestUpgradeTestSuite(t *testing.T) { -- suite.Run(t, new(upgradeTestSuite)) --} -- --func (s *upgradeTestSuite) TestCurrentBin() { -- home := copyTestData(s.T(), "validate") -- cfg := cosmovisor.Config{Home: home, Name: "dummyd"} -- -- currentBin, err := cfg.CurrentBin() -- s.Require().NoError(err) -- -- s.Require().Equal(cfg.GenesisBin(), currentBin) -- -- // ensure we cannot set this to an invalid value -- for _, name := range []string{"missing", "nobin", "noexec"} { -- s.Require().Error(cfg.SetCurrentUpgrade(upgradetypes.Plan{Name: name}), name) -- -- currentBin, err := cfg.CurrentBin() -- s.Require().NoError(err) -- -- s.Require().Equal(cfg.GenesisBin(), currentBin, name) -- } -- -- // try a few times to make sure this can be reproduced -- for _, name := range []string{"chain2", "chain3", "chain2"} { -- // now set it to a valid upgrade and make sure CurrentBin is now set properly -- err = cfg.SetCurrentUpgrade(upgradetypes.Plan{Name: name}) -- s.Require().NoError(err) -- // we should see current point to the new upgrade dir -- currentBin, err := cfg.CurrentBin() -- s.Require().NoError(err) -- -- s.Require().Equal(cfg.UpgradeBin(name), currentBin) -- } --} -- --func (s *upgradeTestSuite) TestCurrentAlwaysSymlinkToDirectory() { -- home := copyTestData(s.T(), "validate") -- cfg := cosmovisor.Config{Home: home, Name: "dummyd"} -- -- currentBin, err := cfg.CurrentBin() -- s.Require().NoError(err) -- s.Require().Equal(cfg.GenesisBin(), currentBin) -- s.assertCurrentLink(cfg, "genesis") -- -- err = cfg.SetCurrentUpgrade(upgradetypes.Plan{Name: "chain2"}) -- s.Require().NoError(err) -- currentBin, err = cfg.CurrentBin() -- s.Require().NoError(err) -- s.Require().Equal(cfg.UpgradeBin("chain2"), currentBin) -- s.assertCurrentLink(cfg, filepath.Join("upgrades", "chain2")) --} -- --func (s *upgradeTestSuite) assertCurrentLink(cfg cosmovisor.Config, target string) { -- link := filepath.Join(cfg.Root(), "current") -- // ensure this is a symlink -- info, err := os.Lstat(link) -- s.Require().NoError(err) -- s.Require().Equal(os.ModeSymlink, info.Mode()&os.ModeSymlink) -- -- dest, err := os.Readlink(link) -- s.Require().NoError(err) -- expected := filepath.Join(cfg.Root(), target) -- s.Require().Equal(expected, dest) --} -- --// TODO: test with download (and test all download functions) --func (s *upgradeTestSuite) TestDoUpgradeNoDownloadUrl() { -- home := copyTestData(s.T(), "validate") -- cfg := &cosmovisor.Config{Home: home, Name: "dummyd", AllowDownloadBinaries: true} -- logger := cosmovisor.NewLogger() -- -- currentBin, err := cfg.CurrentBin() -- s.Require().NoError(err) -- -- s.Require().Equal(cfg.GenesisBin(), currentBin) -- -- // do upgrade ignores bad files -- for _, name := range []string{"missing", "nobin", "noexec"} { -- info := upgradetypes.Plan{Name: name} -- err = cosmovisor.DoUpgrade(logger, cfg, info) -- s.Require().Error(err, name) -- currentBin, err := cfg.CurrentBin() -- s.Require().NoError(err) -- s.Require().Equal(cfg.GenesisBin(), currentBin, name) -- } -- -- // make sure it updates a few times -- for _, upgrade := range []string{"chain2", "chain3"} { -- // now set it to a valid upgrade and make sure CurrentBin is now set properly -- info := upgradetypes.Plan{Name: upgrade} -- err = cosmovisor.DoUpgrade(logger, cfg, info) -- s.Require().NoError(err) -- // we should see current point to the new upgrade dir -- upgradeBin := cfg.UpgradeBin(upgrade) -- currentBin, err := cfg.CurrentBin() -- s.Require().NoError(err) -- -- s.Require().Equal(upgradeBin, currentBin) -- } --} -- --func (s *upgradeTestSuite) TestOsArch() { -- // all download tests will fail if we are not on linux... -- s.Require().Equal("linux/amd64", cosmovisor.OSArch()) --} -- --func (s *upgradeTestSuite) TestGetDownloadURL() { -- // all download tests will fail if we are not on linux... -- ref, err := filepath.Abs(filepath.FromSlash("./testdata/repo/ref_to_chain3-zip_dir.json")) -- s.Require().NoError(err) -- badref, err := filepath.Abs(filepath.FromSlash("./testdata/repo/chain2-zip_bin/autod.zip")) // "./testdata/repo/zip_binary/autod.zip")) -- s.Require().NoError(err) -- -- cases := map[string]struct { -- info string -- url string -- err interface{} -- -- // If err == nil, the test must not report an error. -- // If err is a string, the test must report an error whose string has err -- // as a substring. -- // If err is a func(suite.Suite, error), it is called to check the error -- // value. -- }{ -- "missing": { -- err: "downloading reference link : invalid source string:", -- }, -- "follow reference": { -- info: ref, -- url: "https://github.com/cosmos/cosmos-sdk/raw/main/cosmovisor/testdata/repo/chain3-zip_dir/autod.zip?checksum=sha256:8951f52a0aea8617de0ae459a20daf704c29d259c425e60d520e363df0f166b4", -- }, -- "malformated reference target": { -- info: badref, -- err: "upgrade info doesn't contain binary map", -- }, -- "missing link": { -- info: "https://no.such.domain/exists.txt", -- err: func(s suite.Suite, err error) { -- var dns *net.DNSError -- s.Require().True(errors.As(err, &dns), "result is not a DNSError") -- s.Require().Equal("no.such.domain", dns.Name) -- s.Require().Equal(true, dns.IsNotFound) -- }, -- }, -- "proper binary": { -- info: `{"binaries": {"linux/amd64": "https://foo.bar/", "windows/amd64": "https://something.else"}}`, -- url: "https://foo.bar/", -- }, -- "any architecture not used": { -- info: `{"binaries": {"linux/amd64": "https://foo.bar/", "*": "https://something.else"}}`, -- url: "https://foo.bar/", -- }, -- "any architecture used": { -- info: `{"binaries": {"linux/arm": "https://foo.bar/arm-only", "any": "https://foo.bar/portable"}}`, -- url: "https://foo.bar/portable", -- }, -- "missing binary": { -- info: `{"binaries": {"linux/arm": "https://foo.bar/"}}`, -- err: "cannot find binary for", -- }, -- } -- -- for name, tc := range cases { -- s.Run(name, func() { -- url, err := cosmovisor.GetDownloadURL(upgradetypes.Plan{Info: tc.info}) -- switch e := tc.err.(type) { -- case nil: -- s.Require().NoError(err) -- s.Require().Equal(tc.url, url) -- -- case string: -- s.Require().Error(err) -- s.Require().Contains(err.Error(), tc.err) -- -- case func(suite.Suite, error): -- e(s.Suite, err) -- } -- }) -- } --} -- --func (s *upgradeTestSuite) TestDownloadBinary() { -- cases := map[string]struct { -- url string -- canDownload bool -- validBinary bool -- }{ -- "get raw binary": { -- url: "./testdata/repo/raw_binary/autod", -- canDownload: true, -- validBinary: true, -- }, -- "get raw binary with checksum": { -- // sha256sum ./testdata/repo/raw_binary/autod -- url: "./testdata/repo/raw_binary/autod?checksum=sha256:e6bc7851600a2a9917f7bf88eb7bdee1ec162c671101485690b4deb089077b0d", -- canDownload: true, -- validBinary: true, -- }, -- "get raw binary with invalid checksum": { -- url: "./testdata/repo/raw_binary/autod?checksum=sha256:73e2bd6cbb99261733caf137015d5cc58e3f96248d8b01da68be8564989dd906", -- canDownload: false, -- }, -- "get zipped directory": { -- url: "./testdata/repo/chain3-zip_dir/autod.zip", -- canDownload: true, -- validBinary: true, -- }, -- "get zipped directory with valid checksum": { -- // sha256sum ./testdata/repo/chain3-zip_dir/autod.zip -- url: "./testdata/repo/chain3-zip_dir/autod.zip?checksum=sha256:8951f52a0aea8617de0ae459a20daf704c29d259c425e60d520e363df0f166b4", -- canDownload: true, -- validBinary: true, -- }, -- "get zipped directory with invalid checksum": { -- url: "./testdata/repo/chain3-zip_dir/autod.zip?checksum=sha256:73e2bd6cbb99261733caf137015d5cc58e3f96248d8b01da68be8564989dd906", -- canDownload: false, -- }, -- "invalid url": { -- url: "./testdata/repo/bad_dir/autod", -- canDownload: false, -- }, -- } -- -- for label, tc := range cases { -- s.Run(label, func() { -- var err error -- // make temp dir -- home := copyTestData(s.T(), "download") -- -- cfg := &cosmovisor.Config{ -- Home: home, -- Name: "autod", -- AllowDownloadBinaries: true, -- } -- -- url := tc.url -- if strings.HasPrefix(url, "./") { -- url, err = filepath.Abs(url) -- s.Require().NoError(err) -- } -- -- const upgrade = "amazonas" -- info := upgradetypes.Plan{ -- Name: upgrade, -- Info: fmt.Sprintf(`{"binaries":{"%s": "%s"}}`, cosmovisor.OSArch(), url), -- } -- -- err = cosmovisor.DownloadBinary(cfg, info) -- if !tc.canDownload { -- s.Require().Error(err) -- } else { -- s.Require().NoError(err) -- } -- -- err = cosmovisor.EnsureBinary(cfg.UpgradeBin(upgrade)) -- if tc.validBinary { -- s.Require().NoError(err) -- } -- }) -- } --} -- --// copyTestData will make a tempdir and then --// "cp -r" a subdirectory under testdata there --// returns the directory (which can now be used as Config.Home) and modified safely --func copyTestData(t *testing.T, subdir string) string { -- t.Helper() -- tmpdir := t.TempDir() -- require.NoError(t, copy.Copy(filepath.Join("testdata", subdir), tmpdir)) -- -- return tmpdir --} -diff --git a/crypto/codec/proto.go b/crypto/codec/proto.go -index 1340dab03d..45cd5b4c35 100644 ---- a/crypto/codec/proto.go -+++ b/crypto/codec/proto.go -@@ -20,6 +20,6 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { - var priv *cryptotypes.PrivKey - registry.RegisterInterface("cosmos.crypto.PrivKey", priv) - registry.RegisterImplementations(priv, &secp256k1.PrivKey{}) -- registry.RegisterImplementations(priv, &ed25519.PrivKey{}) //nolint -+ registry.RegisterImplementations(priv, &ed25519.PrivKey{}) - secp256r1.RegisterInterfaces(registry) - } -diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go -index 8d5c707f1a..58daefb152 100644 ---- a/crypto/keyring/keyring.go -+++ b/crypto/keyring/keyring.go -@@ -586,7 +586,7 @@ func SignWithLedger(k *Record, msg []byte) (sig []byte, pub types.PubKey, err er - return - } - -- sig, err = priv.Sign(msg) -+ sig, err = priv.SignLedgerAminoJSON(msg) - if err != nil { - return nil, nil, err - } -diff --git a/crypto/ledger/ledger_mock.go b/crypto/ledger/ledger_mock.go -index 21e18cc6c9..60d6471cef 100644 ---- a/crypto/ledger/ledger_mock.go -+++ b/crypto/ledger/ledger_mock.go -@@ -84,7 +84,7 @@ func (mock LedgerSECP256K1Mock) GetAddressPubKeySECP256K1(derivationPath []uint3 - return pk, addr, err - } - --func (mock LedgerSECP256K1Mock) SignSECP256K1(derivationPath []uint32, message []byte) ([]byte, error) { -+func (mock LedgerSECP256K1Mock) SignSECP256K1(derivationPath []uint32, message []byte, p2 byte) ([]byte, error) { - path := hd.NewParams(derivationPath[0], derivationPath[1], derivationPath[2], derivationPath[3] != 0, derivationPath[4]) - seed, err := bip39.NewSeedWithErrorChecking(testdata.TestMnemonic, "") - if err != nil { -diff --git a/crypto/ledger/ledger_secp256k1.go b/crypto/ledger/ledger_secp256k1.go -index 29f50ad4e2..fac4e17166 100644 ---- a/crypto/ledger/ledger_secp256k1.go -+++ b/crypto/ledger/ledger_secp256k1.go -@@ -32,7 +32,10 @@ type ( - // Returns a compressed pubkey and bech32 address (requires user confirmation) - GetAddressPubKeySECP256K1([]uint32, string) ([]byte, string, error) - // Signs a message (requires user confirmation) -- SignSECP256K1([]uint32, []byte) ([]byte, error) -+ // The last byte denotes the SIGN_MODE to be used by Ledger: 0 for -+ // LEGACY_AMINO_JSON, 1 for TEXTUAL. It corresponds to the P2 value -+ // in https://github.com/cosmos/ledger-cosmos/blob/main/docs/APDUSPEC.md -+ SignSECP256K1([]uint32, []byte, byte) ([]byte, error) - } - - // PrivKeyLedgerSecp256k1 implements PrivKey, calling the ledger nano we -@@ -51,7 +54,7 @@ type ( - // This function is marked as unsafe as it will retrieve a pubkey without user verification. - // It can only be used to verify a pubkey but never to create new accounts/keys. In that case, - // please refer to NewPrivKeySecp256k1 --func NewPrivKeySecp256k1Unsafe(path hd.BIP44Params) (types.LedgerPrivKey, error) { -+func NewPrivKeySecp256k1Unsafe(path hd.BIP44Params) (types.LedgerPrivKeyAminoJSON, error) { - device, err := getDevice() - if err != nil { - return nil, err -@@ -88,7 +91,8 @@ func (pkl PrivKeyLedgerSecp256k1) PubKey() types.PubKey { - return pkl.CachedPubKey - } - --// Sign returns a secp256k1 signature for the corresponding message -+// Sign returns a secp256k1 signature for the corresponding message using -+// SIGN_MODE_TEXTUAL. - func (pkl PrivKeyLedgerSecp256k1) Sign(message []byte) ([]byte, error) { - device, err := getDevice() - if err != nil { -@@ -96,7 +100,19 @@ func (pkl PrivKeyLedgerSecp256k1) Sign(message []byte) ([]byte, error) { - } - defer warnIfErrors(device.Close) - -- return sign(device, pkl, message) -+ return sign(device, pkl, message, 1) -+} -+ -+// SignLedgerAminoJSON returns a secp256k1 signature for the corresponding message using -+// SIGN_MODE_LEGACY_AMINO_JSON. -+func (pkl PrivKeyLedgerSecp256k1) SignLedgerAminoJSON(message []byte) ([]byte, error) { -+ device, err := getDevice() -+ if err != nil { -+ return nil, err -+ } -+ defer warnIfErrors(device.Close) -+ -+ return sign(device, pkl, message, 0) - } - - // ShowAddress triggers a ledger device to show the corresponding address. -@@ -228,13 +244,15 @@ func validateKey(device SECP256K1, pkl PrivKeyLedgerSecp256k1) error { - // Communication is checked on NewPrivKeyLedger and PrivKeyFromBytes, returning - // an error, so this should only trigger if the private key is held in memory - // for a while before use. --func sign(device SECP256K1, pkl PrivKeyLedgerSecp256k1, msg []byte) ([]byte, error) { -+// -+// Last byte P2 is 0 for LEGACY_AMINO_JSON, and 1 for TEXTUAL. -+func sign(device SECP256K1, pkl PrivKeyLedgerSecp256k1, msg []byte, p2 byte) ([]byte, error) { - err := validateKey(device, pkl) - if err != nil { - return nil, err - } - -- sig, err := device.SignSECP256K1(pkl.Path.DerivationPath(), msg) -+ sig, err := device.SignSECP256K1(pkl.Path.DerivationPath(), msg, p2) - if err != nil { - return nil, err - } -diff --git a/crypto/types/types.go b/crypto/types/types.go -index eccdba7381..2969007765 100644 ---- a/crypto/types/types.go -+++ b/crypto/types/types.go -@@ -29,6 +29,17 @@ type LedgerPrivKey interface { - Type() string - } - -+// LedgerPrivKeyAminoJSON is a Ledger PrivKey type that supports signing with -+// SIGN_MODE_LEGACY_AMINO_JSON. It is added as a non-breaking change, instead of directly -+// on the LedgerPrivKey interface (whose Sign method will sign with TEXTUAL), -+// and will be deprecated/removed once LEGACY_AMINO_JSON is removed. -+type LedgerPrivKeyAminoJSON interface { -+ LedgerPrivKey -+ // SignLedgerAminoJSON signs a messages on the Ledger device using -+ // SIGN_MODE_LEGACY_AMINO_JSON. -+ SignLedgerAminoJSON(msg []byte) ([]byte, error) -+} -+ - // PrivKey defines a private key and extends proto.Message. For now, it extends - // LedgerPrivKey (see godoc for LedgerPrivKey). Ultimately, we should remove - // LedgerPrivKey and add its methods here directly. -diff --git a/docs/post.sh b/docs/post.sh -index af7c9a0fb0..2662dd1a31 100755 ---- a/docs/post.sh -+++ b/docs/post.sh -@@ -1,4 +1,3 @@ - #!/usr/bin/env bash - - rm -rf modules --rm -rf run-node/cosmovisor.md -diff --git a/docs/pre.sh b/docs/pre.sh -index 495fd912ef..643babe6c4 100755 ---- a/docs/pre.sh -+++ b/docs/pre.sh -@@ -11,4 +11,3 @@ done - - cat ../x/README.md | sed 's/\.\/x/\/modules/g' | sed 's/spec\/README.md//g' | sed 's/\.\.\/docs\/building-modules\/README\.md/\/building-modules\/intro\.html/g' > ./modules/README.md - --cp ../cosmovisor/README.md ./run-node/cosmovisor.md -diff --git a/go.mod b/go.mod -index 582d644db1..54da8ed00d 100644 ---- a/go.mod -+++ b/go.mod -@@ -18,7 +18,7 @@ require ( - github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1 - github.com/cosmos/go-bip39 v1.0.0 - github.com/cosmos/iavl v0.19.6 -- github.com/cosmos/ledger-cosmos-go v0.12.2 -+ github.com/cosmos/ledger-cosmos-go v0.13.2 - github.com/gogo/gateway v1.1.0 - github.com/gogo/protobuf v1.3.2 - github.com/golang/mock v1.6.0 -@@ -48,24 +48,24 @@ require ( - github.com/spf13/viper v1.13.0 - github.com/stretchr/testify v1.8.2 - github.com/tendermint/go-amino v0.16.0 -- github.com/tendermint/tendermint v0.34.29 -+ github.com/tendermint/tendermint v0.34.28 - github.com/tendermint/tm-db v0.6.7 - github.com/tidwall/btree v1.5.0 -- golang.org/x/crypto v0.7.0 -+ golang.org/x/crypto v0.14.0 - golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 -- google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 -- google.golang.org/grpc v1.54.0 -- google.golang.org/protobuf v1.30.0 -+ google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 -+ google.golang.org/grpc v1.58.3 -+ google.golang.org/protobuf v1.31.0 - pgregory.net/rapid v0.4.7 - sigs.k8s.io/yaml v1.3.0 - ) - - require ( -- cloud.google.com/go v0.110.0 // indirect -- cloud.google.com/go/compute v1.18.0 // indirect -+ cloud.google.com/go v0.110.8 // indirect -+ cloud.google.com/go/compute v1.23.0 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect -- cloud.google.com/go/iam v0.12.0 // indirect -- cloud.google.com/go/storage v1.28.1 // indirect -+ cloud.google.com/go/iam v1.1.2 // indirect -+ cloud.google.com/go/storage v1.30.1 // indirect - filippo.io/edwards25519 v1.0.0-rc.1 // indirect - github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect -@@ -73,6 +73,7 @@ require ( - github.com/aws/aws-sdk-go v1.40.45 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect -+ github.com/celestiaorg/nmt v0.19.0 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect -@@ -82,6 +83,7 @@ require ( - github.com/danieljoos/wincred v1.1.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect -+ github.com/deepmap/oapi-codegen v1.8.2 // 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.0 // indirect -@@ -93,15 +95,18 @@ require ( - github.com/go-kit/kit v0.12.0 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect -+ github.com/go-logr/logr v1.2.4 // indirect -+ github.com/go-logr/stdr v1.2.2 // indirect - github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect -- github.com/golang/glog v1.0.0 // indirect -+ github.com/golang/glog v1.1.0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect - github.com/google/orderedcode v0.0.1 // indirect -- github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect -- github.com/googleapis/gax-go/v2 v2.7.0 // indirect -+ github.com/google/s2a-go v0.1.4 // indirect -+ github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect -+ github.com/googleapis/gax-go/v2 v2.12.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect - github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/gtank/merlin v0.1.1 // indirect -@@ -112,6 +117,8 @@ require ( - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect -+ github.com/influxdata/influxdb-client-go/v2 v2.12.2 // indirect -+ github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.16.0 // indirect -@@ -132,6 +139,9 @@ require ( - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect -+ github.com/pyroscope-io/client v0.7.2 // indirect -+ github.com/pyroscope-io/godeltaprof v0.1.2 // indirect -+ github.com/pyroscope-io/otel-profiling-go v0.4.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rogpeppe/go-internal v1.9.0 // indirect - github.com/rs/cors v1.8.2 // indirect -@@ -142,18 +152,25 @@ require ( - github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect - github.com/ulikunitz/xz v0.5.8 // indirect -- github.com/zondax/hid v0.9.1 // indirect -- github.com/zondax/ledger-go v0.14.1 // indirect -+ github.com/zondax/hid v0.9.2 // indirect -+ github.com/zondax/ledger-go v0.14.3 // indirect - go.etcd.io/bbolt v1.3.6 // indirect - go.opencensus.io v0.24.0 // indirect -- golang.org/x/net v0.9.0 // indirect -- golang.org/x/oauth2 v0.5.0 // indirect -- golang.org/x/sys v0.7.0 // indirect -- golang.org/x/term v0.7.0 // indirect -- golang.org/x/text v0.9.0 // indirect -+ go.opentelemetry.io/otel v1.15.1 // indirect -+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1 // indirect -+ go.opentelemetry.io/otel/sdk v1.15.1 // indirect -+ go.opentelemetry.io/otel/trace v1.15.1 // indirect -+ golang.org/x/net v0.17.0 // indirect -+ golang.org/x/oauth2 v0.10.0 // indirect -+ golang.org/x/sync v0.3.0 // indirect -+ golang.org/x/sys v0.13.0 // indirect -+ golang.org/x/term v0.13.0 // indirect -+ golang.org/x/text v0.13.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect -- google.golang.org/api v0.110.0 // indirect -+ google.golang.org/api v0.128.0 // indirect - google.golang.org/appengine v1.6.7 // indirect -+ google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 // indirect -+ google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c // indirect - gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -@@ -174,7 +191,7 @@ replace ( - // replace broken goleveldb. - github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - // use cometbft -- github.com/tendermint/tendermint => github.com/cometbft/cometbft v0.34.29 -+ github.com/tendermint/tendermint => github.com/celestiaorg/celestia-core v1.26.2-tm-v0.34.28 - ) - - retract ( -diff --git a/go.sum b/go.sum -index cd25d3acde..d194ad4564 100644 ---- a/go.sum -+++ b/go.sum -@@ -19,8 +19,8 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb - 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.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= --cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= -+cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= -+cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= - 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= -@@ -28,15 +28,14 @@ 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/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= --cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= --cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -+cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= -+cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= - 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/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/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= --cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= --cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= -+cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= -+cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= - 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= -@@ -47,8 +46,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl - 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.28.1 h1:F5QDG5ChchaAVQhINh24U99OWHURqrW8OmQcGKXcbgI= --cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -+cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= -+cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= - collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= - cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= - cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -@@ -163,6 +162,10 @@ github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA - github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= - github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= - github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -+github.com/celestiaorg/celestia-core v1.26.2-tm-v0.34.28 h1:2efXQaggLFknz0wQufr4nUEz5G7pSVHS1j7NuJDsvII= -+github.com/celestiaorg/celestia-core v1.26.2-tm-v0.34.28/go.mod h1:++dNzzzjP9jYg+NopN9G8sg1HEZ58lv1TPtg71evZ0E= -+github.com/celestiaorg/nmt v0.19.0 h1:9VXFeI/gt+q8h5HeCE0RjXJhOxsFzxJUjHrkvF9CMYE= -+github.com/celestiaorg/nmt v0.19.0/go.mod h1:Oz15Ub6YPez9uJV0heoU4WpFctxazuIhKyUtaYNio7E= - 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= -@@ -193,6 +196,10 @@ github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3h - 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-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-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= -@@ -200,8 +207,6 @@ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE - github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= - github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= - github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= --jackfan.us.kg/cometbft/cometbft v0.34.29 h1:Q4FqMevP9du2pOgryZJHpDV2eA6jg/kMYxBj9ZTY6VQ= --jackfan.us.kg/cometbft/cometbft v0.34.29/go.mod h1:L9shMfbkZ8B+7JlwANEr+NZbBcn+hBpwdbeYvA5rLCw= - github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= - github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= - github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= -@@ -232,8 +237,8 @@ github.com/cosmos/iavl v0.19.6 h1:XY78yEeNPrEYyNCKlqr9chrwoeSDJ0bV2VjocTk//OU= - github.com/cosmos/iavl v0.19.6/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= - github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= - github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= --jackfan.us.kg/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= --jackfan.us.kg/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= -+github.com/cosmos/ledger-cosmos-go v0.13.2 h1:aY0KZSmUwNKbBm9OvbIjvf7Ozz2YzzpAbgvN2C8x2T0= -+github.com/cosmos/ledger-cosmos-go v0.13.2/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.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -@@ -257,6 +262,7 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1 - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= - github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= - github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -+github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= - github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= - 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= -@@ -295,6 +301,7 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m - 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.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= - github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= - github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= - github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -@@ -340,6 +347,11 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V - github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= - github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= - github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -+github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -+github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -+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.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= - github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= - github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -@@ -374,8 +386,8 @@ github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w - github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= - github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= - github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= --jackfan.us.kg/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= --jackfan.us.kg/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -+github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -+github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= - github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= - github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= - github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -@@ -407,6 +419,7 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD - github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= - github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= - github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= - github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= - github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= - github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -@@ -431,12 +444,13 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ - 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.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= - github.com/google/go-cmp v0.5.9/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= --jackfan.us.kg/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= - github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -+github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= - github.com/google/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= -@@ -455,18 +469,20 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe - 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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -+github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= -+github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= - github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= - github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= - github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= - github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= - github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= - github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= --jackfan.us.kg/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= --jackfan.us.kg/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -+github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+OkstIrNiMjGpEIyhx8f6W7s4= -+github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= - 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= --jackfan.us.kg/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= --jackfan.us.kg/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -+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/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/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -@@ -556,10 +572,13 @@ github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf - github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= - github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= - github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -+github.com/influxdata/influxdb-client-go/v2 v2.12.2 h1:uYABKdrEKlYm+++qfKdbgaHKBPmoWR5wpbmj6MBB/2g= -+github.com/influxdata/influxdb-client-go/v2 v2.12.2/go.mod h1:YteV91FiQxRdccyJ2cHvj2f/5sq4y4Njqu1fQzsQCOU= - github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= - github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= - github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= - github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -+github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= - github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= - github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= - github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -@@ -825,6 +844,12 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O - github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= - github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= - github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -+github.com/pyroscope-io/client v0.7.2 h1:OX2qdUQsS8RSkn/3C8isD7f/P0YiZQlRbAlecAaj/R8= -+github.com/pyroscope-io/client v0.7.2/go.mod h1:FEocnjn+Ngzxy6EtU9ZxXWRvQ0+pffkrBxHLnPpxwi8= -+github.com/pyroscope-io/godeltaprof v0.1.2 h1:MdlEmYELd5w+lvIzmZvXGNMVzW2Qc9jDMuJaPOR75g4= -+github.com/pyroscope-io/godeltaprof v0.1.2/go.mod h1:psMITXp90+8pFenXkKIpNhrfmI9saQnPbba27VIaiQE= -+github.com/pyroscope-io/otel-profiling-go v0.4.0 h1:Hk/rbUqOWoByoWy1tt4r5BX5xoKAvs5drr0511Ki8ic= -+github.com/pyroscope-io/otel-profiling-go v0.4.0/go.mod h1:MXaofiWU7PgLP7eISUZJYVO4Z8WYMqpkYgeP4XrPLyg= - github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= - github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= - github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -@@ -930,8 +955,11 @@ github.com/tidwall/btree v1.5.0 h1:iV0yVY/frd7r6qGBXfEYs7DH0gTDgrKTrDjS7xt/IyQ= - github.com/tidwall/btree v1.5.0/go.mod h1:LGm8L/DZjPLmeWGjv5kFrY8dL4uVhMmzmmLYmsObdKE= - github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= - github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -+github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= -+github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= - github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= - github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -+github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= - github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= - github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= - github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= -@@ -968,10 +996,10 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de - 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= --jackfan.us.kg/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= --jackfan.us.kg/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= --jackfan.us.kg/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= --jackfan.us.kg/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -+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.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= - go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -@@ -986,6 +1014,17 @@ 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.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= - go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -+go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4= -+go.opentelemetry.io/otel v1.15.1 h1:3Iwq3lfRByPaws0f6bU3naAqOR1n5IeDWd9390kWHa8= -+go.opentelemetry.io/otel v1.15.1/go.mod h1:mHHGEHVDLal6YrKMmk9LqC4a3sF5g+fHfrttQIB1NTc= -+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1 h1:2PunuO5SbkN5MhCbuHCd3tC6qrcaj+uDAkX/qBU5BAs= -+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1/go.mod h1:q8+Tha+5LThjeSU8BW93uUC5w5/+DnYHMKBMpRCsui0= -+go.opentelemetry.io/otel/sdk v1.15.1 h1:5FKR+skgpzvhPQHIEfcwMYjCBr14LWzs3uSqKiQzETI= -+go.opentelemetry.io/otel/sdk v1.15.1/go.mod h1:8rVtxQfrbmbHKfqzpQkT5EzZMcbMBwTzNAggbEAM0KA= -+go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc= -+go.opentelemetry.io/otel/trace v1.15.1 h1:uXLo6iHJEzDfrNC0L0mNjItIp06SyaBQxu5t3xMlngY= -+go.opentelemetry.io/otel/trace v1.15.1/go.mod h1:IWdQG/5N1x7f6YUlmdLeJvH9yxtuJAfc4VW5Agv9r/8= -+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= -@@ -1020,9 +1059,10 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm - golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= - golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= - golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -+golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= - golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= --golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= --golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -+golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= - golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= - golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= - golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -@@ -1118,11 +1158,12 @@ golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qx - golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= - golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= - golang.org/x/net v0.0.0-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-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= - golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= - golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= --golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= --golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -+golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= - 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= -@@ -1132,8 +1173,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ - 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.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= --golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -+golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= -+golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= - 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= -@@ -1146,6 +1187,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ - 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-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -+golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -+golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= - 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= -@@ -1230,15 +1273,15 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc - golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= - golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= - golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= --golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= --golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= - golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= - golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= - 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.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= --golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -+golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= - 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= -@@ -1251,8 +1294,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= - golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= - golang.org/x/text v0.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.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= --golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -+golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= - golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= - golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= - golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -@@ -1355,8 +1398,8 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 - 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.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= --google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -+google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= -+google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= - 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= -@@ -1410,8 +1453,12 @@ google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6D - 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-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= --google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= --google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -+google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0= -+google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= -+google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 h1:U7+wNaVuSTaUqNvK2+osJ9ejEZxbjHHk8F2b6Hpx0AE= -+google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= -+google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c h1:jHkCUWkseRf+W+edG5hMzr/Uh1xkDREY4caybAq4dpY= -+google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= - google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= - google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= - google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -@@ -1436,8 +1483,10 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp - 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.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= --google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -+google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -+google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -+google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= -+google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= - 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= -@@ -1453,8 +1502,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 - 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.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= --google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= --google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -+google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -+google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= - gopkg.in/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= -diff --git a/proto/buf.lock b/proto/buf.lock -index f9f761d2bd..41b1ccf23e 100644 ---- a/proto/buf.lock -+++ b/proto/buf.lock -@@ -4,12 +4,21 @@ deps: - - remote: buf.build - owner: cosmos - repository: cosmos-proto -+ branch: main - commit: 1935555c206d4afb9e94615dfd0fad31 -+ digest: b1-TNqW6xj2Pjha5Uoj9a-5uOeRo4mwswKfyqMcN3I_gZ0= -+ create_time: 2021-12-02T22:04:00.31049Z - - remote: buf.build - owner: cosmos - repository: gogo-proto -+ branch: main - commit: bee5511075b7499da6178d9e4aaa628b -+ digest: b1-rrBIustouD-S80cVoZ_rM0qJsmei9AgbXy9GPQu6vxg= -+ create_time: 2021-12-02T20:01:17.069307Z - - remote: buf.build - owner: googleapis - repository: googleapis -- commit: 8d7204855ec14631a499bd7393ce1970 -+ branch: main -+ commit: 40f07f5b563941f2b20b991a7aedd53d -+ digest: b1-Iv8fTR4AKXwNW80Ey6K5tY8cP053y_95sB5fro9IWZo= -+ create_time: 2021-12-02T15:07:41.896892Z -diff --git a/proto/cosmos/base/tendermint/v1beta1/types.proto b/proto/cosmos/base/tendermint/v1beta1/types.proto -index 3d6c04c26a..c297d1ce0a 100644 ---- a/proto/cosmos/base/tendermint/v1beta1/types.proto -+++ b/proto/cosmos/base/tendermint/v1beta1/types.proto -@@ -3,7 +3,6 @@ package cosmos.base.tendermint.v1beta1; - - import "gogoproto/gogo.proto"; - import "tendermint/types/types.proto"; --import "tendermint/types/evidence.proto"; - import "tendermint/version/types.proto"; - import "google/protobuf/timestamp.proto"; - -@@ -14,7 +13,6 @@ option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/tmservice"; - message Block { - Header header = 1 [(gogoproto.nullable) = false]; - .tendermint.types.Data data = 2 [(gogoproto.nullable) = false]; -- .tendermint.types.EvidenceList evidence = 3 [(gogoproto.nullable) = false]; - .tendermint.types.Commit last_commit = 4; - } - -diff --git a/proto/cosmos/vesting/v1beta1/tx.proto b/proto/cosmos/vesting/v1beta1/tx.proto -index 732fe12536..128d38ad03 100644 ---- a/proto/cosmos/vesting/v1beta1/tx.proto -+++ b/proto/cosmos/vesting/v1beta1/tx.proto -@@ -42,6 +42,8 @@ message MsgCreateVestingAccount { - // end of vesting as unix time (in seconds). - int64 end_time = 4; - bool delayed = 5; -+ // start of vesting as unix time (in seconds). -+ int64 start_time = 6; - } - - // MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type. -diff --git a/scripts/module-tests.sh b/scripts/module-tests.sh -index b6be64240e..86998b5aa9 100644 ---- a/scripts/module-tests.sh -+++ b/scripts/module-tests.sh -@@ -21,7 +21,7 @@ execute_mod_tests() { - - echo ">>> running $go_mod tests" - cd $mod_dir; -- go test -mod=readonly -timeout 30m -coverprofile=${root_dir}/${coverage_file}.tmp -covermode=atomic -tags='norace ledger test_ledger_mock rocksdb_build' ./... -+ go test -mod=readonly -timeout 30m -coverprofile=${root_dir}/${coverage_file}.tmp -covermode=atomic -tags='norace ledger test_ledger_mock' ./... - local ret=$? - echo "test return: " $ret; - cd -; -diff --git a/server/rollback.go b/server/rollback.go -index c5245589aa..10828e4813 100644 ---- a/server/rollback.go -+++ b/server/rollback.go -@@ -6,7 +6,7 @@ import ( - "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/server/types" - "github.com/spf13/cobra" -- tmcmd "github.com/tendermint/tendermint/cmd/cometbft/commands" -+ cbftcmd "github.com/tendermint/tendermint/cmd/cometbft/commands" - ) - - // NewRollbackCmd creates a command to rollback tendermint and multistore state by one height. -@@ -32,7 +32,7 @@ application. - } - app := appCreator(ctx.Logger, db, nil, ctx.Viper) - // rollback tendermint state -- height, hash, err := tmcmd.RollbackState(ctx.Config) -+ height, hash, err := cbftcmd.RollbackState(ctx.Config) - if err != nil { - return fmt.Errorf("failed to rollback tendermint state: %w", err) - } -diff --git a/server/util.go b/server/util.go -index b28e339bff..cac4bd9df1 100644 ---- a/server/util.go -+++ b/server/util.go -@@ -12,7 +12,6 @@ import ( - "strconv" - "strings" - "syscall" -- "time" - - "github.com/rs/zerolog" - "github.com/rs/zerolog/log" -@@ -20,7 +19,7 @@ import ( - "github.com/spf13/cobra" - "github.com/spf13/pflag" - "github.com/spf13/viper" -- tmcmd "github.com/tendermint/tendermint/cmd/cometbft/commands" -+ cbftcmd "github.com/tendermint/tendermint/cmd/cometbft/commands" - tmcfg "github.com/tendermint/tendermint/config" - tmlog "github.com/tendermint/tendermint/libs/log" - dbm "github.com/tendermint/tm-db" -@@ -34,6 +33,7 @@ import ( - "github.com/cosmos/cosmos-sdk/store" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/version" -+ cmtproto "github.com/tendermint/tendermint/proto/tendermint/types" - ) - - // DONTCOVER -@@ -44,9 +44,10 @@ const ServerContextKey = sdk.ContextKey("server.context") - - // server context - type Context struct { -- Viper *viper.Viper -- Config *tmcfg.Config -- Logger tmlog.Logger -+ Viper *viper.Viper -+ Config *tmcfg.Config -+ Logger tmlog.Logger -+ DefaultConsensusParams *cmtproto.ConsensusParams - } - - // ErrorCode contains the exit code for server exit. -@@ -67,7 +68,7 @@ func NewDefaultContext() *Context { - } - - func NewContext(v *viper.Viper, config *tmcfg.Config, logger tmlog.Logger) *Context { -- return &Context{v, config, logger} -+ return &Context{v, config, logger, nil} - } - - func bindFlags(basename string, cmd *cobra.Command, v *viper.Viper) (err error) { -@@ -214,7 +215,6 @@ func interceptConfigs(rootViper *viper.Viper, customAppTemplate string, customCo - conf.RPC.PprofListenAddress = "localhost:6060" - conf.P2P.RecvRate = 5120000 - conf.P2P.SendRate = 5120000 -- conf.Consensus.TimeoutCommit = 5 * time.Second - tmcfg.WriteConfigFile(tmCfgFile, conf) - - case err != nil: -@@ -283,8 +283,8 @@ func AddCommands(rootCmd *cobra.Command, defaultNodeHome string, appCreator type - ShowValidatorCmd(), - ShowAddressCmd(), - VersionCmd(), -- tmcmd.ResetAllCmd, -- tmcmd.ResetStateCmd, -+ cbftcmd.ResetAllCmd, -+ cbftcmd.ResetStateCmd, - BootstrapStateCmd(appCreator), - ) - -diff --git a/simapp/helpers/test_helpers.go b/simapp/helpers/test_helpers.go -index a0888c0901..2afb4e59c6 100644 ---- a/simapp/helpers/test_helpers.go -+++ b/simapp/helpers/test_helpers.go -@@ -13,7 +13,7 @@ import ( - - // SimAppChainID hardcoded chainID for simulation - const ( -- DefaultGenTxGas = 10000000 -+ DefaultGenTxGas = 2600000 // An increase is needed when adding checks to staking/msg_server.go - SimAppChainID = "simulation-app" - ) - -diff --git a/testutil/rest/rest.go b/testutil/rest/rest.go -index c2cd418d0d..89a16b3ff2 100644 ---- a/testutil/rest/rest.go -+++ b/testutil/rest/rest.go -@@ -12,7 +12,7 @@ import ( - // GetRequest defines a wrapper around an HTTP GET request with a provided URL. - // An error is returned if the request or reading the body fails. - func GetRequest(url string) ([]byte, error) { -- res, err := http.Get(url) // nolint:gosec -+ res, err := http.Get(url) //nolint:gosec - if err != nil { - return nil, err - } -@@ -31,7 +31,7 @@ func GetRequest(url string) ([]byte, error) { - // PostRequest defines a wrapper around an HTTP POST request with a provided URL and data. - // An error is returned if the request or reading the body fails. - func PostRequest(url string, contentType string, data []byte) ([]byte, error) { -- res, err := http.Post(url, contentType, bytes.NewBuffer(data)) // nolint:gosec -+ res, err := http.Post(url, contentType, bytes.NewBuffer(data)) //nolint:gosec - if err != nil { - return nil, fmt.Errorf("error while sending post request: %w", err) - } -diff --git a/types/tx/types.go b/types/tx/types.go -index 1c39d6c085..5ab6abc279 100644 ---- a/types/tx/types.go -+++ b/types/tx/types.go -@@ -13,8 +13,10 @@ import ( - const MaxGasWanted = uint64((1 << 63) - 1) - - // Interface implementation checks. --var _, _, _, _ codectypes.UnpackInterfacesMessage = &Tx{}, &TxBody{}, &AuthInfo{}, &SignerInfo{} --var _ sdk.Tx = &Tx{} -+var ( -+ _, _, _, _ codectypes.UnpackInterfacesMessage = &Tx{}, &TxBody{}, &AuthInfo{}, &SignerInfo{} -+ _ sdk.Tx = &Tx{} -+) - - // GetMsgs implements the GetMsgs method on sdk.Tx. - func (t *Tx) GetMsgs() []sdk.Msg { -diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go -index 745aa5c0f5..387dcdcdd9 100644 ---- a/x/auth/client/testutil/suite.go -+++ b/x/auth/client/testutil/suite.go -@@ -683,6 +683,7 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { - name string - args []string - expectEmpty bool -+ expectError string - }{ - { - "fee event happy case", -@@ -692,6 +693,7 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - }, - false, -+ "", - }, - { - "no matching fee event", -@@ -701,6 +703,7 @@ func (s *IntegrationTestSuite) TestCLIQueryTxsCmdByEvents() { - fmt.Sprintf("--%s=json", tmcli.OutputFlag), - }, - true, -+ "", - }, - } - -diff --git a/x/auth/migrations/legacytx/stdtx_builder.go b/x/auth/migrations/legacytx/stdtx_builder.go -index 35d26ce02e..a2577772db 100644 ---- a/x/auth/migrations/legacytx/stdtx_builder.go -+++ b/x/auth/migrations/legacytx/stdtx_builder.go -@@ -115,6 +115,10 @@ func (s StdTxConfig) TxDecoder() sdk.TxDecoder { - return mkDecoder(s.Cdc.Unmarshal) - } - -+func (s StdTxConfig) SetTxDecoder(t sdk.TxDecoder) { -+ // no-op -+} -+ - func (s StdTxConfig) TxJSONEncoder() sdk.TxEncoder { - return func(tx sdk.Tx) ([]byte, error) { - return s.Cdc.MarshalJSON(tx) -diff --git a/x/auth/spec/07_client.md b/x/auth/spec/07_client.md -index bcfdc6f6fa..cbc518b770 100644 ---- a/x/auth/spec/07_client.md -+++ b/x/auth/spec/07_client.md -@@ -408,7 +408,7 @@ simd tx vesting create-periodic-vesting-account cosmos1.. periods.json - - #### create-vesting-account - --The `create-vesting-account` command creates a new vesting account funded with an allocation of tokens. The account can either be a delayed or continuous vesting account, which is determined by the '--delayed' flag. All vesting accouts created will have their start time set by the committed block's time. The end_time must be provided as a UNIX epoch timestamp. -+The `create-vesting-account` command creates a new vesting account funded with an allocation of tokens. The account can either be a delayed or continuous vesting account, which is determined by the '--delayed' flag. All vesting accounts created will have their start time set by the committed block's time unless specified explicitly using the `--start-time`flag. The `end_time` must be provided as a UNIX epoch timestamp. - - ```bash - simd tx vesting create-vesting-account [to_address] [amount] [end_time] [flags] -diff --git a/x/auth/tx/config.go b/x/auth/tx/config.go -index 78b78a9dd8..dd1dfe8e12 100644 ---- a/x/auth/tx/config.go -+++ b/x/auth/tx/config.go -@@ -67,6 +67,10 @@ func (g config) TxDecoder() sdk.TxDecoder { - return g.decoder - } - -+func (g *config) SetTxDecoder(decoder sdk.TxDecoder) { -+ g.decoder = decoder -+} -+ - func (g config) TxJSONEncoder() sdk.TxEncoder { - return g.jsonEncoder - } -diff --git a/x/auth/tx/query.go b/x/auth/tx/query.go -index 7028a1c4f1..bac2ec86cc 100644 ---- a/x/auth/tx/query.go -+++ b/x/auth/tx/query.go -@@ -44,7 +44,9 @@ func QueryTxsByEvents(clientCtx client.Context, events []string, page, limit int - - // TODO: this may not always need to be proven - // https://github.com/cosmos/cosmos-sdk/issues/6807 -- resTxs, err := node.TxSearch(context.Background(), query, true, &page, &limit, orderBy) -+ // FIXME: We have disabled the prove flag for now as celestia-core doesn't yet support it. -+ // Ref: https://github.com/celestiaorg/celestia-core/issues/918 -+ resTxs, err := node.TxSearch(context.Background(), query, false, &page, &limit, orderBy) - if err != nil { - return nil, err - } -@@ -79,7 +81,9 @@ func QueryTx(clientCtx client.Context, hashHexStr string) (*sdk.TxResponse, erro - - // TODO: this may not always need to be proven - // https://github.com/cosmos/cosmos-sdk/issues/6807 -- resTx, err := node.Tx(context.Background(), hash, true) -+ // FIXME: We have disabled the prove flag for now as celestia-core doesn't yet support it. -+ // Ref: https://github.com/celestiaorg/celestia-core/issues/918 -+ resTx, err := node.Tx(context.Background(), hash, false) - if err != nil { - return nil, err - } -diff --git a/x/auth/vesting/client/cli/tx.go b/x/auth/vesting/client/cli/tx.go -index f2ef3ba67f..72dd455f59 100644 ---- a/x/auth/vesting/client/cli/tx.go -+++ b/x/auth/vesting/client/cli/tx.go -@@ -17,7 +17,8 @@ import ( - - // Transaction command flags - const ( -- FlagDelayed = "delayed" -+ FlagDelayed = "delayed" -+ FlagStartTime = "start-time" - ) - - // GetTxCmd returns vesting module's transaction commands. -@@ -72,14 +73,18 @@ timestamp.`, - } - - delayed, _ := cmd.Flags().GetBool(FlagDelayed) -+ startTime, err := cmd.Flags().GetInt64(FlagStartTime) -+ if err != nil { -+ return err -+ } - -- msg := types.NewMsgCreateVestingAccount(clientCtx.GetFromAddress(), toAddr, amount, endTime, delayed) -- -+ msg := types.NewMsgCreateVestingAccount(clientCtx.GetFromAddress(), toAddr, amount, startTime, endTime, delayed) - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().Bool(FlagDelayed, false, "Create a delayed vesting account if true") -+ cmd.Flags().Int64(FlagStartTime, 0, "Optional start time (as a UNIX epoch timestamp) for continuous vesting accounts. If 0 (default), the block's time of the block this tx is committed to will be used.") - flags.AddTxFlagsToCmd(cmd) - - return cmd -diff --git a/x/auth/vesting/client/testutil/suite.go b/x/auth/vesting/client/testutil/suite.go -index 7f56de2c1c..829a0a8ba3 100644 ---- a/x/auth/vesting/client/testutil/suite.go -+++ b/x/auth/vesting/client/testutil/suite.go -@@ -63,6 +63,21 @@ func (s *IntegrationTestSuite) TestNewMsgCreateVestingAccountCmd() { - expectedCode: 0, - respType: &sdk.TxResponse{}, - }, -+ "create a continuous vesting account with start time": { -+ args: []string{ -+ sdk.AccAddress("addr2_______________").String(), -+ sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String(), -+ "4070908800", -+ fmt.Sprintf("--%s=%d", cli.FlagStartTime, 4070808800), -+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address), -+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), -+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), -+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), -+ }, -+ expectErr: false, -+ expectedCode: 0, -+ respType: &sdk.TxResponse{}, -+ }, - "create a delayed vesting account": { - args: []string{ - sdk.AccAddress("addr3_______________").String(), -diff --git a/x/auth/vesting/msg_server.go b/x/auth/vesting/msg_server.go -index c3dd578516..1d52a4f5d2 100644 ---- a/x/auth/vesting/msg_server.go -+++ b/x/auth/vesting/msg_server.go -@@ -44,6 +44,14 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre - return nil, err - } - -+ if msg.EndTime <= 0 { -+ return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid end time") -+ } -+ -+ if msg.EndTime <= msg.StartTime { -+ return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid start and end time (must be start < end)") -+ } -+ - if bk.BlockedAddr(to) { - return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", msg.ToAddress) - } -@@ -60,7 +68,11 @@ func (s msgServer) CreateVestingAccount(goCtx context.Context, msg *types.MsgCre - if msg.Delayed { - vestingAccount = types.NewDelayedVestingAccountRaw(baseVestingAccount) - } else { -- vestingAccount = types.NewContinuousVestingAccountRaw(baseVestingAccount, ctx.BlockTime().Unix()) -+ start := ctx.BlockTime().Unix() -+ if msg.StartTime != 0 { -+ start = msg.StartTime -+ } -+ vestingAccount = types.NewContinuousVestingAccountRaw(baseVestingAccount, start) - } - - ak.SetAccount(ctx, vestingAccount) -diff --git a/x/auth/vesting/types/msgs.go b/x/auth/vesting/types/msgs.go -index f2194af569..20e37fe173 100644 ---- a/x/auth/vesting/types/msgs.go -+++ b/x/auth/vesting/types/msgs.go -@@ -25,11 +25,12 @@ var _ sdk.Msg = &MsgCreatePeriodicVestingAccount{} - // NewMsgCreateVestingAccount returns a reference to a new MsgCreateVestingAccount. - // - //nolint:interfacer --func NewMsgCreateVestingAccount(fromAddr, toAddr sdk.AccAddress, amount sdk.Coins, endTime int64, delayed bool) *MsgCreateVestingAccount { -+func NewMsgCreateVestingAccount(fromAddr, toAddr sdk.AccAddress, amount sdk.Coins, startTime, endTime int64, delayed bool) *MsgCreateVestingAccount { - return &MsgCreateVestingAccount{ - FromAddress: fromAddr.String(), - ToAddress: toAddr.String(), - Amount: amount, -+ StartTime: startTime, - EndTime: endTime, - Delayed: delayed, - } -diff --git a/x/auth/vesting/types/tx.pb.go b/x/auth/vesting/types/tx.pb.go -index 0165ea8331..8fe34a78df 100644 ---- a/x/auth/vesting/types/tx.pb.go -+++ b/x/auth/vesting/types/tx.pb.go -@@ -41,6 +41,8 @@ type MsgCreateVestingAccount struct { - // end of vesting as unix time (in seconds). - EndTime int64 `protobuf:"varint,4,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` - Delayed bool `protobuf:"varint,5,opt,name=delayed,proto3" json:"delayed,omitempty"` -+ // start of vesting as unix time (in seconds). -+ StartTime int64 `protobuf:"varint,6,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` - } - - func (m *MsgCreateVestingAccount) Reset() { *m = MsgCreateVestingAccount{} } -@@ -111,6 +113,13 @@ func (m *MsgCreateVestingAccount) GetDelayed() bool { - return false - } - -+func (m *MsgCreateVestingAccount) GetStartTime() int64 { -+ if m != nil { -+ return m.StartTime -+ } -+ return 0 -+} -+ - // MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type. - type MsgCreateVestingAccountResponse struct { - } -@@ -380,46 +389,46 @@ func init() { - func init() { proto.RegisterFile("cosmos/vesting/v1beta1/tx.proto", fileDescriptor_5338ca97811f9792) } - - var fileDescriptor_5338ca97811f9792 = []byte{ -- // 609 bytes of a gzipped FileDescriptorProto -- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xb1, 0x6f, 0xd3, 0x40, -- 0x14, 0xc6, 0x73, 0x75, 0x68, 0x9b, 0x2b, 0x02, 0x61, 0x52, 0xe2, 0x44, 0xd4, 0x4e, 0x2d, 0x24, -- 0x0c, 0x52, 0x6d, 0x52, 0x90, 0x2a, 0x85, 0x01, 0x35, 0x1d, 0x21, 0x12, 0x32, 0x88, 0x81, 0x25, -- 0x72, 0xec, 0xc3, 0xb5, 0x5a, 0xfb, 0x22, 0xdf, 0xa5, 0x6a, 0x36, 0xc4, 0x5f, 0xc0, 0xc8, 0xc8, -- 0xcc, 0xc4, 0xc0, 0x8c, 0x18, 0x3b, 0x56, 0x4c, 0x4c, 0x01, 0x25, 0x03, 0x9d, 0xfb, 0x07, 0x20, -- 0x64, 0xdf, 0x39, 0x34, 0xe9, 0x25, 0x29, 0x0c, 0x4c, 0x4e, 0xee, 0x7d, 0xdf, 0xdd, 0xbb, 0x9f, -- 0xbf, 0x67, 0xa8, 0xb9, 0x98, 0x84, 0x98, 0x58, 0x07, 0x88, 0xd0, 0x20, 0xf2, 0xad, 0x83, 0x5a, -- 0x1b, 0x51, 0xa7, 0x66, 0xd1, 0x43, 0xb3, 0x13, 0x63, 0x8a, 0xe5, 0x1b, 0x4c, 0x60, 0x72, 0x81, -- 0xc9, 0x05, 0x95, 0xa2, 0x8f, 0x7d, 0x9c, 0x4a, 0xac, 0xe4, 0x17, 0x53, 0x57, 0x54, 0xbe, 0x5d, -- 0xdb, 0x21, 0x68, 0xb4, 0x97, 0x8b, 0x83, 0x88, 0xd7, 0xcb, 0xac, 0xde, 0x62, 0x46, 0xbe, 0x35, -- 0x2b, 0xdd, 0x9a, 0xd2, 0x49, 0x76, 0x30, 0x53, 0x95, 0xb8, 0x2a, 0x24, 0x89, 0x22, 0x79, 0xb0, -- 0x82, 0xfe, 0x65, 0x01, 0x96, 0x9a, 0xc4, 0xdf, 0x89, 0x91, 0x43, 0xd1, 0x0b, 0xe6, 0xd9, 0x76, -- 0x5d, 0xdc, 0x8d, 0xa8, 0xfc, 0x10, 0x5e, 0x7e, 0x15, 0xe3, 0xb0, 0xe5, 0x78, 0x5e, 0x8c, 0x08, -- 0x51, 0x40, 0x15, 0x18, 0x85, 0x86, 0xf2, 0xf5, 0xd3, 0x46, 0x91, 0xb7, 0xb0, 0xcd, 0x2a, 0xcf, -- 0x68, 0x1c, 0x44, 0xbe, 0xbd, 0x92, 0xa8, 0xf9, 0x92, 0xbc, 0x05, 0x21, 0xc5, 0x23, 0xeb, 0xc2, -- 0x1c, 0x6b, 0x81, 0xe2, 0xcc, 0xe8, 0xc2, 0x45, 0x27, 0x4c, 0xce, 0x57, 0xa4, 0xaa, 0x64, 0xac, -- 0x6c, 0x96, 0x4d, 0xee, 0x48, 0xe0, 0x64, 0x1c, 0xcd, 0x1d, 0x1c, 0x44, 0x8d, 0x7b, 0x47, 0x7d, -- 0x2d, 0xf7, 0xe1, 0xbb, 0x66, 0xf8, 0x01, 0xdd, 0xed, 0xb6, 0x4d, 0x17, 0x87, 0x1c, 0x0e, 0x7f, -- 0x6c, 0x10, 0x6f, 0xcf, 0xa2, 0xbd, 0x0e, 0x22, 0xa9, 0x81, 0xd8, 0x7c, 0x6b, 0xb9, 0x0c, 0x97, -- 0x51, 0xe4, 0xb5, 0x68, 0x10, 0x22, 0x25, 0x5f, 0x05, 0x86, 0x64, 0x2f, 0xa1, 0xc8, 0x7b, 0x1e, -- 0x84, 0x48, 0x56, 0xe0, 0x92, 0x87, 0xf6, 0x9d, 0x1e, 0xf2, 0x94, 0x4b, 0x55, 0x60, 0x2c, 0xdb, -- 0xd9, 0xdf, 0xfa, 0xea, 0xc9, 0x7b, 0x0d, 0xbc, 0xf9, 0xf9, 0xf1, 0xee, 0x18, 0x16, 0x7d, 0x1d, -- 0x6a, 0x53, 0x08, 0xda, 0x88, 0x74, 0x70, 0x44, 0x90, 0xfe, 0x0b, 0x9c, 0xd1, 0x3c, 0x45, 0x71, -- 0xe8, 0x44, 0x28, 0xa2, 0x4f, 0xb0, 0xbb, 0x87, 0xbc, 0x8c, 0x76, 0x5d, 0x48, 0xbb, 0x74, 0xda, -- 0xd7, 0xae, 0xf7, 0x9c, 0x70, 0xbf, 0xae, 0x8f, 0x1d, 0x3a, 0x0e, 0xfb, 0x81, 0x00, 0xf6, 0xea, -- 0x69, 0x5f, 0xbb, 0xc6, 0x9c, 0x7f, 0x6a, 0xfa, 0xff, 0x26, 0x5d, 0xcf, 0x27, 0xd0, 0xf4, 0x3b, -- 0xf0, 0xf6, 0x9c, 0xfb, 0x8f, 0x58, 0x9d, 0x4c, 0xb0, 0x0a, 0xb0, 0x17, 0xb8, 0x13, 0xc9, 0x5c, -- 0x17, 0xb1, 0x1a, 0x47, 0xb2, 0x76, 0x1e, 0xc9, 0xd9, 0xbb, 0xaf, 0x41, 0x48, 0xa8, 0x13, 0x53, -- 0x16, 0x01, 0x29, 0x8d, 0x40, 0x21, 0x5d, 0x49, 0x43, 0xd0, 0x84, 0x57, 0xf9, 0x00, 0xb5, 0x3a, -- 0x69, 0x0b, 0x44, 0xc9, 0xa7, 0x8c, 0x54, 0x53, 0x3c, 0xd8, 0x26, 0xeb, 0xb4, 0x91, 0x4f, 0x40, -- 0xd9, 0x57, 0x78, 0x95, 0x2d, 0x92, 0x34, 0x39, 0xb9, 0xf3, 0xc9, 0x99, 0xa0, 0x22, 0xb8, 0x69, -- 0x46, 0x65, 0xf3, 0xb3, 0x04, 0xa5, 0x26, 0xf1, 0xe5, 0xd7, 0x00, 0x16, 0x85, 0xc3, 0x6a, 0x4d, -- 0x6b, 0x6c, 0x4a, 0x36, 0x2b, 0x5b, 0x7f, 0x69, 0xc8, 0x5a, 0x91, 0xdf, 0x01, 0x78, 0x73, 0x66, -- 0x92, 0xe7, 0xef, 0x2c, 0x36, 0x56, 0x1e, 0xfd, 0xa3, 0x51, 0xdc, 0x9a, 0x28, 0x38, 0x17, 0x6a, -- 0x4d, 0x60, 0xbc, 0x58, 0x6b, 0x33, 0x5e, 0x60, 0xe3, 0xf1, 0xd1, 0x40, 0x05, 0xc7, 0x03, 0x15, -- 0xfc, 0x18, 0xa8, 0xe0, 0xed, 0x50, 0xcd, 0x1d, 0x0f, 0xd5, 0xdc, 0xb7, 0xa1, 0x9a, 0x7b, 0x59, -- 0x9b, 0x39, 0x53, 0x87, 0x96, 0xd3, 0xa5, 0xbb, 0xa3, 0xcf, 0x7b, 0x3a, 0x62, 0xed, 0xc5, 0xf4, -- 0xe3, 0x7d, 0xff, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3d, 0xa4, 0x06, 0x42, 0x87, 0x06, 0x00, -- 0x00, -+ // 614 bytes of a gzipped FileDescriptorProto -+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0x31, 0x6f, 0xd3, 0x40, -+ 0x14, 0xce, 0xd5, 0xa1, 0x6d, 0xae, 0x08, 0x84, 0x49, 0x89, 0x13, 0x51, 0x3b, 0xb5, 0x90, 0x08, -+ 0x48, 0xb5, 0x49, 0x41, 0xaa, 0x14, 0x06, 0xd4, 0x74, 0x84, 0x48, 0xc8, 0x20, 0x06, 0x96, 0xc8, -+ 0xb1, 0x0f, 0xd7, 0x6a, 0xed, 0x8b, 0x7c, 0x97, 0xaa, 0xd9, 0x10, 0xbf, 0x80, 0x91, 0x91, 0x99, -+ 0x89, 0x81, 0x99, 0xb9, 0x63, 0xc5, 0xc4, 0x94, 0xa2, 0x64, 0xa0, 0x73, 0x7f, 0x00, 0x42, 0xf6, -+ 0x9d, 0x43, 0x9d, 0x5e, 0x92, 0xc2, 0xc0, 0x74, 0xf6, 0xbd, 0xef, 0x7b, 0xf7, 0xdd, 0xf7, 0xde, -+ 0x3b, 0xa8, 0x39, 0x98, 0x04, 0x98, 0x98, 0x07, 0x88, 0x50, 0x3f, 0xf4, 0xcc, 0x83, 0x7a, 0x07, -+ 0x51, 0xbb, 0x6e, 0xd2, 0x43, 0xa3, 0x1b, 0x61, 0x8a, 0xe5, 0x5b, 0x0c, 0x60, 0x70, 0x80, 0xc1, -+ 0x01, 0x95, 0xa2, 0x87, 0x3d, 0x9c, 0x40, 0xcc, 0xf8, 0x8b, 0xa1, 0x2b, 0x2a, 0x4f, 0xd7, 0xb1, -+ 0x09, 0x1a, 0xe7, 0x72, 0xb0, 0x1f, 0xf2, 0x78, 0x99, 0xc5, 0xdb, 0x8c, 0xc8, 0x53, 0xb3, 0xd0, -+ 0x9d, 0x29, 0x4a, 0xd2, 0x83, 0x19, 0xaa, 0xc4, 0x51, 0x01, 0x89, 0x11, 0xf1, 0xc2, 0x02, 0xfa, -+ 0xc9, 0x02, 0x2c, 0xb5, 0x88, 0xb7, 0x13, 0x21, 0x9b, 0xa2, 0x57, 0x8c, 0xb3, 0xed, 0x38, 0xb8, -+ 0x17, 0x52, 0xf9, 0x31, 0xbc, 0xfa, 0x26, 0xc2, 0x41, 0xdb, 0x76, 0xdd, 0x08, 0x11, 0xa2, 0x80, -+ 0x2a, 0xa8, 0x15, 0x9a, 0xca, 0xb7, 0x2f, 0x1b, 0x45, 0x2e, 0x61, 0x9b, 0x45, 0x5e, 0xd0, 0xc8, -+ 0x0f, 0x3d, 0x6b, 0x25, 0x46, 0xf3, 0x2d, 0x79, 0x0b, 0x42, 0x8a, 0xc7, 0xd4, 0x85, 0x39, 0xd4, -+ 0x02, 0xc5, 0x29, 0xd1, 0x81, 0x8b, 0x76, 0x10, 0x9f, 0xaf, 0x48, 0x55, 0xa9, 0xb6, 0xb2, 0x59, -+ 0x36, 0x38, 0x23, 0x36, 0x27, 0xf5, 0xd1, 0xd8, 0xc1, 0x7e, 0xd8, 0x7c, 0x70, 0x34, 0xd0, 0x72, -+ 0x9f, 0x4e, 0xb4, 0x9a, 0xe7, 0xd3, 0xdd, 0x5e, 0xc7, 0x70, 0x70, 0xc0, 0xcd, 0xe1, 0xcb, 0x06, -+ 0x71, 0xf7, 0x4c, 0xda, 0xef, 0x22, 0x92, 0x10, 0x88, 0xc5, 0x53, 0xcb, 0x65, 0xb8, 0x8c, 0x42, -+ 0xb7, 0x4d, 0xfd, 0x00, 0x29, 0xf9, 0x2a, 0xa8, 0x49, 0xd6, 0x12, 0x0a, 0xdd, 0x97, 0x7e, 0x80, -+ 0x64, 0x05, 0x2e, 0xb9, 0x68, 0xdf, 0xee, 0x23, 0x57, 0xb9, 0x52, 0x05, 0xb5, 0x65, 0x2b, 0xfd, -+ 0x95, 0xd7, 0x20, 0x24, 0xd4, 0x8e, 0x28, 0xa3, 0x2d, 0x26, 0xb4, 0x42, 0xb2, 0x13, 0x13, 0x1b, -+ 0xab, 0xa7, 0x1f, 0x35, 0xf0, 0xee, 0xe7, 0xe7, 0xfb, 0x19, 0xd7, 0xf4, 0x75, 0xa8, 0x4d, 0x31, -+ 0xd8, 0x42, 0xa4, 0x8b, 0x43, 0x82, 0xf4, 0x5f, 0xe0, 0x1c, 0xe6, 0x39, 0x8a, 0x02, 0x3b, 0x44, -+ 0x21, 0x7d, 0x86, 0x9d, 0x3d, 0xe4, 0xa6, 0xc5, 0x68, 0x08, 0x8b, 0x51, 0x3a, 0x1b, 0x68, 0x37, -+ 0xfb, 0x76, 0xb0, 0xdf, 0xd0, 0x33, 0x87, 0x66, 0x6b, 0xf1, 0x48, 0x50, 0x8b, 0xd5, 0xb3, 0x81, -+ 0x76, 0x83, 0x31, 0xff, 0xc4, 0xf4, 0xff, 0x5d, 0x88, 0x46, 0x3e, 0x36, 0x4d, 0xbf, 0x07, 0xef, -+ 0xce, 0xb9, 0xff, 0xd8, 0xab, 0xd3, 0x09, 0xaf, 0x7c, 0xec, 0xfa, 0xce, 0x44, 0xe3, 0xae, 0x8b, -+ 0xbc, 0xca, 0x5a, 0xb2, 0x76, 0xd1, 0x92, 0xf3, 0x77, 0xcf, 0x96, 0x5a, 0x9a, 0x28, 0xb5, 0xdc, -+ 0x82, 0xd7, 0xf9, 0x7c, 0xb5, 0xbb, 0x89, 0x04, 0xa2, 0xe4, 0x13, 0x8f, 0x54, 0x43, 0x3c, 0xf7, -+ 0x06, 0x53, 0xda, 0xcc, 0xc7, 0x46, 0x59, 0xd7, 0x78, 0x94, 0x6d, 0x92, 0xa4, 0x73, 0x72, 0x17, -+ 0x3b, 0x67, 0xc2, 0x15, 0xc1, 0x4d, 0x53, 0x57, 0x36, 0xbf, 0x4a, 0x50, 0x6a, 0x11, 0x4f, 0x7e, -+ 0x0b, 0x60, 0x51, 0x38, 0xcb, 0xe6, 0x34, 0x61, 0x53, 0x7a, 0xb3, 0xb2, 0xf5, 0x97, 0x84, 0x54, -+ 0x8a, 0xfc, 0x01, 0xc0, 0xdb, 0x33, 0x3b, 0x79, 0x7e, 0x66, 0x31, 0xb1, 0xf2, 0xe4, 0x1f, 0x89, -+ 0x62, 0x69, 0xa2, 0xc6, 0xb9, 0x94, 0x34, 0x01, 0xf1, 0x72, 0xd2, 0x66, 0x14, 0xb0, 0xf9, 0xf4, -+ 0x68, 0xa8, 0x82, 0xe3, 0xa1, 0x0a, 0x7e, 0x0c, 0x55, 0xf0, 0x7e, 0xa4, 0xe6, 0x8e, 0x47, 0x6a, -+ 0xee, 0xfb, 0x48, 0xcd, 0xbd, 0xae, 0xcf, 0x9c, 0xa9, 0x43, 0xd3, 0xee, 0xd1, 0xdd, 0xf1, 0xeb, -+ 0x9f, 0x8c, 0x58, 0x67, 0x31, 0x79, 0xdb, 0x1f, 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xab, 0xdc, -+ 0x57, 0xe2, 0xa6, 0x06, 0x00, 0x00, - } - - func (this *MsgCreateVestingAccount) Equal(that interface{}) bool { -@@ -461,6 +470,9 @@ func (this *MsgCreateVestingAccount) Equal(that interface{}) bool { - if this.Delayed != that1.Delayed { - return false - } -+ if this.StartTime != that1.StartTime { -+ return false -+ } - return true - } - func (this *MsgCreatePermanentLockedAccount) Equal(that interface{}) bool { -@@ -691,6 +703,11 @@ func (m *MsgCreateVestingAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) - _ = i - var l int - _ = l -+ if m.StartTime != 0 { -+ i = encodeVarintTx(dAtA, i, uint64(m.StartTime)) -+ i-- -+ dAtA[i] = 0x30 -+ } - if m.Delayed { - i-- - if m.Delayed { -@@ -950,6 +967,9 @@ func (m *MsgCreateVestingAccount) Size() (n int) { - if m.Delayed { - n += 2 - } -+ if m.StartTime != 0 { -+ n += 1 + sovTx(uint64(m.StartTime)) -+ } - return n - } - -@@ -1201,6 +1221,25 @@ func (m *MsgCreateVestingAccount) Unmarshal(dAtA []byte) error { - } - } - m.Delayed = bool(v != 0) -+ case 6: -+ if wireType != 0 { -+ return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) -+ } -+ m.StartTime = 0 -+ for shift := uint(0); ; shift += 7 { -+ if shift >= 64 { -+ return ErrIntOverflowTx -+ } -+ if iNdEx >= l { -+ return io.ErrUnexpectedEOF -+ } -+ b := dAtA[iNdEx] -+ iNdEx++ -+ m.StartTime |= int64(b&0x7F) << shift -+ if b < 0x80 { -+ break -+ } -+ } - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) -diff --git a/x/auth/vesting/types/vesting_account_test.go b/x/auth/vesting/types/vesting_account_test.go -index 56ae59b05b..ca630182ee 100644 ---- a/x/auth/vesting/types/vesting_account_test.go -+++ b/x/auth/vesting/types/vesting_account_test.go -@@ -38,67 +38,95 @@ func (s *VestingAccountTestSuite) SetupTest() { - - func TestGetVestedCoinsContVestingAcc(t *testing.T) { - now := tmtime.Now() -- endTime := now.Add(24 * time.Hour) -+ startTime := now.Add(24 * time.Hour) -+ endTime := startTime.Add(24 * time.Hour) - - bacc, origCoins := initBaseAccount() -- cva := types.NewContinuousVestingAccount(bacc, origCoins, now.Unix(), endTime.Unix()) -+ cva := types.NewContinuousVestingAccount(bacc, origCoins, startTime.Unix(), endTime.Unix()) - -- // require no coins vested in the very beginning of the vesting schedule -+ // require no coins vested _before_ the start time of the vesting schedule - vestedCoins := cva.GetVestedCoins(now) - require.Nil(t, vestedCoins) - -+ // require no coins vested _before_ the very beginning of the vesting schedule -+ vestedCoins = cva.GetVestedCoins(startTime.Add(-1)) -+ require.Nil(t, vestedCoins) -+ - // require all coins vested at the end of the vesting schedule - vestedCoins = cva.GetVestedCoins(endTime) - require.Equal(t, origCoins, vestedCoins) - - // require 50% of coins vested -- vestedCoins = cva.GetVestedCoins(now.Add(12 * time.Hour)) -+ vestedCoins = cva.GetVestedCoins(startTime.Add(12 * time.Hour)) - require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}, vestedCoins) - -+ // require 75% of coins vested -+ vestedCoins = cva.GetVestedCoins(startTime.Add(18 * time.Hour)) -+ require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 750), sdk.NewInt64Coin(stakeDenom, 75)}, vestedCoins) -+ - // require 100% of coins vested -- vestedCoins = cva.GetVestedCoins(now.Add(48 * time.Hour)) -+ vestedCoins = cva.GetVestedCoins(endTime) - require.Equal(t, origCoins, vestedCoins) - } - - func TestGetVestingCoinsContVestingAcc(t *testing.T) { - now := tmtime.Now() -- endTime := now.Add(24 * time.Hour) -+ startTime := now.Add(24 * time.Hour) -+ endTime := startTime.Add(24 * time.Hour) - - bacc, origCoins := initBaseAccount() -- cva := types.NewContinuousVestingAccount(bacc, origCoins, now.Unix(), endTime.Unix()) -+ cva := types.NewContinuousVestingAccount(bacc, origCoins, startTime.Unix(), endTime.Unix()) - -- // require all coins vesting in the beginning of the vesting schedule -+ // require all coins vesting before the start time of the vesting schedule - vestingCoins := cva.GetVestingCoins(now) - require.Equal(t, origCoins, vestingCoins) - -+ // require all coins vesting right before the start time of the vesting schedule -+ vestingCoins = cva.GetVestingCoins(startTime.Add(-1)) -+ require.Equal(t, origCoins, vestingCoins) -+ - // require no coins vesting at the end of the vesting schedule - vestingCoins = cva.GetVestingCoins(endTime) - require.Nil(t, vestingCoins) - -- // require 50% of coins vesting -- vestingCoins = cva.GetVestingCoins(now.Add(12 * time.Hour)) -+ // require 50% of coins vesting in the middle between start and end time -+ vestingCoins = cva.GetVestingCoins(startTime.Add(12 * time.Hour)) - require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}, vestingCoins) -+ -+ // require 25% of coins vesting after 3/4 of the time between start and end time has passed -+ vestingCoins = cva.GetVestingCoins(startTime.Add(18 * time.Hour)) -+ require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}, vestingCoins) - } - - func TestSpendableCoinsContVestingAcc(t *testing.T) { - now := tmtime.Now() -- endTime := now.Add(24 * time.Hour) -+ startTime := now.Add(24 * time.Hour) -+ endTime := startTime.Add(24 * time.Hour) - - bacc, origCoins := initBaseAccount() -- cva := types.NewContinuousVestingAccount(bacc, origCoins, now.Unix(), endTime.Unix()) -+ cva := types.NewContinuousVestingAccount(bacc, origCoins, startTime.Unix(), endTime.Unix()) - -- // require that all original coins are locked at the end of the vesting -+ // require that all original coins are locked before the beginning of the vesting - // schedule - lockedCoins := cva.LockedCoins(now) - require.Equal(t, origCoins, lockedCoins) - -- // require that there exist no locked coins in the beginning of the -+ // require that all original coins are locked at the beginning of the vesting -+ // schedule -+ lockedCoins = cva.LockedCoins(startTime) -+ require.Equal(t, origCoins, lockedCoins) -+ -+ // require that there exist no locked coins in the end of the vesting schedule - lockedCoins = cva.LockedCoins(endTime) - require.Equal(t, sdk.NewCoins(), lockedCoins) - - // require that all vested coins (50%) are spendable -- lockedCoins = cva.LockedCoins(now.Add(12 * time.Hour)) -+ lockedCoins = cva.LockedCoins(startTime.Add(12 * time.Hour)) - require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}, lockedCoins) -+ -+ // require 25% of coins vesting after 3/4 of the time between start and end time has passed -+ lockedCoins = cva.LockedCoins(startTime.Add(18 * time.Hour)) -+ require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}, lockedCoins) - } - - func TestTrackDelegationContVestingAcc(t *testing.T) { -diff --git a/x/bank/migrations/v046/store_test.go b/x/bank/migrations/v046/store_test.go -index 0322f1e892..9fe34d09e3 100644 ---- a/x/bank/migrations/v046/store_test.go -+++ b/x/bank/migrations/v046/store_test.go -@@ -16,34 +16,32 @@ import ( - "github.com/cosmos/cosmos-sdk/x/bank/types" - ) - --var ( -- metaData = []types.Metadata{ -- { -- Name: "Cosmos Hub Atom", -- Symbol: "ATOM", -- Description: "The native staking token of the Cosmos Hub.", -- DenomUnits: []*types.DenomUnit{ -- {"uatom", uint32(0), []string{"microatom"}}, -- {"matom", uint32(3), []string{"milliatom"}}, -- {"atom", uint32(6), nil}, -- }, -- Base: "uatom", -- Display: "atom", -+var metaData = []types.Metadata{ -+ { -+ Name: "Cosmos Hub Atom", -+ Symbol: "ATOM", -+ Description: "The native staking token of the Cosmos Hub.", -+ DenomUnits: []*types.DenomUnit{ -+ {"uatom", uint32(0), []string{"microatom"}}, -+ {"matom", uint32(3), []string{"milliatom"}}, -+ {"atom", uint32(6), nil}, - }, -- { -- Name: "Token", -- Symbol: "TOKEN", -- Description: "The native staking token of the Token Hub.", -- DenomUnits: []*types.DenomUnit{ -- {"1token", uint32(5), []string{"decitoken"}}, -- {"2token", uint32(4), []string{"centitoken"}}, -- {"3token", uint32(7), []string{"dekatoken"}}, -- }, -- Base: "utoken", -- Display: "token", -+ Base: "uatom", -+ Display: "atom", -+ }, -+ { -+ Name: "Token", -+ Symbol: "TOKEN", -+ Description: "The native staking token of the Token Hub.", -+ DenomUnits: []*types.DenomUnit{ -+ {"1token", uint32(5), []string{"decitoken"}}, -+ {"2token", uint32(4), []string{"centitoken"}}, -+ {"3token", uint32(7), []string{"dekatoken"}}, - }, -- } --) -+ Base: "utoken", -+ Display: "token", -+ }, -+} - - func TestMigrateStore(t *testing.T) { - encCfg := simapp.MakeTestEncodingConfig() -diff --git a/x/genutil/client/cli/init.go b/x/genutil/client/cli/init.go -index f3a186b77f..91d0255dc8 100644 ---- a/x/genutil/client/cli/init.go -+++ b/x/genutil/client/cli/init.go -@@ -163,6 +163,10 @@ func InitCmd(mbm module.BasicManager, defaultNodeHome string) *cobra.Command { - genDoc.Validators = nil - genDoc.AppState = appState - -+ if serverCtx.DefaultConsensusParams != nil { -+ genDoc.ConsensusParams = serverCtx.DefaultConsensusParams -+ } -+ - if err = genutil.ExportGenesisFile(genDoc, genFile); err != nil { - return errors.Wrap(err, "Failed to export genesis file") - } -diff --git a/x/genutil/client/cli/init_test.go b/x/genutil/client/cli/init_test.go -index 705af61cac..058c088565 100644 ---- a/x/genutil/client/cli/init_test.go -+++ b/x/genutil/client/cli/init_test.go -@@ -14,6 +14,7 @@ import ( - abci_server "github.com/tendermint/tendermint/abci/server" - "github.com/tendermint/tendermint/libs/cli" - "github.com/tendermint/tendermint/libs/log" -+ coretypes "github.com/tendermint/tendermint/types" - - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" -@@ -283,6 +284,43 @@ func TestInitConfig(t *testing.T) { - require.Contains(t, out, "\"chain_id\": \"foo\"") - } - -+func TestInitWithConsensusParams(t *testing.T) { -+ home := t.TempDir() -+ logger := log.NewNopLogger() -+ cfg, err := genutiltest.CreateDefaultTendermintConfig(home) -+ require.NoError(t, err) -+ -+ serverCtx := server.NewContext(viper.New(), cfg, logger) -+ -+ // set new default consensus params -+ cps := coretypes.DefaultConsensusParams() -+ cps.Block.MaxBytes = 100000000 -+ cps.Block.MaxGas = 420420420 -+ serverCtx.DefaultConsensusParams = cps -+ -+ interfaceRegistry := types.NewInterfaceRegistry() -+ marshaler := codec.NewProtoCodec(interfaceRegistry) -+ clientCtx := client.Context{}. -+ WithCodec(marshaler). -+ WithLegacyAmino(makeCodec()). -+ WithHomeDir(home) -+ -+ ctx := context.Background() -+ ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx) -+ ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx) -+ -+ cmd := genutilcli.InitCmd(testMbm, home) -+ cmd.SetArgs([]string{"testnode"}) -+ -+ err = cmd.ExecuteContext(ctx) -+ require.NoError(t, err) -+ -+ genDoc, err := coretypes.GenesisDocFromFile(cfg.GenesisFile()) -+ require.NoError(t, err) -+ -+ require.Equal(t, genDoc.ConsensusParams, cps) -+} -+ - // custom tx codec - func makeCodec() *codec.LegacyAmino { - cdc := codec.NewLegacyAmino() -diff --git a/x/genutil/client/cli/migrate.go b/x/genutil/client/cli/migrate.go -index c16fcb843d..33b2d0c760 100644 ---- a/x/genutil/client/cli/migrate.go -+++ b/x/genutil/client/cli/migrate.go -@@ -62,73 +62,7 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 - `, version.AppName), - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { -- clientCtx := client.GetClientContextFromCmd(cmd) -- -- var err error -- -- target := args[0] -- importGenesis := args[1] -- -- genDoc, err := validateGenDoc(importGenesis) -- if err != nil { -- return err -- } -- -- // Since some default values are valid values, we just print to -- // make sure the user didn't forget to update these values. -- if genDoc.ConsensusParams.Evidence.MaxBytes == 0 { -- fmt.Printf("Warning: consensus_params.evidence.max_bytes is set to 0. If this is"+ -- " deliberate, feel free to ignore this warning. If not, please have a look at the chain"+ -- " upgrade guide at %s.\n", chainUpgradeGuide) -- } -- -- var initialState types.AppMap -- if err := json.Unmarshal(genDoc.AppState, &initialState); err != nil { -- return errors.Wrap(err, "failed to JSON unmarshal initial genesis state") -- } -- -- migrationFunc := GetMigrationCallback(target) -- if migrationFunc == nil { -- return fmt.Errorf("unknown migration function for version: %s", target) -- } -- -- // TODO: handler error from migrationFunc call -- newGenState := migrationFunc(initialState, clientCtx) -- -- genDoc.AppState, err = json.Marshal(newGenState) -- if err != nil { -- return errors.Wrap(err, "failed to JSON marshal migrated genesis state") -- } -- -- genesisTime, _ := cmd.Flags().GetString(flagGenesisTime) -- if genesisTime != "" { -- var t time.Time -- -- err := t.UnmarshalText([]byte(genesisTime)) -- if err != nil { -- return errors.Wrap(err, "failed to unmarshal genesis time") -- } -- -- genDoc.GenesisTime = t -- } -- -- chainID, _ := cmd.Flags().GetString(flags.FlagChainID) -- if chainID != "" { -- genDoc.ChainID = chainID -- } -- -- bz, err := tmjson.Marshal(genDoc) -- if err != nil { -- return errors.Wrap(err, "failed to marshal genesis doc") -- } -- -- sortedBz, err := sdk.SortJSON(bz) -- if err != nil { -- return errors.Wrap(err, "failed to sort JSON genesis doc") -- } -- -- cmd.Println(string(sortedBz)) -- return nil -+ return MigrateHandler(cmd, args, migrationMap) - }, - } - -@@ -137,3 +71,75 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 - - return cmd - } -+ -+// MigrateHandler handles the migration command with a migration map as input, -+// returning an error upon failure. -+func MigrateHandler(cmd *cobra.Command, args []string, migrations types.MigrationMap) error { -+ clientCtx := client.GetClientContextFromCmd(cmd) -+ -+ var err error -+ -+ target := args[0] -+ importGenesis := args[1] -+ -+ genDoc, err := validateGenDoc(importGenesis) -+ if err != nil { -+ return err -+ } -+ -+ // Since some default values are valid values, we just print to -+ // make sure the user didn't forget to update these values. -+ if genDoc.ConsensusParams.Evidence.MaxBytes == 0 { -+ fmt.Printf("Warning: consensus_params.evidence.max_bytes is set to 0. If this is"+ -+ " deliberate, feel free to ignore this warning. If not, please have a look at the chain"+ -+ " upgrade guide at %s.\n", chainUpgradeGuide) -+ } -+ -+ var initialState types.AppMap -+ if err := json.Unmarshal(genDoc.AppState, &initialState); err != nil { -+ return errors.Wrap(err, "failed to JSON unmarshal initial genesis state") -+ } -+ -+ migrationFunc := migrations[target] -+ if migrationFunc == nil { -+ return fmt.Errorf("unknown migration function for version: %s", target) -+ } -+ -+ // TODO: handler error from migrationFunc call -+ newGenState := migrationFunc(initialState, clientCtx) -+ -+ genDoc.AppState, err = json.Marshal(newGenState) -+ if err != nil { -+ return errors.Wrap(err, "failed to JSON marshal migrated genesis state") -+ } -+ -+ genesisTime, _ := cmd.Flags().GetString(flagGenesisTime) -+ if genesisTime != "" { -+ var t time.Time -+ -+ err := t.UnmarshalText([]byte(genesisTime)) -+ if err != nil { -+ return errors.Wrap(err, "failed to unmarshal genesis time") -+ } -+ -+ genDoc.GenesisTime = t -+ } -+ -+ chainID, _ := cmd.Flags().GetString(flags.FlagChainID) -+ if chainID != "" { -+ genDoc.ChainID = chainID -+ } -+ -+ bz, err := tmjson.Marshal(genDoc) -+ if err != nil { -+ return errors.Wrap(err, "failed to marshal genesis doc") -+ } -+ -+ sortedBz, err := sdk.SortJSON(bz) -+ if err != nil { -+ return errors.Wrap(err, "failed to sort JSON genesis doc") -+ } -+ -+ cmd.Println(string(sortedBz)) -+ return nil -+} -diff --git a/x/gov/keeper/vote.go b/x/gov/keeper/vote.go -index 4e2436ff84..8fa690eeca 100644 ---- a/x/gov/keeper/vote.go -+++ b/x/gov/keeper/vote.go -@@ -38,6 +38,7 @@ func (keeper Keeper) AddVote(ctx sdk.Context, proposalID uint64, voterAddr sdk.A - ctx.EventManager().EmitEvent( - sdk.NewEvent( - types.EventTypeProposalVote, -+ sdk.NewAttribute(types.AttributeKeyVoter, voterAddr.String()), - sdk.NewAttribute(types.AttributeKeyOption, options.String()), - sdk.NewAttribute(types.AttributeKeyProposalID, fmt.Sprintf("%d", proposalID)), - ), -diff --git a/x/gov/types/events.go b/x/gov/types/events.go -index 7217e7e387..9468c0fc98 100644 ---- a/x/gov/types/events.go -+++ b/x/gov/types/events.go -@@ -10,6 +10,7 @@ const ( - EventTypeSignalProposal = "signal_proposal" - - AttributeKeyProposalResult = "proposal_result" -+ AttributeKeyVoter = "voter" - AttributeKeyOption = "option" - AttributeKeyProposalID = "proposal_id" - AttributeKeyProposalMessages = "proposal_messages" // Msg type_urls in the proposal -diff --git a/x/gov/types/v1/msgs.go b/x/gov/types/v1/msgs.go -index dd83bf5dfa..e78121b0ab 100644 ---- a/x/gov/types/v1/msgs.go -+++ b/x/gov/types/v1/msgs.go -@@ -40,6 +40,18 @@ func (m *MsgSubmitProposal) GetMsgs() ([]sdk.Msg, error) { - return sdktx.GetMsgs(m.Messages, "sdk.MsgProposal") - } - -+// SetMsgs packs sdk.Msg's into m.Messages Any's -+// NOTE: this will overwrite any existing messages -+func (m *MsgSubmitProposal) SetMsgs(msgs []sdk.Msg) error { -+ anys, err := sdktx.SetMsgs(msgs) -+ if err != nil { -+ return err -+ } -+ -+ m.Messages = anys -+ return nil -+} -+ - // Route implements Msg - func (m MsgSubmitProposal) Route() string { return types.RouterKey } - From 1692f53a3e49e5b8c1bfbe09504006b628942467 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 6 Nov 2023 19:44:18 +0100 Subject: [PATCH 03/10] docs: translate git diff into README list --- README.md | 100 ++++++++++++++++-------------------------------- baseapp/abci.go | 6 +-- 2 files changed, 36 insertions(+), 70 deletions(-) diff --git a/README.md b/README.md index 02f12fd6173d..d673d475813e 100644 --- a/README.md +++ b/README.md @@ -1,81 +1,49 @@ - +# cosmos-sdk -
-

Cosmos SDK

-
+This repo is a fork of the [cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) with the following changes: -![banner](docs/cosmos-sdk-image.jpg) +## Changes - - +Rationale for the fork -The Cosmos SDK is a framework for building blockchain applications. [Tendermint Core (BFT Consensus)](https://github.com/tendermint/tendermint) and the Cosmos SDK are written in the Golang programming language. Cosmos SDK is used to build [Gaia](https://github.com/cosmos/gaia), the first implementation of the Cosmos Hub. +1. Early adoption of `PrepareProposal` and `ProcessProposal`. This was added to the fork because at the time of development, a Cosmos SDK release was not available with these ABCI methods. +1. The addition of `chainID` to baseapp. (TODO: why?) +1. Overriding the consensus params version to the app version. (TODO: why?) -**WARNING**: The Cosmos SDK has mostly stabilized, but we are still making some -breaking changes. +Smaller changes -**Note**: Requires [Go 1.19+](https://go.dev/dl) +1. The addition of a `SetTxDecoder` on tx config +1. `start_time` added to vesting MsgCreateVestingAccount +1. In server/util.go remove `conf.Consensus.TimeoutCommit = 5 * time.Second` +1. In genutil/client/cli/init.go ensure that the node starts with DefaultConsensusParams + 1. In server/util.go add DefaultConsensusParams on Context +1. In auth/tx/query.go disable the prove flag when querying transactions +1. Add a voter attribute to the EventTypeProposalVote event -## Quick Start +Changes made that we may be able to revert -To learn how the Cosmos SDK works from a high-level perspective, see the Cosmos SDK [High-Level Intro](./docs/intro/overview.md). +1. Override the default keyringBackend from `os` to `test`. Maybe move to celestia-app +1. Increase DefaultGasLimit from `200000` to `210000`. Why? If we needed, can we move this to celestia-app? +1. Remove `Evidence` from grpc/tmservice/types.pb.go. Why? seems residual and we can prob revert this. +1. `SignLedgerAminoJSON` in keyring b/c Ledger issue. Can potentially revert by downgrading to cosmos-ledger-go 0.12.4 +1. Override simapp test helpers `DefaultGenTxGas` from 10000000 to 2600000 -If you want to get started quickly and learn how to build on top of Cosmos SDK, visit [Cosmos SDK Tutorials](https://tutorials.cosmos.network). You can also fork the tutorial's repository to get started building your own Cosmos SDK application. +Changes made to make it easier to maintain this fork -For more information, see the [Cosmos SDK Documentation](./docs/). +1. Modify CODEOWNERS to Celestia maintainers +1. Modify Github CI workflows to include `release/**` branches +1. Modify Github CI workflows to not run some things +1. Disable staticcheck golangci lint +1. Delete cosmovisor -## Contributing - -See [CONTRIBUTING.md](./CONTRIBUTING.md) for details how to contribute and participate in our [dev calls](./CONTRIBUTING.md#teams-dev-calls). -If you want to follow the updates or learn more about the latest design then join our [Discord](https://discord.com/invite/cosmosnetwork). - -## Tools and Frameworks - -The Cosmos ecosystem is vast. We will only make a few notable mentions here. - -+ [Tools](https://v1.cosmos.network/tools): notable frameworks and modules. -+ [CosmJS](https://github.com/cosmos/cosmjs): the Swiss Army knife to power JavaScript based client solutions. +## Branches -### Cosmos Hub Mainnet +1. [v0.46.x-celestia](https://github.com/celestiaorg/cosmos-sdk/tree/release/v0.46.x-celestia) is based on the `v0.46.x` release branch from upstream +2. [main](https://github.com/celestiaorg/cosmos-sdk/tree/main) contains breaking changes (TODO: elaborate on why?) -The Cosmos Hub application, `gaia`, has moved to its own [cosmos/gaia repository](https://github.com/cosmos/gaia). Go there to join the Cosmos Hub mainnet and more. - -### Inter-Blockchain Communication (IBC) - -The IBC module for the Cosmos SDK has moved to its own [cosmos/ibc-go repository](https://github.com/cosmos/ibc-go). Go there to build and integrate with the IBC module. - -### Ignite CLI - -Ignite CLI is the all-in-one platform to build, launch, and maintain any crypto application on a sovereign and secured blockchain. If you are building a new app or a new module, use [Ignite CLI](https://github.com/ignite-hq/cli) to get started and speed up development. +## Contributing -## Disambiguation +This repo intends on preserving the minimal possible diff with cometbft/cometbft to make fetching upstream changes easy. If the proposed contribution is -This Cosmos SDK project is not related to the [React-Cosmos](https://github.com/react-cosmos/react-cosmos) project (yet). Many thanks to Evan Coury and Ovidiu (@skidding) for this Github organization name. As per our agreement, this disambiguation notice will stay here. +* specific to Celestia: consider if [celestia-app](https://github.com/celestiaorg/celestia-app) is a better target +* not specific to Celestia: consider making the contribution upstream in [cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) diff --git a/baseapp/abci.go b/baseapp/abci.go index 00d908f05808..f1625e53c138 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -296,19 +296,17 @@ func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) (res abci.ResponseDeliv } } -// PreprocessTxs fullfills the celestia-core version of the ACBI interface. It +// PrepareProposal fullfills the celestia-core version of the ACBI interface. It // allows for arbitrary processing steps before transaction data is included in // the block. func (app *BaseApp) PrepareProposal(req abci.RequestPrepareProposal) abci.ResponsePrepareProposal { - // TODO(evan): fully implement - // pass through txs w/o processing for now return abci.ResponsePrepareProposal{ BlockData: req.BlockData, } } // ProcessProposal fulfills the celestia-core version of the ABCI++ interface. -// It allows for arbitrary processing to occur after receiving a proposal block +// It allows for arbitrary processing to occur after receiving a proposal block. func (app *BaseApp) ProcessProposal(req abci.RequestProcessProposal) abci.ResponseProcessProposal { return abci.ResponseProcessProposal{ Result: abci.ResponseProcessProposal_ACCEPT, From 97d6704a0644521a1f7985abf18693347ab18818 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 6 Nov 2023 20:19:20 +0100 Subject: [PATCH 04/10] docs: reorder modifications --- README.md | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index d673d475813e..30d78115ceb6 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,44 @@ # cosmos-sdk -This repo is a fork of the [cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) with the following changes: +This repo is a fork of [cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) with a few modifications. -## Changes +## Modifications -Rationale for the fork +Larger modifications include: 1. Early adoption of `PrepareProposal` and `ProcessProposal`. This was added to the fork because at the time of development, a Cosmos SDK release was not available with these ABCI methods. -1. The addition of `chainID` to baseapp. (TODO: why?) -1. Overriding the consensus params version to the app version. (TODO: why?) +1. The addition of `chainID` to baseapp. +1. Overriding the consensus params version to the app version. -Smaller changes +Smaller modifications include: + +1. The addition of a `SetTxDecoder` on tx config so that celestia-app can override the default tx decoder with one that supports decoding `BlobTx`s. +1. The addition of a `start_time` to the vesting module's `MsgCreateVestingAccount` so that vesting accounts can be created with a delayed start time. +1. The addition of a voter attribute to the `EventTypeProposalVote` event + +Modifications that need to be investigated: -1. The addition of a `SetTxDecoder` on tx config -1. `start_time` added to vesting MsgCreateVestingAccount 1. In server/util.go remove `conf.Consensus.TimeoutCommit = 5 * time.Second` 1. In genutil/client/cli/init.go ensure that the node starts with DefaultConsensusParams 1. In server/util.go add DefaultConsensusParams on Context -1. In auth/tx/query.go disable the prove flag when querying transactions -1. Add a voter attribute to the EventTypeProposalVote event - -Changes made that we may be able to revert - -1. Override the default keyringBackend from `os` to `test`. Maybe move to celestia-app -1. Increase DefaultGasLimit from `200000` to `210000`. Why? If we needed, can we move this to celestia-app? -1. Remove `Evidence` from grpc/tmservice/types.pb.go. Why? seems residual and we can prob revert this. -1. `SignLedgerAminoJSON` in keyring b/c Ledger issue. Can potentially revert by downgrading to cosmos-ledger-go 0.12.4 -1. Override simapp test helpers `DefaultGenTxGas` from 10000000 to 2600000 -Changes made to make it easier to maintain this fork +Modifications that make it easier to maintain this fork: 1. Modify CODEOWNERS to Celestia maintainers 1. Modify Github CI workflows to include `release/**` branches 1. Modify Github CI workflows to not run some things -1. Disable staticcheck golangci lint 1. Delete cosmovisor +Modifications that may be revertable: + +1. Override the default keyringBackend from `os` to `test`. Maybe move to celestia-app +1. Increase `DefaultGasLimit` from 200000 to 210000. +1. Remove `Evidence` from grpc/tmservice/types.pb.go. +1. The addition of `SignLedgerAminoJSON` in keyring b/c Ledger issue. +1. Override simapp test helpers `DefaultGenTxGas` from 10000000 to 2600000. +1. Disable staticcheck golangci lint after fixing lint errors. +1. In auth/tx/query.go disable the prove flag when querying transactions + ## Branches 1. [v0.46.x-celestia](https://github.com/celestiaorg/cosmos-sdk/tree/release/v0.46.x-celestia) is based on the `v0.46.x` release branch from upstream From 2dc9e9597a69c7130a38a80430b65ac5f261186b Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 6 Nov 2023 20:29:06 +0100 Subject: [PATCH 05/10] docs: celestia-app can override the default consensus params via init --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 30d78115ceb6..9628927e8da0 100644 --- a/README.md +++ b/README.md @@ -15,18 +15,17 @@ Smaller modifications include: 1. The addition of a `SetTxDecoder` on tx config so that celestia-app can override the default tx decoder with one that supports decoding `BlobTx`s. 1. The addition of a `start_time` to the vesting module's `MsgCreateVestingAccount` so that vesting accounts can be created with a delayed start time. 1. The addition of a voter attribute to the `EventTypeProposalVote` event +1. Allow celestia-app to override the default consensus params via the `init` command Modifications that need to be investigated: 1. In server/util.go remove `conf.Consensus.TimeoutCommit = 5 * time.Second` -1. In genutil/client/cli/init.go ensure that the node starts with DefaultConsensusParams - 1. In server/util.go add DefaultConsensusParams on Context Modifications that make it easier to maintain this fork: 1. Modify CODEOWNERS to Celestia maintainers 1. Modify Github CI workflows to include `release/**` branches -1. Modify Github CI workflows to not run some things +1. Modify Github CI workflows to not run some workflows 1. Delete cosmovisor Modifications that may be revertable: @@ -42,11 +41,10 @@ Modifications that may be revertable: ## Branches 1. [v0.46.x-celestia](https://github.com/celestiaorg/cosmos-sdk/tree/release/v0.46.x-celestia) is based on the `v0.46.x` release branch from upstream -2. [main](https://github.com/celestiaorg/cosmos-sdk/tree/main) contains breaking changes (TODO: elaborate on why?) ## Contributing -This repo intends on preserving the minimal possible diff with cometbft/cometbft to make fetching upstream changes easy. If the proposed contribution is +This repo intends on preserving the minimal possible diff with [cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) to make fetching upstream changes easy. If the proposed contribution is * specific to Celestia: consider if [celestia-app](https://github.com/celestiaorg/celestia-app) is a better target * not specific to Celestia: consider making the contribution upstream in [cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) From 5540b8209366a18076efbc7ed0409fe1190d41cc Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 6 Nov 2023 20:45:10 +0100 Subject: [PATCH 06/10] docs: add links for the larger modifications --- README.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 9628927e8da0..438bf635fe7b 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ This repo is a fork of [cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) Larger modifications include: -1. Early adoption of `PrepareProposal` and `ProcessProposal`. This was added to the fork because at the time of development, a Cosmos SDK release was not available with these ABCI methods. -1. The addition of `chainID` to baseapp. -1. Overriding the consensus params version to the app version. +1. Early adoption of `PrepareProposal` and `ProcessProposal`. This was added to the fork because at the time of development, a Cosmos SDK release was not available with these ABCI methods. Ref: https://github.com/celestiaorg/cosmos-sdk/commit/233a229cabf0599aed91b6b6697c268753731b2c +1. The addition of `chainID` to baseapp so that a branch of state can be used in PrepareProposal and ProcessProposal. Ref: https://github.com/celestiaorg/cosmos-sdk/pull/326 +1. The consensus params version is overriden to the `AppVersion` to enable EndBlocker to update the `AppVersion`. Ref: https://github.com/celestiaorg/cosmos-sdk/pull/321 Smaller modifications include: @@ -17,10 +17,6 @@ Smaller modifications include: 1. The addition of a voter attribute to the `EventTypeProposalVote` event 1. Allow celestia-app to override the default consensus params via the `init` command -Modifications that need to be investigated: - -1. In server/util.go remove `conf.Consensus.TimeoutCommit = 5 * time.Second` - Modifications that make it easier to maintain this fork: 1. Modify CODEOWNERS to Celestia maintainers @@ -37,6 +33,7 @@ Modifications that may be revertable: 1. Override simapp test helpers `DefaultGenTxGas` from 10000000 to 2600000. 1. Disable staticcheck golangci lint after fixing lint errors. 1. In auth/tx/query.go disable the prove flag when querying transactions +1. In server/util.go remove `conf.Consensus.TimeoutCommit = 5 * time.Second` ## Branches From d1fc1acbe732b859eaf43e7f18ff6b30a3226565 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 6 Nov 2023 20:51:33 +0100 Subject: [PATCH 07/10] docs: add more links --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 438bf635fe7b..8440c45ead1c 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,10 @@ Larger modifications include: Smaller modifications include: -1. The addition of a `SetTxDecoder` on tx config so that celestia-app can override the default tx decoder with one that supports decoding `BlobTx`s. -1. The addition of a `start_time` to the vesting module's `MsgCreateVestingAccount` so that vesting accounts can be created with a delayed start time. -1. The addition of a voter attribute to the `EventTypeProposalVote` event -1. Allow celestia-app to override the default consensus params via the `init` command +1. The addition of a `SetTxDecoder` on tx config so that celestia-app can override the default tx decoder with one that supports decoding `BlobTx`s. Ref: https://github.com/celestiaorg/cosmos-sdk/pull/311 +1. The addition of a `start_time` to the vesting module's `MsgCreateVestingAccount` so that vesting accounts can be created with a delayed start time. Ref: https://github.com/celestiaorg/cosmos-sdk/pull/342 +1. Allow celestia-app to override the default consensus params via the `init` command. Ref: https://github.com/celestiaorg/cosmos-sdk/pull/317 +1. The addition of a voter attribute to the `EventTypeProposalVote` event. Modifications that make it easier to maintain this fork: From ef5a6b8b49fb38d2fa338f39b1a26c634d9863c2 Mon Sep 17 00:00:00 2001 From: Rootul Patel Date: Mon, 6 Nov 2023 20:51:44 +0100 Subject: [PATCH 08/10] docs: voter exists on v0.46.x - https://github.com/cosmos/cosmos-sdk/blob/41d2a21c134846493a9205489f42379ebf9ab1e6/x/gov/keeper/vote.go#L41C4-L41C4 --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 8440c45ead1c..ec477173b3f1 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,6 @@ Smaller modifications include: 1. The addition of a `SetTxDecoder` on tx config so that celestia-app can override the default tx decoder with one that supports decoding `BlobTx`s. Ref: https://github.com/celestiaorg/cosmos-sdk/pull/311 1. The addition of a `start_time` to the vesting module's `MsgCreateVestingAccount` so that vesting accounts can be created with a delayed start time. Ref: https://github.com/celestiaorg/cosmos-sdk/pull/342 1. Allow celestia-app to override the default consensus params via the `init` command. Ref: https://github.com/celestiaorg/cosmos-sdk/pull/317 -1. The addition of a voter attribute to the `EventTypeProposalVote` event. Modifications that make it easier to maintain this fork: From a7f70fae6e72b9864f7073c760f66c1247c2b1de Mon Sep 17 00:00:00 2001 From: Rootul P Date: Tue, 14 Nov 2023 11:05:57 -0500 Subject: [PATCH 09/10] Update baseapp/abci.go Co-authored-by: Callum Waters --- baseapp/abci.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/baseapp/abci.go b/baseapp/abci.go index f1625e53c138..4c2a06564b28 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -296,7 +296,7 @@ func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) (res abci.ResponseDeliv } } -// PrepareProposal fullfills the celestia-core version of the ACBI interface. It +// PrepareProposal fullfills the celestia-core version of the ABCI interface. It // allows for arbitrary processing steps before transaction data is included in // the block. func (app *BaseApp) PrepareProposal(req abci.RequestPrepareProposal) abci.ResponsePrepareProposal { From 7a628aa13bf4a7abf0b7474eac1c5fb0e3be68c8 Mon Sep 17 00:00:00 2001 From: Rootul P Date: Tue, 14 Nov 2023 11:06:03 -0500 Subject: [PATCH 10/10] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index ec477173b3f1..650b00c2628f 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,6 @@ Modifications that may be revertable: 1. Override the default keyringBackend from `os` to `test`. Maybe move to celestia-app 1. Increase `DefaultGasLimit` from 200000 to 210000. 1. Remove `Evidence` from grpc/tmservice/types.pb.go. -1. The addition of `SignLedgerAminoJSON` in keyring b/c Ledger issue. 1. Override simapp test helpers `DefaultGenTxGas` from 10000000 to 2600000. 1. Disable staticcheck golangci lint after fixing lint errors. 1. In auth/tx/query.go disable the prove flag when querying transactions