diff --git a/.dockerignore b/.dockerignore index b00ed9203..7faa7d499 100644 --- a/.dockerignore +++ b/.dockerignore @@ -18,6 +18,9 @@ .github/ .git/ +# OSX related files +.DS_Store + # Docker related files docker/ .dockerignore @@ -26,9 +29,8 @@ docker-compose.yml # dist packages dist/ -# OSX related files -.DS_Store -/hornet +# Integration test related files +integration-tests/ # Database directory privatedb*/ @@ -39,6 +41,9 @@ p2pstore*/ # snapshot dir snapshots/ +# private tangle +private_tangle/ + # log files hornet.log integration-tests/logs/*.log @@ -48,3 +53,13 @@ integration-tests/logs/*.profile # coordinator files coordinator.state migrator.state + +# Documentation +documentation/ + +# Scripts + Tools +scripts/ +tools/ + +# Executable +/hornet diff --git a/.github/workflows/build_HORNET.yml b/.github/workflows/build_HORNET.yml index fd591f13f..d64a62d85 100644 --- a/.github/workflows/build_HORNET.yml +++ b/.github/workflows/build_HORNET.yml @@ -4,6 +4,10 @@ on: pull_request: paths-ignore: - 'documentation/**' + - 'nfpm/**' + - 'private_tangle/**' + - 'scripts/**' + - 'tools/**' jobs: build: @@ -11,16 +15,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Go - uses: actions/setup-go@v1 + uses: actions/setup-go@v3 with: - go-version: 1.18 + go-version: 1.19 id: go - name: Print Go version run: go version - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Build HORNET run: go build -v . diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index 7d31a2464..5fe2aee06 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Build HORNET Docker image run: docker build . --file docker/Dockerfile --tag hornet:latest diff --git a/.github/workflows/codeql_analysis.yml b/.github/workflows/codeql_analysis.yml index 7d494f2a4..6dee2321d 100644 --- a/.github/workflows/codeql_analysis.yml +++ b/.github/workflows/codeql_analysis.yml @@ -22,20 +22,21 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: ref: develop # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} + queries: security-and-quality # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 8e69c8738..a895cc58e 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -4,6 +4,11 @@ on: pull_request: paths-ignore: - 'documentation/**' + - 'docker/**' + - 'nfpm/**' + - 'private_tangle/**' + - 'scripts/**' + - 'tools/**' jobs: golangci-lint: @@ -11,11 +16,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: golangci-lint uses: reviewdog/action-golangci-lint@v2 with: + version: v1.50.1 github_token: ${{ secrets.GITHUB_TOKEN }} golangci_lint_flags: "--timeout=10m" - reporter: "github-pr-review" + reporter: github-pr-check + filter_mode: nofilter + fail_on_error: true diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index f75957f91..1ce7be6a6 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -4,6 +4,11 @@ on: pull_request: paths-ignore: - 'documentation/**' + - 'docker/**' + - 'nfpm/**' + - 'private_tangle/**' + - 'scripts/**' + - 'tools/**' jobs: @@ -14,7 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Build HORNET image run: docker build -f docker/Dockerfile -t hornet:dev . @@ -25,7 +30,7 @@ jobs: docker pull gaiadocker/iproute2:latest - name: Run integration tests - run: docker-compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build + run: docker compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build - name: Create logs from tester if: always() @@ -47,7 +52,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Build HORNET image run: docker build -f docker/Dockerfile -t hornet:dev . @@ -58,7 +63,7 @@ jobs: docker pull gaiadocker/iproute2:latest - name: Run integration tests - run: docker-compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build + run: docker compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build - name: Create logs from tester if: always() @@ -80,7 +85,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Build HORNET image run: docker build -f docker/Dockerfile -t hornet:dev . @@ -92,7 +97,7 @@ jobs: docker build github.com/iotaledger/chrysalis-tools#:wfmock -t wfmock:latest - name: Run integration tests - run: docker-compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build + run: docker compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build - name: Create logs from tester if: always() @@ -114,7 +119,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Build HORNET image run: docker build -f docker/Dockerfile -t hornet:dev . @@ -125,7 +130,7 @@ jobs: docker pull gaiadocker/iproute2:latest - name: Run integration tests - run: docker-compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build + run: docker compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build - name: Create logs from tester if: always() @@ -147,7 +152,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Build HORNET image run: docker build -f docker/Dockerfile -t hornet:dev . @@ -158,7 +163,7 @@ jobs: docker pull gaiadocker/iproute2:latest - name: Run integration tests - run: docker-compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build + run: docker compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build - name: Create logs from tester if: always() @@ -172,36 +177,3 @@ jobs: with: name: ${{ env.TEST_NAME }} path: integration-tests/logs - -# benchmark: -# name: benchmark -# env: -# TEST_NAME: benchmark -# runs-on: ubuntu-latest -# steps: -# - name: Check out code into the Go module directory -# uses: actions/checkout@v2 - -# - name: Build HORNET image -# run: docker build -f docker/Dockerfile -t hornet:dev . - -# - name: Pull additional Docker images -# run: | -# docker pull gaiaadm/pumba:0.7.4 -# docker pull gaiadocker/iproute2:latest - -# - name: Run integration tests -# run: docker-compose -f integration-tests/tester/docker-compose.yml up --abort-on-container-exit --exit-code-from tester --build - -# - name: Create logs from tester -# if: always() -# run: | -# sudo chmod 777 integration-tests/logs -# docker logs tester &> integration-tests/logs/tester.log - -# - name: Save logs as artifacts -# if: always() -# uses: actions/upload-artifact@v2 -# with: -# name: ${{ env.TEST_NAME }} -# path: integration-tests/logs \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d353ce313..f808b52e8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,11 +9,11 @@ jobs: name: Release Binaries runs-on: ubuntu-latest container: - image: gohornet/goreleaser-cgo-cross-compiler:1.18 + image: iotaledger/goreleaser-cgo-cross-compiler:1.19.4 volumes: [/repo] steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Release HORNET run: goreleaser --rm-dist @@ -24,37 +24,40 @@ jobs: TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }} TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} - docker: + release-docker: name: Release Docker runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Docker meta id: meta - uses: docker/metadata-action@v3 + uses: docker/metadata-action@v4 with: - images: gohornet/hornet + images: iotaledger/hornet tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} + type=match,pattern=v(\d+.\d+),suffix=-alpha,group=1,enable=${{ contains(github.ref, '-alpha') }} + type=match,pattern=v(\d+.\d+),suffix=-beta,group=1,enable=${{ contains(github.ref, '-beta') }} + type=match,pattern=v(\d+.\d+),suffix=-rc,group=1,enable=${{ contains(github.ref, '-rc') }} - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + username: ${{ secrets.IOTALEDGER_DOCKER_USERNAME }} + password: ${{ secrets.IOTALEDGER_DOCKER_PASSWORD }} - name: Build and push to Dockerhub - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: file: ./docker/Dockerfile platforms: linux/amd64,linux/arm64 diff --git a/.github/workflows/snyk-test-golang.yml b/.github/workflows/snyk-test-golang.yml index 79f81a573..2fd8dda8f 100644 --- a/.github/workflows/snyk-test-golang.yml +++ b/.github/workflows/snyk-test-golang.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: ref: develop @@ -19,4 +19,4 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} with: - args: --org=gohornet + args: --org=iotaledger diff --git a/.github/workflows/test_HORNET.yml b/.github/workflows/test_HORNET.yml index 75e6cb562..dd72040ce 100644 --- a/.github/workflows/test_HORNET.yml +++ b/.github/workflows/test_HORNET.yml @@ -4,6 +4,10 @@ on: pull_request: paths-ignore: - 'documentation/**' + - 'nfpm/**' + - 'private_tangle/**' + - 'scripts/**' + - 'tools/**' jobs: test: @@ -11,9 +15,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Go - uses: actions/setup-go@v1 + uses: actions/setup-go@v3 with: - go-version: 1.18 + go-version: 1.19 id: go - name: Print Go version @@ -23,7 +27,7 @@ jobs: run: sudo apt update && sudo apt install build-essential -y - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Test HORNET uses: nick-invision/retry@v2 diff --git a/.github/workflows/test_release.yml b/.github/workflows/test_release.yml index 07e5b52c3..7c9fbbea5 100644 --- a/.github/workflows/test_release.yml +++ b/.github/workflows/test_release.yml @@ -3,18 +3,21 @@ name: Test release on: pull_request: paths-ignore: - - "documentation/**" + - 'documentation/**' + - 'private_tangle/**' + - 'scripts/**' + - 'tools/**' jobs: Release: name: Test release runs-on: [ubuntu-latest] container: - image: gohornet/goreleaser-cgo-cross-compiler:1.18 + image: iotaledger/goreleaser-cgo-cross-compiler:1.19.4 volumes: [/repo] steps: - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Test HORNET Release run: goreleaser --snapshot --skip-publish --rm-dist diff --git a/.golangci.yml b/.golangci.yml index ee176c350..791fc2aaa 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -5,7 +5,7 @@ linters-settings: gofmt: simplify: true goimports: - local-prefixes: github.com/gohornet,github.com/iotaledger + local-prefixes: github.com/iotaledger golint: min-confidence: 0.9 gocyclo: diff --git a/.goreleaser.yml b/.goreleaser.yml index 0da942b6b..b5a105af4 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -15,7 +15,7 @@ builds: flags: - -tags=builtin_static,rocksdb ldflags: - - -s -w -X github.com/gohornet/hornet/core/cli.AppVersion={{.Version}} + - -s -w -X github.com/iotaledger/hornet/core/cli.AppVersion={{.Version}} main: main.go goos: - linux @@ -31,7 +31,7 @@ builds: - CC=aarch64-linux-gnu-gcc - CXX=aarch64-linux-gnu-g++ ldflags: - - -s -w -X github.com/gohornet/hornet/core/cli.AppVersion={{.Version}} + - -s -w -X github.com/iotaledger/hornet/core/cli.AppVersion={{.Version}} main: main.go goos: - linux @@ -47,7 +47,7 @@ builds: # - CC=/usr/bin/x86_64-w64-mingw32-gcc-posix # - CXX=/usr/bin/x86_64-w64-mingw32-g++-posix # ldflags: - # - -s -w -X github.com/gohornet/hornet/core/cli.AppVersion={{.Version}} + # - -s -w -X github.com/iotaledger/hornet/core/cli.AppVersion={{.Version}} # main: main.go # goos: # - windows @@ -93,7 +93,7 @@ nfpms: vendor: GoReleaser license: Apache 2.0 maintainer: GoHORNET - homepage: https://github.com/gohornet/hornet + homepage: https://github.com/iotaledger/hornet description: HORNET is a powerful IOTA fullnode software. formats: - deb @@ -194,5 +194,5 @@ release: prerelease: auto name_template: "{{.ProjectName}}-{{.Version}}" github: - owner: gohornet + owner: iotaledger name: hornet diff --git a/CHANGELOG.md b/CHANGELOG.md index 10d409931..57e7ca6aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,40 @@ All notable changes to this project will be documented in this file. +## [1.2.2] - 09.01.2023 + +### Fixed + - Make event execution async from peer mng to gossip service (#1565) + - Fix libp2p connection issue (#1805) + - Send correct error message if a block is submitted without parents and no PoW is enabled (#1805) + - Avoid locking of the p2p Manager while connection attempts are performed (#1805) + - Block static peers in autopeering module (#1805) + - Fix stuck peer (#1805) + - Fix edge case in warpsync which deadlocks syncing (#1805) + - Fix syncing issue by preventing requests race condition (#1805) + +### Changed + - Drop unhealthy peers (#1805) + - Drop peers that are below our pruning index (#1805) + - Solidify messages synchronously while they are processed (#1805) + - Read info from SyncManager atomically (#1805) + +### Added + - Add REST API PoW metrics to prometheus (#1480) + - Add new /api/routes endpoint (#1805) + - Add per-request Rest metrics to prometheus (#1805) + - Add new config param to disable snapshot file creation. Defaults to false (#1805) + - Add config parameter to control whether the ledger state is checked on startup. Defaults to false (#1805) + - Add /metadata, /raw, /children endpoints to /included-message (#1805) + +### Chore + - Update Tangle Bay urls (#1522) + - Update go version to 1.19 (#1805) + - Upgrade libp2p to monorepo version (#1805) + - Extend dockerignore (#1805) + - Github workflow updates (#1805) + + ## [1.2.1] - 29.04.2022 ### Fixed diff --git a/README.md b/README.md index 124d361ea..62b6fabca 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# HORNET - The IOTA community node +# HORNET - The IOTA node -![GitHub Workflow Status](https://img.shields.io/github/workflow/status/gohornet/hornet/Build?style=for-the-badge) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/gohornet/hornet?style=for-the-badge) ![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/gohornet/hornet?style=for-the-badge) ![GitHub](https://img.shields.io/github/license/gohornet/hornet?style=for-the-badge) +![GitHub Workflow Status](https://img.shields.io/github/workflow/status/iotaledger/hornet/Build?style=for-the-badge) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/iotaledger/hornet?style=for-the-badge) ![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/iotaledger/hornet?style=for-the-badge) ![GitHub](https://img.shields.io/github/license/iotaledger/hornet?style=for-the-badge) -

+

HORNET is a powerful, community driven IOTA fullnode software written in Go. It is easy to install and maintain. @@ -19,7 +19,7 @@ In this repository you will find the following branches: ## Notes -- **Please open a [new issue](https://github.com/gohornet/hornet/issues/new) if you detect an error or crash (or submit a PR if you have already fixed it).** +- **Please open a [new issue](https://github.com/iotaledger/hornet/issues/new) if you detect an error or crash (or submit a PR if you have already fixed it).** - **The issue section is not a support section, if you have questions about HORNET please post them in the `#hornet` channel ([official iota discord server](https://discord.iota.org/)).** --- @@ -28,7 +28,7 @@ _Table of contents_ -- [HORNET - The IOTA community node](#hornet---the-iota-community-node) +- [HORNET - The IOTA node](#hornet---the-iota-node) - [Notes](#notes) - [Documentation](#documentation) - [Contributing](#contributing) diff --git a/config.json b/config.json index 0b691f412..736f68d94 100644 --- a/config.json +++ b/config.json @@ -7,6 +7,7 @@ "publicRoutes": [ "/health", "/mqtt", + "/api/routes", "/api/v1/info", "/api/v1/tips", "/api/v1/messages*", @@ -44,9 +45,11 @@ "db": { "engine": "rocksdb", "path": "mainnetdb", - "autoRevalidation": false + "autoRevalidation": false, + "checkLedgerStateOnStartup": false }, "snapshots": { + "enabled": false, "depth": 50, "interval": 200, "fullPath": "snapshots/mainnet/full_snapshot.bin", diff --git a/config_devnet.json b/config_devnet.json index 3f86eb941..3e46731f9 100644 --- a/config_devnet.json +++ b/config_devnet.json @@ -7,6 +7,7 @@ "publicRoutes": [ "/health", "/mqtt", + "/api/routes", "/api/v1/info", "/api/v1/tips", "/api/v1/messages*", @@ -45,9 +46,11 @@ "db": { "engine": "rocksdb", "path": "devnetdb", - "autoRevalidation": false + "autoRevalidation": false, + "checkLedgerStateOnStartup": false }, "snapshots": { + "enabled": false, "depth": 50, "interval": 200, "fullPath": "snapshots/devnet/full_snapshot.bin", diff --git a/core/app/app.go b/core/app/app.go index 49b011d02..cc66d8041 100644 --- a/core/app/app.go +++ b/core/app/app.go @@ -9,11 +9,11 @@ import ( flag "github.com/spf13/pflag" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/app" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/toolset" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/hornet/pkg/app" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/toolset" ) var ( @@ -21,7 +21,7 @@ var ( Name = "HORNET" // Version of the app. - Version = "1.2.1" + Version = "1.2.2" ) var ( diff --git a/core/app/params.go b/core/app/params.go index 7842ee73d..c127eface 100644 --- a/core/app/params.go +++ b/core/app/params.go @@ -3,7 +3,7 @@ package app import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/core/database/core.go b/core/database/core.go index 17ae71946..bec3a0263 100644 --- a/core/database/core.go +++ b/core/database/core.go @@ -4,23 +4,24 @@ import ( "context" "os" "path/filepath" + "time" flag "github.com/spf13/pflag" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/keymanager" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/profile" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/profile" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/utils" ) const ( @@ -61,8 +62,10 @@ var ( type dependencies struct { dig.In - TangleDatabase *database.Database `name:"tangleDatabase"` - UTXODatabase *database.Database `name:"utxoDatabase"` + NodeConfig *configuration.Configuration `name:"nodeConfig"` + TangleDatabase *database.Database `name:"tangleDatabase"` + UTXODatabase *database.Database `name:"utxoDatabase"` + UTXOManager *utxo.Manager Storage *storage.Storage StorageMetrics *metrics.StorageMetrics } @@ -284,6 +287,16 @@ func configure() { } } + if deps.NodeConfig.Bool(CfgCheckLedgerStateOnStartup) { + CorePlugin.LogInfo("Checking ledger state...") + ledgerStateCheckStart := time.Now() + if err := deps.UTXOManager.CheckLedgerState(); err != nil { + CorePlugin.LogError(err) + os.Exit(1) + } + CorePlugin.LogInfof("Checking ledger state... done. took %v", time.Since(ledgerStateCheckStart).Truncate(time.Millisecond)) + } + if err = CorePlugin.Daemon().BackgroundWorker("Close database", func(ctx context.Context) { <-ctx.Done() @@ -323,7 +336,7 @@ func configureEvents() { } func attachEvents() { - deps.Storage.Events.PruningStateChanged.Attach(onPruningStateChanged) + deps.Storage.Events.PruningStateChanged.Hook(onPruningStateChanged) } func detachEvents() { diff --git a/core/database/mapdb.go b/core/database/mapdb.go index 998eef3ac..a065e54d2 100644 --- a/core/database/mapdb.go +++ b/core/database/mapdb.go @@ -1,10 +1,10 @@ package database import ( - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/metrics" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/metrics" ) func newMapDB(metrics *metrics.DatabaseMetrics) *database.Database { diff --git a/core/database/params.go b/core/database/params.go index f27a43a55..20fd9390d 100644 --- a/core/database/params.go +++ b/core/database/params.go @@ -3,8 +3,8 @@ package database import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/node" ) const ( @@ -16,6 +16,8 @@ const ( CfgDatabaseAutoRevalidation = "db.autoRevalidation" // ignore the check for corrupted databases (should only be used for debug reasons). CfgDatabaseDebug = "db.debug" + // whether to check if the ledger state matches the total supply on startup + CfgCheckLedgerStateOnStartup = "db.checkLedgerStateOnStartup" ) var params = &node.PluginParams{ @@ -26,6 +28,7 @@ var params = &node.PluginParams{ fs.String(CfgDatabasePath, "mainnetdb", "the path to the database folder") fs.Bool(CfgDatabaseAutoRevalidation, false, "whether to automatically start revalidation on startup if the database is corrupted") fs.Bool(CfgDatabaseDebug, false, "ignore the check for corrupted databases (should only be used for debug reasons)") + fs.Bool(CfgCheckLedgerStateOnStartup, false, "whether to check if the ledger state matches the total supply on startup") return fs }(), }, diff --git a/core/database/pebble.go b/core/database/pebble.go index d874bc21e..eb307e33a 100644 --- a/core/database/pebble.go +++ b/core/database/pebble.go @@ -1,10 +1,10 @@ package database import ( - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/metrics" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/kvstore/pebble" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/metrics" ) func newPebble(path string, metrics *metrics.DatabaseMetrics) *database.Database { diff --git a/core/database/rocksdb.go b/core/database/rocksdb.go index 4962c927c..032ae638e 100644 --- a/core/database/rocksdb.go +++ b/core/database/rocksdb.go @@ -1,10 +1,10 @@ package database import ( - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/metrics" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/kvstore/rocksdb" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/metrics" ) func newRocksDB(path string, metrics *metrics.DatabaseMetrics) *database.Database { diff --git a/core/database/split.go b/core/database/split.go index bf953bad1..a71acc39c 100644 --- a/core/database/split.go +++ b/core/database/split.go @@ -2,14 +2,13 @@ package database import ( "fmt" - "io/ioutil" "os" "path/filepath" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/database" + "github.com/iotaledger/hive.go/ioutils" "github.com/iotaledger/hive.go/kvstore" - "github.com/iotaledger/hive.go/kvstore/utils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/database" ) const ( @@ -65,16 +64,16 @@ func SplitIntoTangleAndUTXO(databasePath string, dbEngine ...database.Engine) er return err } - if err := utils.CreateDirectory(tangleDatabasePath, 0700); err != nil { + if err := ioutils.CreateDirectory(tangleDatabasePath, 0700); err != nil { return err } - if err := utils.CreateDirectory(utxoDatabasePath, 0700); err != nil { + if err := ioutils.CreateDirectory(utxoDatabasePath, 0700); err != nil { return err } // Move the legacy database into the tangle directory - files, err := ioutil.ReadDir(legacyDatabasePath) + files, err := os.ReadDir(legacyDatabasePath) if err != nil { return err } diff --git a/core/gossip/core.go b/core/gossip/core.go index ddecfbfa6..fa98e8df9 100644 --- a/core/gossip/core.go +++ b/core/gossip/core.go @@ -2,29 +2,30 @@ package gossip import ( "context" + "errors" "fmt" "time" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/protocol" + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/profile" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/snapshot" - "github.com/gohornet/hornet/pkg/tangle" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/timeutil" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/profile" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/tangle" ) const ( @@ -258,43 +259,76 @@ func checkHeartbeats() { return time.Since(proto.HeartbeatSentTime) > heartbeatSentInterval }) - peersToReconnect := make(map[peer.ID]struct{}) + peersToRemove := make(map[peer.ID]error) + peersToReconnect := make(map[peer.ID]error) + + snapshotInfo := deps.Storage.SnapshotInfo() + if snapshotInfo == nil { + // we can't check the health of the peers without info about pruning index + return + } // check if peers are alive by checking whether we received heartbeats lately deps.GossipService.ForEach(func(proto *gossip.Protocol) bool { - // use a grace period before the heartbeat check is applied - if time.Since(proto.Stream.Stat().Opened) <= checkHeartbeatsInterval || - time.Since(proto.HeartbeatReceivedTime) < heartbeatReceiveTimeout { + protoStream := proto.Stream + if protoStream == nil { + // stream not established yet return true } - /* - // TODO: re-introduce once p2p discovery is implemented - // peer is connected but doesn't seem to be alive - if p.Autopeering != nil { - // it's better to drop the connection to autopeered peers and free the slots for other peers - peerIDsToRemove[p.ID] = struct{}{} - CorePlugin.LogInfof("dropping autopeered neighbor %s / %s because we didn't receive heartbeats anymore", p.Autopeering.ID(), p.Autopeering.ID()) - return true - } - */ + latestHeatbeat := proto.LatestHeartbeat + if latestHeatbeat == nil && time.Since(protoStream.Stat().Opened) <= checkHeartbeatsInterval { + // use a grace period before the heartbeat check is applied + return true + } + + var peerRelationKnown bool + deps.PeeringManager.Call(proto.PeerID, func(peer *p2p.Peer) { + peerRelationKnown = peer.Relation == p2p.PeerRelationKnown + }) + + var errUnhealthy error + switch { + case latestHeatbeat == nil: + // no heartbeat received in the grace period + errUnhealthy = errors.New("no heartbeat received in grace period") + + case time.Since(proto.HeartbeatReceivedTime) > heartbeatReceiveTimeout: + // heartbeat outdated + errUnhealthy = errors.New("heartbeat outdated") + + case !peerRelationKnown && latestHeatbeat.SolidMilestoneIndex < snapshotInfo.PruningIndex: + // peer is unknown or connected via autopeering and its solid milestone index is below our pruning index. + // we can't help this neighbor to become sync, so it's better to drop the connection and free the slots for other peers. + errUnhealthy = fmt.Errorf("peers solid milestone index is below our pruning index: %d < %d", latestHeatbeat.SolidMilestoneIndex, snapshotInfo.PruningIndex) + } + + if errUnhealthy == nil { + // peer is healthy + return true + } + + if peerRelationKnown { + // close the connection to static connected peers, so they will be moved into reconnect pool to reestablish the connection + peersToReconnect[proto.PeerID] = fmt.Errorf("dropping connection to peer %s, error: %w", proto.PeerID.ShortString(), errUnhealthy) + } else { + // it's better to drop the connection to unknown and autopeered peers and free the slots for other peers + peersToRemove[proto.PeerID] = fmt.Errorf("dropping connection to peer %s, error: %w", proto.PeerID.ShortString(), errUnhealthy) + } - // close the connection to static connected peers, so they will be moved into reconnect pool to reestablish the connection - CorePlugin.LogInfof("closing connection to peer %s because we didn't receive heartbeats anymore", proto.PeerID.ShortString()) - peersToReconnect[proto.PeerID] = struct{}{} return true }) - /* - // TODO: re-introduce once p2p discovery is implemented - for peerIDToRemove := range peerIDsToRemove { - peering.Manager().Remove(peerIDToRemove) - } - */ + // drop the connection to the peers + for p, reason := range peersToRemove { + _ = deps.PeeringManager.DisconnectPeer(p, reason) + } // close the connection to the peers to trigger a reconnect - for p := range peersToReconnect { + for p, reason := range peersToReconnect { + CorePlugin.LogWarn(reason.Error()) + conns := deps.Host.Network().ConnsToPeer(p) for _, conn := range conns { _ = conn.Close() @@ -316,8 +350,8 @@ func configureEvents() { } }) - proto.Events.Errors.Attach(closeConnectionDueToProtocolError) - proto.Parser.Events.Error.Attach(closeConnectionDueToProtocolError) + proto.Events.Errors.Hook(closeConnectionDueToProtocolError) + proto.Parser.Events.Error.Hook(closeConnectionDueToProtocolError) if err := CorePlugin.Daemon().BackgroundWorker(fmt.Sprintf("gossip-protocol-read-%s-%s", proto.PeerID, proto.Stream.ID()), func(_ context.Context) { buf := make([]byte, readBufSize) @@ -340,11 +374,11 @@ func configureEvents() { if err := CorePlugin.Daemon().BackgroundWorker(fmt.Sprintf("gossip-protocol-write-%s-%s", proto.PeerID, proto.Stream.ID()), func(ctx context.Context) { // send heartbeat and latest milestone request if snapshotInfo := deps.Storage.SnapshotInfo(); snapshotInfo != nil { - latestMilestoneIndex := deps.SyncManager.LatestMilestoneIndex() - syncedCount := deps.GossipService.SynchronizedCount(latestMilestoneIndex) + syncState := deps.SyncManager.SyncState() + syncedCount := deps.GossipService.SynchronizedCount(syncState.LatestMilestoneIndex) connectedCount := deps.PeeringManager.ConnectedCount() // TODO: overflow not handled for synced/connected - proto.SendHeartbeat(deps.SyncManager.ConfirmedMilestoneIndex(), snapshotInfo.PruningIndex, latestMilestoneIndex, byte(connectedCount), byte(syncedCount)) + proto.SendHeartbeat(syncState.ConfirmedMilestoneIndex, snapshotInfo.PruningIndex, syncState.LatestMilestoneIndex, byte(connectedCount), byte(syncedCount)) proto.SendLatestMilestoneRequest() } @@ -386,12 +420,12 @@ func configureEvents() { } func attachEventsGossipService() { - deps.GossipService.Events.ProtocolStarted.Attach(onGossipServiceProtocolStarted) - deps.GossipService.Events.ProtocolTerminated.Attach(onGossipServiceProtocolTerminated) + deps.GossipService.Events.ProtocolStarted.Hook(onGossipServiceProtocolStarted) + deps.GossipService.Events.ProtocolTerminated.Hook(onGossipServiceProtocolTerminated) } func attachEventsBroadcastQueue() { - deps.MessageProcessor.Events.BroadcastMessage.Attach(onMessageProcessorBroadcastMessage) + deps.MessageProcessor.Events.BroadcastMessage.Hook(onMessageProcessorBroadcastMessage) } func detachEventsGossipService() { diff --git a/core/gossip/params.go b/core/gossip/params.go index 1c0c605e2..50ba6055e 100644 --- a/core/gossip/params.go +++ b/core/gossip/params.go @@ -5,7 +5,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/core/gossip/sting.go b/core/gossip/sting.go index 26286db01..624f3e01a 100644 --- a/core/gossip/sting.go +++ b/core/gossip/sting.go @@ -3,71 +3,59 @@ package gossip import ( "time" - "github.com/gohornet/hornet/pkg/protocol/gossip" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/protocol/gossip" ) // sets up the event handlers which propagate STING messages. func attachEventsProtocolMessages(proto *gossip.Protocol) { - proto.Parser.Events.Received[gossip.MessageTypeMessage].Attach(events.NewClosure(func(data []byte) { + proto.Parser.Events.Received[gossip.MessageTypeMessage].Hook(events.NewClosure(func(data []byte) { proto.Metrics.ReceivedMessages.Inc() deps.ServerMetrics.Messages.Inc() deps.MessageProcessor.Process(proto, gossip.MessageTypeMessage, data) })) - proto.Events.Sent[gossip.MessageTypeMessage].Attach(events.NewClosure(func() { + proto.Events.Sent[gossip.MessageTypeMessage].Hook(events.NewClosure(func() { proto.Metrics.SentPackets.Inc() proto.Metrics.SentMessages.Inc() deps.ServerMetrics.SentMessages.Inc() })) - proto.Parser.Events.Received[gossip.MessageTypeMessageRequest].Attach(events.NewClosure(func(data []byte) { + proto.Parser.Events.Received[gossip.MessageTypeMessageRequest].Hook(events.NewClosure(func(data []byte) { proto.Metrics.ReceivedMessageRequests.Inc() deps.ServerMetrics.ReceivedMessageRequests.Inc() deps.MessageProcessor.Process(proto, gossip.MessageTypeMessageRequest, data) })) - proto.Events.Sent[gossip.MessageTypeMessageRequest].Attach(events.NewClosure(func() { + proto.Events.Sent[gossip.MessageTypeMessageRequest].Hook(events.NewClosure(func() { proto.Metrics.SentPackets.Inc() proto.Metrics.SentMessageRequests.Inc() deps.ServerMetrics.SentMessageRequests.Inc() })) - proto.Parser.Events.Received[gossip.MessageTypeMilestoneRequest].Attach(events.NewClosure(func(data []byte) { + proto.Parser.Events.Received[gossip.MessageTypeMilestoneRequest].Hook(events.NewClosure(func(data []byte) { proto.Metrics.ReceivedMilestoneRequests.Inc() deps.ServerMetrics.ReceivedMilestoneRequests.Inc() deps.MessageProcessor.Process(proto, gossip.MessageTypeMilestoneRequest, data) })) - proto.Events.Sent[gossip.MessageTypeMilestoneRequest].Attach(events.NewClosure(func() { + proto.Events.Sent[gossip.MessageTypeMilestoneRequest].Hook(events.NewClosure(func() { proto.Metrics.SentPackets.Inc() proto.Metrics.SentMilestoneRequests.Inc() deps.ServerMetrics.SentMilestoneRequests.Inc() })) - proto.Parser.Events.Received[gossip.MessageTypeHeartbeat].Attach(events.NewClosure(func(data []byte) { + proto.Parser.Events.Received[gossip.MessageTypeHeartbeat].Hook(events.NewClosure(func(data []byte) { proto.Metrics.ReceivedHeartbeats.Inc() deps.ServerMetrics.ReceivedHeartbeats.Inc() proto.LatestHeartbeat = gossip.ParseHeartbeat(data) - - /* - // TODO: reintroduce - if proto.Autopeering != nil && p.LatestHeartbeat.SolidMilestoneIndex < tangle.SnapshotInfo().PruningIndex { - // peer is connected via autopeering and its solid milestone index is below our pruning index. - // we can't help this neighbor to become sync, so it's better to drop the connection and free the slots for other peers. - log.Infof("dropping autopeered neighbor %s / %s because SMI (%d) is below our pruning index (%d)", p.Autopeering.Address(), p.Autopeering.ID(), p.LatestHeartbeat.SolidMilestoneIndex, tangle.SnapshotInfo().PruningIndex) - peering.Manager().Remove(p.ID) - return - } - */ - proto.HeartbeatReceivedTime = time.Now() proto.Events.HeartbeatUpdated.Trigger(proto.LatestHeartbeat) })) - proto.Events.Sent[gossip.MessageTypeHeartbeat].Attach(events.NewClosure(func() { + proto.Events.Sent[gossip.MessageTypeHeartbeat].Hook(events.NewClosure(func() { proto.Metrics.SentPackets.Inc() proto.Metrics.SentHeartbeats.Inc() deps.ServerMetrics.SentHeartbeats.Inc() diff --git a/core/gracefulshutdown/core.go b/core/gracefulshutdown/core.go index 76df4a3b1..389c9d577 100644 --- a/core/gracefulshutdown/core.go +++ b/core/gracefulshutdown/core.go @@ -3,8 +3,8 @@ package gracefulshutdown import ( "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/shutdown" ) func init() { diff --git a/core/p2p/core.go b/core/p2p/core.go index 95fec70f0..cadceaa4c 100644 --- a/core/p2p/core.go +++ b/core/p2p/core.go @@ -6,19 +6,20 @@ import ( "time" "github.com/libp2p/go-libp2p" - connmgr "github.com/libp2p/go-libp2p-connmgr" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/p2p/net/connmgr" + "github.com/libp2p/go-libp2p/p2p/transport/tcp" "github.com/multiformats/go-multiaddr" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/shutdown" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/shutdown" ) func init() { @@ -144,7 +145,7 @@ Your node identity private key can now be found at "%s". createdHost, err := libp2p.New(libp2p.Identity(privKey), libp2p.ListenAddrStrings(deps.P2PBindMultiAddresses...), libp2p.Peerstore(peerStoreContainer.Peerstore()), - libp2p.DefaultTransports, + libp2p.Transport(tcp.NewTCPTransport), libp2p.ConnectionManager(connManager), libp2p.NATPortMap(), ) diff --git a/core/p2p/params.go b/core/p2p/params.go index 9dccbff61..69d9cb8c0 100644 --- a/core/p2p/params.go +++ b/core/p2p/params.go @@ -5,7 +5,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/core/pow/core.go b/core/pow/core.go index cf78fa9ac..9da2a9362 100644 --- a/core/pow/core.go +++ b/core/pow/core.go @@ -5,34 +5,27 @@ import ( "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/shutdown" "github.com/iotaledger/hive.go/configuration" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/shutdown" ) func init() { CorePlugin = &node.CorePlugin{ Pluggable: node.Pluggable{ - Name: "PoW", - DepsFunc: func(cDeps dependencies) { deps = cDeps }, - Params: params, - Provide: provide, - Run: run, + Name: "PoW", + Params: params, + Provide: provide, + Run: run, }, } } var ( CorePlugin *node.CorePlugin - deps dependencies ) -type dependencies struct { - dig.In - Handler *pow.Handler -} - func provide(c *dig.Container) { type handlerDeps struct { diff --git a/core/pow/params.go b/core/pow/params.go index af5d3f8a5..d34ce8e5f 100644 --- a/core/pow/params.go +++ b/core/pow/params.go @@ -5,7 +5,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/core/profile/core.go b/core/profile/core.go index 40dc761e2..35324c5a4 100644 --- a/core/profile/core.go +++ b/core/profile/core.go @@ -7,9 +7,9 @@ import ( "github.com/shirou/gopsutil/mem" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/profile" "github.com/iotaledger/hive.go/configuration" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/profile" ) var ( diff --git a/core/profile/params.go b/core/profile/params.go index 17c1024ac..2f429a43a 100644 --- a/core/profile/params.go +++ b/core/profile/params.go @@ -3,7 +3,7 @@ package profile import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/core/protocfg/core.go b/core/protocfg/core.go index 67e0b930b..4c95ff250 100644 --- a/core/protocfg/core.go +++ b/core/protocfg/core.go @@ -6,9 +6,9 @@ import ( flag "github.com/spf13/pflag" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/node" "github.com/iotaledger/hive.go/configuration" + "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/node" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/core/protocfg/params.go b/core/protocfg/params.go index 5cc0e9cc2..1e537eb95 100644 --- a/core/protocfg/params.go +++ b/core/protocfg/params.go @@ -3,7 +3,7 @@ package protocfg import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/core/snapshot/core.go b/core/snapshot/core.go index 00aa38217..43c5150d6 100644 --- a/core/snapshot/core.go +++ b/core/snapshot/core.go @@ -8,18 +8,18 @@ import ( flag "github.com/spf13/pflag" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/snapshot" - "github.com/gohornet/hornet/pkg/tangle" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/tangle" ) const ( @@ -181,6 +181,7 @@ func provide(c *dig.Container) { deps.Storage, deps.SyncManager, deps.UTXOManager, + deps.NodeConfig.Bool(CfgSnapshotsEnabled), deps.NetworkID, networkIDSource, deps.SnapshotsFullPath, @@ -222,6 +223,7 @@ func configure() { switch { case snapshotInfo != nil && !*forceLoadingSnapshot: + // snapshot already exists, no need to load it if err := deps.SnapshotManager.CheckCurrentSnapshot(snapshotInfo); err != nil { CorePlugin.LogPanic(err) } @@ -246,7 +248,7 @@ func run() { if err := CorePlugin.Daemon().BackgroundWorker("Snapshots", func(ctx context.Context) { CorePlugin.LogInfo("Starting Snapshots ... done") - deps.Tangle.Events.ConfirmedMilestoneIndexChanged.Attach(onConfirmedMilestoneIndexChanged) + deps.Tangle.Events.ConfirmedMilestoneIndexChanged.Hook(onConfirmedMilestoneIndexChanged) defer deps.Tangle.Events.ConfirmedMilestoneIndexChanged.Detach(onConfirmedMilestoneIndexChanged) for { diff --git a/core/snapshot/params.go b/core/snapshot/params.go index fd7cee050..a60b21cba 100644 --- a/core/snapshot/params.go +++ b/core/snapshot/params.go @@ -5,10 +5,12 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( + // whether to generate snapshot files. + CfgSnapshotsEnabled = "snapshots.enabled" // the depth, respectively the starting point, at which a snapshot of the ledger is generated CfgSnapshotsDepth = "snapshots.depth" // interval, in milestones, at which snapshot files are created (snapshots are only created if the node is synced) @@ -42,6 +44,7 @@ var params = &node.PluginParams{ Params: map[string]*flag.FlagSet{ "nodeConfig": func() *flag.FlagSet { fs := flag.NewFlagSet("", flag.ContinueOnError) + fs.Bool(CfgSnapshotsEnabled, false, "whether to generate snapshot files") fs.Int(CfgSnapshotsDepth, 50, "the depth, respectively the starting point, at which a snapshot of the ledger is generated") fs.Int(CfgSnapshotsInterval, 200, "interval, in milestones, at which snapshot files are created (snapshots are only created if the node is synced)") fs.String(CfgSnapshotsFullPath, "snapshots/mainnet/full_snapshot.bin", "path to the full snapshot file") diff --git a/core/tangle/core.go b/core/tangle/core.go index f9c123578..0d4cfaa31 100644 --- a/core/tangle/core.go +++ b/core/tangle/core.go @@ -9,23 +9,23 @@ import ( flag "github.com/spf13/pflag" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/keymanager" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/migrator" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/milestonemanager" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/snapshot" - "github.com/gohornet/hornet/pkg/tangle" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/timeutil" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestonemanager" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/tangle" ) const ( @@ -242,9 +242,9 @@ func configureEvents() { } func attachHeartbeatEvents() { - deps.Tangle.Events.ConfirmedMilestoneIndexChanged.Attach(onConfirmedMilestoneIndexChanged) - deps.SnapshotManager.Events.PruningMilestoneIndexChanged.Attach(onPruningMilestoneIndexChanged) - deps.Tangle.Events.LatestMilestoneIndexChanged.Attach(onLatestMilestoneIndexChanged) + deps.Tangle.Events.ConfirmedMilestoneIndexChanged.Hook(onConfirmedMilestoneIndexChanged) + deps.SnapshotManager.Events.PruningMilestoneIndexChanged.Hook(onPruningMilestoneIndexChanged) + deps.Tangle.Events.LatestMilestoneIndexChanged.Hook(onLatestMilestoneIndexChanged) } func detachHeartbeatEvents() { diff --git a/core/tangle/params.go b/core/tangle/params.go index 37417d2de..3abd28255 100644 --- a/core/tangle/params.go +++ b/core/tangle/params.go @@ -5,7 +5,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/docker/Dockerfile b/docker/Dockerfile index 7aa2d67f8..370c2a6a9 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,13 +1,13 @@ # https://hub.docker.com/_/golang -FROM golang:1.18-bullseye AS build +FROM golang:1.19-bullseye AS build ARG BUILD_TAGS=builtin_static,rocksdb -LABEL org.label-schema.description="HORNET - The IOTA community node" -LABEL org.label-schema.name="gohornet/hornet" +LABEL org.label-schema.description="HORNET - The IOTA node" +LABEL org.label-schema.name="iotaledger/hornet" LABEL org.label-schema.schema-version="1.0" -LABEL org.label-schema.vcs-url="https://github.com/gohornet/hornet" -LABEL org.label-schema.usage="https://github.com/gohornet/hornet/blob/main/documentation/docs/getting_started/using_docker.md" +LABEL org.label-schema.vcs-url="https://github.com/iotaledger/hornet" +LABEL org.label-schema.usage="https://github.com/iotaledger/hornet/blob/main/documentation/docs/getting_started/using_docker.md" # Ensure ca-certificates are up to date RUN update-ca-certificates diff --git a/documentation/docs/how_tos/hornet_apt_repository.md b/documentation/docs/how_tos/hornet_apt_repository.md index c0e3f0ba8..b5d1dc411 100644 --- a/documentation/docs/how_tos/hornet_apt_repository.md +++ b/documentation/docs/how_tos/hornet_apt_repository.md @@ -95,10 +95,10 @@ All installation methods mentioned in this article from this point should be con ::: -1. Download the latest release compiled for your system from [GitHub release assets](https://github.com/gohornet/hornet/releases): +1. Download the latest release compiled for your system from [GitHub release assets](https://github.com/iotaledger/hornet/releases): ```bash - curl -LO https://github.com/gohornet/hornet/releases/download/v1.0.5/HORNET-1.0.5_Linux_x86_64.tar.gz + curl -LO https://github.com/iotaledger/hornet/releases/download/v1.2.2/HORNET-1.2.2_Linux_x86_64.tar.gz ``` Please make sure to download the binaries for your system: @@ -111,7 +111,7 @@ All installation methods mentioned in this article from this point should be con 2. Extract the files in a folder of your choice (for example `/opt` on Linux): ```bash - tar -xf HORNET-1.0.5_Linux_x86_64.tar.gz + tar -xf HORNET-1.2.2_Linux_x86_64.tar.gz ``` 3. Once you have extracted the files, you get a main executable file. You can also find sample [configuration](post_installation.md) JSON files available in the archive (tar or zip). @@ -187,12 +187,12 @@ You can find installation instructions in the [official Go documentation](https: 4. Clone the Hornet source code from GitHub: ```bash - git clone https://github.com/gohornet/hornet.git && cd hornet && git checkout mainnet + git clone https://github.com/iotaledger/hornet.git && cd hornet && git checkout mainnet ``` 5. Build the Hornet: ```bash - ./scripts/build_hornet_rocksdb_builtin.sh + ./scripts/build_hornet_rocksdb.sh ``` * This command will build Hornet based on the latest commit from the currently chosen branch. * This may take a couple of minutes. diff --git a/documentation/docs/how_tos/managing_a_node.md b/documentation/docs/how_tos/managing_a_node.md index d3132f355..e3a5cc033 100644 --- a/documentation/docs/how_tos/managing_a_node.md +++ b/documentation/docs/how_tos/managing_a_node.md @@ -22,7 +22,8 @@ Hornet uses an embedded database engine that stores its data in a directory in a "db": { "engine": "rocksdb", "path": "mainnetdb", - "autoRevalidation": false + "autoRevalidation": false, + "checkLedgerStateOnStartup": false } ``` @@ -32,6 +33,7 @@ Another important directory is the `snapshots` directory. You can control the `s ```json "snapshots": { + "enabled": false, "interval": 50, "fullPath": "snapshots/mainnet/full_snapshot.bin", "deltaPath": "snapshots/mainnet/delta_snapshot.bin", @@ -111,6 +113,7 @@ Your node's ledger accumulates many messages, which uses a significant disk capa ```json "snapshots": { + "enabled": false, "interval": 50, "fullPath": "snapshots/mainnet/full_snapshot.bin", "deltaPath": "snapshots/mainnet/delta_snapshot.bin", diff --git a/documentation/docs/how_tos/post_installation.md b/documentation/docs/how_tos/post_installation.md index 71d1b386f..38ec62d5b 100644 --- a/documentation/docs/how_tos/post_installation.md +++ b/documentation/docs/how_tos/post_installation.md @@ -126,6 +126,7 @@ You can find the HTTP REST API related options in the `restAPI` section within t "publicRoutes": [ "/health", "/mqtt", + "/api/routes", "/api/v1/info", "/api/v1/tips", "/api/v1/messages*", diff --git a/documentation/docs/how_tos/using_docker.md b/documentation/docs/how_tos/using_docker.md index 22aba5cc9..2ed2c8b09 100644 --- a/documentation/docs/how_tos/using_docker.md +++ b/documentation/docs/how_tos/using_docker.md @@ -17,7 +17,7 @@ keywords: ![Hornet Node using Docker](/img/Banner/banner_hornet_using_docker.png) -Hornet Docker images (amd64/x86_64 architecture) are available at the [gohornet/hornet](https://hub.docker.com/r/gohornet/hornet) Docker hub. +Hornet Docker images (amd64/x86_64 architecture) are available at the [iotaledger/hornet](https://hub.docker.com/r/iotaledger/hornet) Docker hub. ## Requirements @@ -31,7 +31,7 @@ Hornet Docker images (amd64/x86_64 architecture) are available at the [gohornet/ Once you have completed all the installation [requirements](#requirements), you can clone the repository by running: ```sh -git clone https://github.com/gohornet/hornet && cd hornet && git checkout production +git clone https://github.com/iotaledger/hornet && cd hornet && git checkout production ``` :::note @@ -68,10 +68,10 @@ The Docker image runs under user with user id 65532 and group id 65532. To make ## Run -You can pull the latest image from `gohornet/hornet` public Docker hub registry by running: +You can pull the latest image from `iotaledger/hornet` public Docker hub registry by running: ```bash -docker pull gohornet/hornet:latest && docker tag gohornet/hornet:latest hornet:latest +docker pull iotaledger/hornet:latest && docker tag iotaledger/hornet:latest hornet:latest ``` We recommend that you run on host network to improve performance. Otherwise, you will have to publish ports using iptables NAT which is slower. @@ -152,7 +152,7 @@ docker build -f docker/Dockerfile -t hornet:latest . Or pull it from Docker hub (only available for amd64/x86_64): ```sh -docker pull gohornet/hornet:latest && docker tag gohornet/hornet:latest hornet:latest +docker pull iotaledger/hornet:latest && docker tag iotaledger/hornet:latest hornet:latest ``` ## Managing a Node diff --git a/documentation/docs/how_tos/using_docker_compose.md b/documentation/docs/how_tos/using_docker_compose.md index 6742ff9fa..fa00502cc 100644 --- a/documentation/docs/how_tos/using_docker_compose.md +++ b/documentation/docs/how_tos/using_docker_compose.md @@ -40,7 +40,7 @@ version: '3' services: hornet: container_name: hornet - image: gohornet/hornet:latest + image: iotaledger/hornet:latest network_mode: host restart: always ulimits: diff --git a/documentation/docs/references/configuration.md b/documentation/docs/references/configuration.md index 48eef379a..3796f443a 100644 --- a/documentation/docs/references/configuration.md +++ b/documentation/docs/references/configuration.md @@ -68,6 +68,7 @@ Example: "publicRoutes": [ "/health", "/mqtt", + "/api/routes", "/api/v1/info", "/api/v1/tips", "/api/v1/messages*", @@ -125,19 +126,20 @@ Example: ## 3. DB -| Name | Description | Type | -| :--------------- | :---------------------------------------------------------------------------------- | :----- | -| engine | The used database engine (pebble/rocksdb/mapdb) | string | -| path | The path to the database folder | string | -| autoRevalidation | Whether to automatically start revalidation on startup if the database is corrupted | bool | - +| Name | Description | Type | +| :------------------------ | :---------------------------------------------------------------------------------- | :----- | +| engine | The used database engine (pebble/rocksdb/mapdb) | string | +| path | The path to the database folder | string | +| autoRevalidation | Whether to automatically start revalidation on startup if the database is corrupted | bool | +| checkLedgerStateOnStartup | Whether to check if the ledger state matches the total supply on startup | bool | Example: ```json "db": { "engine": "rocksdb", "path": "mainnetdb", - "autoRevalidation": false + "autoRevalidation": false, + "checkLedgerStateOnStartup": false }, ``` @@ -145,6 +147,7 @@ Example: | Name | Description | Type | | :---------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------- | +| enabled | whether to generate snapshot files | bool | | depth | The depth, respectively the starting point, at which a snapshot of the ledger is generated | integer | | interval | Interval, in milestones, at which snapshot files are created (snapshots are only created if the node is synced) | integer | | fullPath | Path to the full snapshot file | string | @@ -163,6 +166,7 @@ Example: ```json "snapshots": { + "enabled": false, "depth": 50, "interval": 200, "fullPath": "snapshots/mainnet/full_snapshot.bin", diff --git a/documentation/docs/references/faq.md b/documentation/docs/references/faq.md index 57d352fdb..063164326 100644 --- a/documentation/docs/references/faq.md +++ b/documentation/docs/references/faq.md @@ -35,8 +35,8 @@ Of course, you are very welcome! Just send a PR or offer your help in the `#horn ## I Found a Bug, What Should I Do? -Please open a [new issue](https://github.com/gohornet/hornet/issues/new?assignees=&labels=bug&template=bug_report.md&title=). We'll have a look at your bug report as soon as possible. +Please open a [new issue](https://github.com/iotaledger/hornet/issues/new?assignees=&labels=bug&template=bug_report.md&title=). We'll have a look at your bug report as soon as possible. ## I Am Missing Feature XYZ. Can You Add It? -Please open a [new feature request](https://github.com/gohornet/hornet/issues/new?assignees=&labels=feature&template=feature_request.md&title=). We cannot assure that the feature will actually be implemented. Pull requests are very welcome! +Please open a [new feature request](https://github.com/iotaledger/hornet/issues/new?assignees=&labels=feature&template=feature_request.md&title=). We cannot assure that the feature will actually be implemented. Pull requests are very welcome! diff --git a/documentation/docs/troubleshooting.md b/documentation/docs/troubleshooting.md index 3eac6925b..d3e745327 100644 --- a/documentation/docs/troubleshooting.md +++ b/documentation/docs/troubleshooting.md @@ -20,4 +20,4 @@ If you can not find your question in the FAQ, feel free to ask in the `#hornet` ## Did Something Go Wrong? -Please open a [new issue](https://github.com/gohornet/hornet/issues/new) if you detect an error or crash. You can also submit a PR if you have already fixed it. +Please open a [new issue](https://github.com/iotaledger/hornet/issues/new) if you detect an error or crash. You can also submit a PR if you have already fixed it. diff --git a/documentation/docs/welcome.md b/documentation/docs/welcome.md index a726dc76e..c5ede24e5 100644 --- a/documentation/docs/welcome.md +++ b/documentation/docs/welcome.md @@ -42,4 +42,4 @@ the [roadmap](https://roadmap.iota.org/) for more information. ## Source Code -The source code of the project is available on [GitHub](https://github.com/gohornet/hornet). \ No newline at end of file +The source code of the project is available on [GitHub](https://github.com/iotaledger/hornet). \ No newline at end of file diff --git a/documentation/docusaurus.config.js b/documentation/docusaurus.config.js index b297e5380..dd92f7138 100644 --- a/documentation/docusaurus.config.js +++ b/documentation/docusaurus.config.js @@ -9,7 +9,7 @@ module.exports = { path: path.resolve(__dirname, 'docs'), routeBasePath: 'hornet', sidebarPath: path.resolve(__dirname, 'sidebars.js'), - editUrl: 'https://github.com/gohornet/hornet/edit/production/documentation', + editUrl: 'https://github.com/iotaledger/hornet/edit/production/documentation', versions: { current: { label: 'IOTA', diff --git a/go.mod b/go.mod index 638792e6a..187738165 100644 --- a/go.mod +++ b/go.mod @@ -1,241 +1,218 @@ -module github.com/gohornet/hornet +module github.com/iotaledger/hornet -go 1.18 +go 1.19 -replace github.com/linxGnu/grocksdb => github.com/gohornet/grocksdb v1.6.38-0.20211012114404-55f425442260 +replace github.com/linxGnu/grocksdb => github.com/iotaledger/grocksdb v1.6.38-0.20211012114404-55f425442260 require ( - github.com/bits-and-blooms/bitset v1.2.2 + github.com/bits-and-blooms/bitset v1.4.0 github.com/blang/vfs v1.0.0 - github.com/cockroachdb/pebble v0.0.0-20220408205130-c55c1d80c374 - github.com/docker/docker v20.10.14+incompatible + github.com/cockroachdb/pebble v0.0.0-20230106151110-65ff304d3d7a + github.com/docker/docker v20.10.22+incompatible github.com/docker/go-connections v0.4.0 github.com/dustin/go-humanize v1.0.0 - github.com/eclipse/paho.mqtt.golang v1.3.5 - github.com/fhmq/hmq v0.0.0-20220409045343-c53d8f8a0daa + github.com/eclipse/paho.mqtt.golang v1.4.2 + github.com/fhmq/hmq v1.5.0 github.com/go-echarts/go-echarts v1.0.0 github.com/gobuffalo/packr/v2 v2.8.3 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/gorilla/websocket v1.5.0 - github.com/hashicorp/go-version v1.4.0 + github.com/hashicorp/go-version v1.6.0 github.com/iotaledger/go-ds-kvstore v0.0.0-20220404122649-445475b91fcf - github.com/iotaledger/hive.go v0.0.0-20220408130540-d344e455dd23 + github.com/iotaledger/hive.go v0.0.0-20221227223844-749e1d43a081 github.com/iotaledger/iota.go v1.0.0 github.com/iotaledger/iota.go/v2 v2.0.2-0.20220225080023-871c779a63cb - github.com/ipfs/go-datastore v0.5.1 + github.com/ipfs/go-datastore v0.6.0 github.com/ipfs/go-ds-badger v0.3.0 - github.com/labstack/echo/v4 v4.7.2 - github.com/labstack/gommon v0.3.2-0.20220410183028-64116baad496 - github.com/libp2p/go-libp2p v0.18.0 - github.com/libp2p/go-libp2p-connmgr v0.3.1 - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/libp2p/go-libp2p-peerstore v0.6.0 + github.com/labstack/echo-contrib v0.13.1 + github.com/labstack/echo/v4 v4.10.0 + github.com/labstack/gommon v0.4.0 + github.com/libp2p/go-libp2p v0.24.2 github.com/mr-tron/base58 v1.2.0 - github.com/multiformats/go-multiaddr v0.5.0 - github.com/pelletier/go-toml/v2 v2.0.0-beta.7 + github.com/multiformats/go-multiaddr v0.8.0 + github.com/pelletier/go-toml/v2 v2.0.6 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.12.1 + github.com/prometheus/client_golang v1.14.0 github.com/shirou/gopsutil v3.21.11+incompatible github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.7.1 + github.com/stretchr/testify v1.8.1 github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e - github.com/wollac/iota-crypto-demo v0.0.0-20211124150533-68dd13b59838 - go.uber.org/atomic v1.9.0 - go.uber.org/dig v1.14.1 - golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 - golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3 - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 - golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 + github.com/wollac/iota-crypto-demo v0.0.0-20221117162917-b10619eccb98 + go.uber.org/atomic v1.10.0 + go.uber.org/dig v1.16.0 + golang.org/x/crypto v0.5.0 + golang.org/x/net v0.5.0 + golang.org/x/term v0.4.0 + golang.org/x/time v0.3.0 ) require ( - filippo.io/edwards25519 v1.0.0-rc.1 // indirect + filippo.io/edwards25519 v1.0.0 // indirect github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect - github.com/DataDog/zstd v1.5.0 // indirect - github.com/Microsoft/go-winio v0.5.0 // indirect + github.com/DataDog/zstd v1.5.2 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect github.com/ReneKroon/ttlcache/v2 v2.11.0 // indirect - github.com/Shopify/sarama v1.32.0 // indirect + github.com/Shopify/sarama v1.37.2 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bitly/go-simplejson v0.5.0 // indirect - github.com/btcsuite/btcd v0.22.0-beta // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/cheekybits/genny v1.0.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cockroachdb/errors v1.9.0 // indirect github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect github.com/cockroachdb/redact v1.1.3 // indirect - github.com/containerd/cgroups v1.0.3 // indirect - github.com/containerd/containerd v1.5.5 // indirect - github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/containerd/cgroups v1.0.4 // indirect + github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/dgraph-io/badger v1.6.2 // 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-20190423205320-6a90982ecee2 // indirect - github.com/docker/distribution v2.7.1+incompatible // indirect - github.com/docker/go-units v0.4.0 // indirect - github.com/eapache/go-resiliency v1.2.0 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/eapache/go-resiliency v1.3.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect github.com/eapache/queue v1.1.0 // indirect github.com/elastic/gosigar v0.14.2 // indirect - github.com/emirpasic/gods v1.12.1 // indirect + github.com/emirpasic/gods v1.18.1 // indirect github.com/fatih/structs v1.1.0 // indirect github.com/flynn/noise v1.0.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/getsentry/sentry-go v0.13.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/getsentry/sentry-go v0.16.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/gin-gonic/gin v1.7.7 // indirect + github.com/gin-gonic/gin v1.8.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-playground/locales v0.14.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.1 // indirect + github.com/go-playground/validator/v10 v10.11.1 // indirect github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect - github.com/gobuffalo/logger v1.0.6 // indirect - github.com/gobuffalo/packd v1.0.1 // indirect + github.com/gobuffalo/logger v1.0.7 // indirect + github.com/gobuffalo/packd v1.0.2 // indirect + github.com/goccy/go-json v0.10.0 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v1.0.0 // indirect + github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/go-github v17.0.0+incompatible // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gopacket v1.1.19 // indirect + github.com/google/pprof v0.0.0-20221219190121-3cb0bae90811 // indirect github.com/google/uuid v1.3.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/huin/goupnp v1.0.3 // indirect - github.com/ipfs/go-cid v0.1.0 // indirect - github.com/ipfs/go-ipfs-util v0.0.2 // indirect + github.com/iotaledger/grocksdb v1.7.5-0.20221128103803-fcdb79760195 // indirect + github.com/ipfs/go-cid v0.3.2 // indirect github.com/ipfs/go-log/v2 v2.5.1 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect github.com/jcmturner/aescts/v2 v2.0.0 // indirect github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect - github.com/jcmturner/gofork v1.0.0 // indirect - github.com/jcmturner/gokrb5/v8 v8.4.2 // indirect + github.com/jcmturner/gofork v1.7.6 // indirect + github.com/jcmturner/gokrb5/v8 v8.4.3 // indirect github.com/jcmturner/rpc/v2 v2.0.3 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/karrick/godirwalk v1.16.1 // indirect - github.com/klauspost/compress v1.15.1 // indirect - github.com/klauspost/cpuid/v2 v2.0.12 // indirect - github.com/knadh/koanf v1.4.1 // indirect - github.com/koron/go-ssdp v0.0.2 // indirect - github.com/kr/pretty v0.3.0 // indirect + github.com/karrick/godirwalk v1.17.0 // indirect + github.com/klauspost/compress v1.15.14 // indirect + github.com/klauspost/cpuid/v2 v2.2.3 // indirect + github.com/knadh/koanf v1.4.5 // indirect + github.com/koron/go-ssdp v0.0.3 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/leodido/go-urn v1.2.1 // indirect - github.com/libp2p/go-buffer-pool v0.0.2 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect - github.com/libp2p/go-conn-security-multistream v0.3.0 // indirect - github.com/libp2p/go-eventbus v0.2.1 // indirect - github.com/libp2p/go-flow-metrics v0.0.3 // indirect - github.com/libp2p/go-libp2p-asn-util v0.1.0 // indirect - github.com/libp2p/go-libp2p-blankhost v0.3.0 // indirect - github.com/libp2p/go-libp2p-mplex v0.6.0 // indirect - github.com/libp2p/go-libp2p-nat v0.1.0 // indirect - github.com/libp2p/go-libp2p-noise v0.3.0 // indirect - github.com/libp2p/go-libp2p-pnet v0.2.0 // indirect - github.com/libp2p/go-libp2p-quic-transport v0.17.0 // indirect - github.com/libp2p/go-libp2p-resource-manager v0.2.0 // indirect - github.com/libp2p/go-libp2p-swarm v0.10.2 // indirect - github.com/libp2p/go-libp2p-tls v0.4.0 // indirect - github.com/libp2p/go-libp2p-transport-upgrader v0.7.1 // indirect - github.com/libp2p/go-libp2p-yamux v0.8.2 // indirect - github.com/libp2p/go-mplex v0.6.0 // indirect - github.com/libp2p/go-msgio v0.1.0 // indirect + github.com/libp2p/go-flow-metrics v0.1.0 // indirect + github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect + github.com/libp2p/go-msgio v0.2.0 // indirect github.com/libp2p/go-nat v0.1.0 // indirect - github.com/libp2p/go-netroute v0.2.0 // indirect - github.com/libp2p/go-openssl v0.0.7 // indirect - github.com/libp2p/go-reuseport v0.1.0 // indirect - github.com/libp2p/go-reuseport-transport v0.1.0 // indirect - github.com/libp2p/go-stream-muxer-multistream v0.4.0 // indirect - github.com/libp2p/go-tcp-transport v0.5.1 // indirect - github.com/libp2p/go-ws-transport v0.6.0 // indirect - github.com/libp2p/go-yamux/v3 v3.1.0 // indirect - github.com/linxGnu/grocksdb v1.7.0 // indirect - github.com/lucas-clemente/quic-go v0.27.0 // indirect + github.com/libp2p/go-netroute v0.2.1 // indirect + github.com/libp2p/go-openssl v0.1.0 // indirect + github.com/libp2p/go-reuseport v0.2.0 // indirect + github.com/libp2p/go-yamux/v4 v4.0.0 // indirect + github.com/lucas-clemente/quic-go v0.31.1 // indirect github.com/markbates/errx v1.1.0 // indirect github.com/markbates/oncer v1.0.0 // indirect github.com/markbates/safe v1.0.1 // indirect - github.com/marten-seemann/qtls-go1-16 v0.1.5 // indirect - github.com/marten-seemann/qtls-go1-17 v0.1.1 // indirect - github.com/marten-seemann/qtls-go1-18 v0.1.1 // indirect + github.com/marten-seemann/qtls-go1-18 v0.1.4 // indirect + github.com/marten-seemann/qtls-go1-19 v0.1.2 // indirect github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // 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/miekg/dns v1.1.48 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-pointer v0.0.1 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/miekg/dns v1.1.50 // indirect github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect - github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect github.com/minio/sha256-simd v1.0.0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect + github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/morikuni/aec v1.0.0 // indirect - github.com/multiformats/go-base32 v0.0.4 // indirect - github.com/multiformats/go-base36 v0.1.0 // indirect + github.com/multiformats/go-base32 v0.1.0 // indirect + github.com/multiformats/go-base36 v0.2.0 // indirect github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect - github.com/multiformats/go-multibase v0.0.3 // indirect - github.com/multiformats/go-multihash v0.1.0 // indirect - github.com/multiformats/go-multistream v0.2.2 // indirect - github.com/multiformats/go-varint v0.0.6 // indirect - github.com/nxadm/tail v1.4.8 // indirect + github.com/multiformats/go-multibase v0.1.1 // indirect + github.com/multiformats/go-multicodec v0.7.0 // indirect + github.com/multiformats/go-multihash v0.2.1 // indirect + github.com/multiformats/go-multistream v0.3.3 // indirect + github.com/multiformats/go-varint v0.0.7 // indirect github.com/oasisprotocol/ed25519 v0.0.0-20210505154701-76d8c688d86e // indirect - github.com/onsi/ginkgo v1.16.5 // indirect + github.com/onsi/ginkgo/v2 v2.6.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.0.1 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect - github.com/panjf2000/ants/v2 v2.4.8 // indirect + github.com/panjf2000/ants/v2 v2.7.1 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect - github.com/petermattis/goid v0.0.0-20220331194723-8ee3e6ded87a // indirect - github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect + github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.33.0 // indirect - github.com/prometheus/procfs v0.7.3 // indirect - github.com/raulk/clock v1.1.0 // indirect - github.com/raulk/go-watchdog v1.2.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.39.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect + github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rogpeppe/go-internal v1.8.1 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/segmentio/fasthash v1.0.3 // indirect - github.com/sirupsen/logrus v1.8.1 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/cast v1.4.1 // indirect - github.com/tidwall/gjson v1.14.0 // indirect - github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect - github.com/tklauser/go-sysconf v0.3.10 // indirect - github.com/tklauser/numcpus v0.4.0 // indirect - github.com/ugorji/go/codec v1.2.7 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect + github.com/tklauser/go-sysconf v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.0 // indirect + github.com/ugorji/go/codec v1.2.8 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasttemplate v1.2.1 // indirect - github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.uber.org/multierr v1.8.0 // indirect - go.uber.org/zap v1.21.0 // indirect - golang.org/x/exp v0.0.0-20220407100705-7b9b53b0aca4 // indirect - golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f // indirect - golang.org/x/text v0.3.7 // indirect - golang.org/x/tools v0.1.10 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect - google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac // indirect - google.golang.org/grpc v1.45.0 // indirect - google.golang.org/protobuf v1.28.0 // indirect - gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + go.uber.org/fx v1.19.0 // indirect + go.uber.org/multierr v1.9.0 // indirect + go.uber.org/zap v1.24.0 // indirect + golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a // indirect + golang.org/x/mod v0.7.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect + golang.org/x/tools v0.5.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 // indirect + google.golang.org/grpc v1.51.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + gotest.tools/v3 v3.4.0 // indirect lukechampine.com/blake3 v1.1.7 // indirect ) diff --git a/go.sum b/go.sum index fb4119916..2b4cc8945 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -44,26 +43,14 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= @@ -72,71 +59,34 @@ github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mo github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/DataDog/zstd v1.5.0 h1:+K/VEwIAaPcHiMtQvpLD4lqW7f0Gk3xdYZmI1hD+CXo= -github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= +github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.0 h1:Elr9Wn+sGKPlkaBvwu4mTrxtmOp3F3yV9qhaHbXGjwU= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= -github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.18/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/ReneKroon/ttlcache/v2 v2.11.0 h1:OvlcYFYi941SBN3v9dsDcC2N8vRxyHcCmJb3Vl4QMoM= github.com/ReneKroon/ttlcache/v2 v2.11.0/go.mod h1:mBxvsNY+BT8qLLd6CuAJubbKo6r0jh3nb5et22bbfGY= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/sarama v1.32.0 h1:P+RUjEaRU0GMMbYexGMDyrMkLhbbBVUVISDywi+IlFU= -github.com/Shopify/sarama v1.32.0/go.mod h1:+EmJJKZWVT/faR9RcOxJerP+LId4iWdQPBGLy1Y1Njs= -github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/Shopify/toxiproxy/v2 v2.3.0 h1:62YkpiP4bzdhKMH+6uC5E95y608k3zDwdzuBMsnn3uQ= -github.com/Shopify/toxiproxy/v2 v2.3.0/go.mod h1:KvQTtB6RjCJY4zqNJn7C7JDFgsG5uoHYDirfUfpIm0c= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/Shopify/sarama v1.37.2 h1:LoBbU0yJPte0cE5TZCGdlzZRmMgMtZU/XgnUKZg9Cv4= +github.com/Shopify/sarama v1.37.2/go.mod h1:Nxye/E+YPru//Bpaorfhc3JsSGYwCaDDj+R4bK52U5o= +github.com/Shopify/toxiproxy/v2 v2.5.0 h1:i4LPT+qrSlKNtQf5QliVjdP08GyAH8+BUIc9gT0eahc= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/appleboy/gofight/v2 v2.1.2 h1:VOy3jow4vIK8BRQJoC/I9muxyYlJ2yb9ht2hZoS3rf4= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ= @@ -149,11 +99,9 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21 github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= -github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -161,73 +109,33 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.2.2 h1:J5gbX05GpMdBjCvQ9MteIg2KKDExr7DrgK+Yc15FvIk= -github.com/bits-and-blooms/bitset v1.2.2/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bits-and-blooms/bitset v1.4.0 h1:+YZ8ePm+He2pU3dZlIZiOeAKfrBkXi1lSrXJ/Xzgbu8= +github.com/bits-and-blooms/bitset v1.4.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/vfs v1.0.0 h1:AUZUgulCDzbaNjTRWEP45X7m/J10brAptZpSRKRZBZc= github.com/blang/vfs v1.0.0/go.mod h1:jjuNUc/IKcRNNWC9NUCvz4fR9PZLPIKxEygtPs/4tSI= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= -github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= 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/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/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/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/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-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= github.com/cockroachdb/datadriven v1.0.1-0.20211007161720-b558070c3be0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= github.com/cockroachdb/datadriven v1.0.1-0.20220214170620-9913f5bc19b7/go.mod h1:hi0MtSY3AYDQNDi83kDkMH5/yqM/CsIrsOITkSoH7KI= +github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= github.com/cockroachdb/errors v1.8.8/go.mod h1:z6VnEL3hZ/2ONZEvG7S5Ym0bU2AqPcEKnIiA1wbsSu0= @@ -237,139 +145,38 @@ github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u9 github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f h1:6jduT9Hfc0njg5jJ1DdKCFPdMBrp/mdZfCpa5h+WM74= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20210817201821-5e4468e97817/go.mod h1:JXfQr3d+XO4bL1pxGwKKo09xylQSdZ/mpZ9b2wfVcPs= -github.com/cockroachdb/pebble v0.0.0-20220408205130-c55c1d80c374 h1:nbw4FggbcYdSMv47h/ma5puL5nHIAY6Snpbmiy4xxDA= -github.com/cockroachdb/pebble v0.0.0-20220408205130-c55c1d80c374/go.mod h1:buxOO9GBtOcq1DiXDpIPYrmxY020K2A8lOrwno5FetU= +github.com/cockroachdb/pebble v0.0.0-20230106151110-65ff304d3d7a h1:f9cXPJOu07pznSwbdozW++dO1aUBPxP9HA7jW6zi8mc= +github.com/cockroachdb/pebble v0.0.0-20230106151110-65ff304d3d7a/go.mod h1:JsehdjcR1QgLZkqBeYrbVdE3cdxbdrycA/PN+Cg+RNw= github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/cgroups v1.0.3 h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4= -github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= -github.com/containerd/containerd v1.5.5 h1:q1gxsZsGZ8ddVe98yO6pR21b5xQSMiR61lD0W96pgQo= -github.com/containerd/containerd v1.5.5/go.mod h1:oSTh0QpT1w6jYcGmbiSbxv9OSQYaa88mPyWIuU79zyo= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= -github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= -github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= -github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= -github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= -github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= -github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= +github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= 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-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= -github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= -github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= -github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/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/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= @@ -379,55 +186,39 @@ github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdw github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= 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/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190323231341-8198c7b169ec/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.14+incompatible h1:+T9/PRYWNDo5SZl5qS1r9Mo/0Q8AwxKKPtu9S1yxM0w= -github.com/docker/docker v20.10.14+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v20.10.22+incompatible h1:6jX4yB+NtcbldT90k7vBSaWJDB3i+zkVJT9BEK8kQkk= +github.com/docker/docker v20.10.22+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= -github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-resiliency v1.3.0 h1:RRL0nge+cWGlxXbUzJ7yMcq6w2XBEr19dCN6HECGaT0= +github.com/eapache/go-resiliency v1.3.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.3.5 h1:sWtmgNxYM9P2sP+xEItMozsR3w0cqZFlqnNN1bdl41Y= github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= +github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emirpasic/gods v1.12.1 h1:KEXpRg94qvWNpl3F8PRlzJRFhy1kr6SiBiFH6X2Nwp8= -github.com/emirpasic/gods v1.12.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= 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= @@ -435,136 +226,102 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y 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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fhmq/hmq v0.0.0-20220409045343-c53d8f8a0daa h1:1ZZGxqtbVYLPgAl6RVGpUfvf1nFUuoT6XNim8ZOaShM= -github.com/fhmq/hmq v0.0.0-20220409045343-c53d8f8a0daa/go.mod h1:7up7C+wX2pD7rAT2jDYj2J3nRo0BbsEEO4CJmsyqjcA= +github.com/fhmq/hmq v1.5.0 h1:e8UzrSxcxoQoPkzIpecAQdeIdA/mrr3aPjZCDRZ3Hmg= +github.com/fhmq/hmq v1.5.0/go.mod h1:FrvMxs0oNsB6QH0H8qVCEoAyyi2nrOyZ21M0CmdUUH4= github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.2 h1:SPb1KFFmM+ybpEjPUhCCkZOM5xlovT5UbrMvWnXyBns= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +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.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.13.0 h1:20dgTiUSfxRB/EhMPtxcL9ZEbM1ZdR+W/7f7NWD+xWo= -github.com/getsentry/sentry-go v0.13.0/go.mod h1:EOsfu5ZdvKPfeHYV6pTVQnsjfp30+XA7//UooKNumH0= +github.com/getsentry/sentry-go v0.16.0 h1:owk+S+5XcgJLlGR/3+3s6N4d+uKwqYvh/eS0AIMjPWo= +github.com/getsentry/sentry-go v0.16.0/go.mod h1:ZXCloQLj0pG7mja5NK6NPf2V4A88YJ4pNlc2mOHwh6Y= github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs= -github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= +github.com/gin-gonic/gin v1.8.2 h1:UzKToD9/PoFj/V4rvlKqTRKnQYyz8Sc1MJlv4JHPtvY= +github.com/gin-gonic/gin v1.8.2/go.mod h1:qw5AYuDrzRTnhvusDsrov+fDIxp9Dleuu12h8nfB398= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-echarts/go-echarts v1.0.0 h1:n181E4iXwj4zrU9VYmdM2m8dyhERt2w9k9YhHqdp6A8= github.com/go-echarts/go-echarts v1.0.0/go.mod h1:qbmyAb/Rl1f2w7wKba1D4LoNq4U164yO4/wedFbcWyo= -github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= -github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU= github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs= -github.com/gobuffalo/packd v1.0.1 h1:U2wXfRr4E9DH8IdsDLlRFwTZTK7hLfq9qT/QHXGVe/0= +github.com/gobuffalo/logger v1.0.7 h1:LTLwWelETXDYyqF/ASf0nxaIcdEOIJNxRokPcfI/xbU= +github.com/gobuffalo/logger v1.0.7/go.mod h1:u40u6Bq3VVvaMcy5sRBclD8SXhBYPS0Qk95ubt+1xJM= github.com/gobuffalo/packd v1.0.1/go.mod h1:PP2POP3p3RXGz7Jh6eYEf93S7vA2za6xM7QT85L4+VY= +github.com/gobuffalo/packd v1.0.2 h1:Yg523YqnOxGIWCp69W12yYBKsoChwI7mtu6ceM9Bwfw= +github.com/gobuffalo/packd v1.0.2/go.mod h1:sUc61tDqGMXON80zpKGp92lDb86Km28jfvX7IAyxFT8= github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XEWlY= github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= +github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/gohornet/grocksdb v1.6.38-0.20211012114404-55f425442260 h1:Pf6oR/aezlojjxzaNqIZa5q1+LKFgePrH+E9B57sKiE= -github.com/gohornet/grocksdb v1.6.38-0.20211012114404-55f425442260/go.mod h1:/+iSQrn7Izt6kFhHBQvcE6FkklsKXa8hc35pFyFDrDw= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= 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-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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= @@ -597,7 +354,6 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS 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.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= @@ -617,15 +373,14 @@ 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 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= 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-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= @@ -643,64 +398,54 @@ 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-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-20221219190121-3cb0bae90811 h1:wORs2YN3R3ona/CXYuTvLM31QlgoNKHvlCNuArCDDCU= +github.com/google/pprof v0.0.0-20221219190121-3cb0bae90811/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -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/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= 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/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= @@ -711,8 +456,8 @@ github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/C github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4= -github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -722,16 +467,19 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hjson/hjson-go/v4 v4.0.0 h1:wlm6IYYqHjOdXH1gHev4VoXCaW20HdQAGCxdOEEg2cs= +github.com/hjson/hjson-go/v4 v4.0.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= @@ -739,50 +487,32 @@ github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:q github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/iotaledger/go-ds-kvstore v0.0.0-20220404122649-445475b91fcf h1:3LoDur2QvBLbyXrGubX6HmoP6x5pVn1KkheFonTa6Is= github.com/iotaledger/go-ds-kvstore v0.0.0-20220404122649-445475b91fcf/go.mod h1:KMsgDNZKM3kkaIAoIk/FZ6A1vfVPix91lx2dm3dA6g8= +github.com/iotaledger/grocksdb v1.6.38-0.20211012114404-55f425442260/go.mod h1:/+iSQrn7Izt6kFhHBQvcE6FkklsKXa8hc35pFyFDrDw= +github.com/iotaledger/grocksdb v1.7.5-0.20221128103803-fcdb79760195 h1:W5v+7oSXtSq2OSadYPyaAbPjTJW10T2bOgMDGZcyVOc= +github.com/iotaledger/grocksdb v1.7.5-0.20221128103803-fcdb79760195/go.mod h1:AoAM7v6lyWRQzrmmegOEq759o1PgvvKvn2bEe1A1mc8= github.com/iotaledger/hive.go v0.0.0-20211011085923-fd2eb0a47bf8/go.mod h1:vZXMpgveUkATu1IueKmUJK3/OVgrYRQdH/Jh/yZ2j9Q= -github.com/iotaledger/hive.go v0.0.0-20220408130540-d344e455dd23 h1:YIIS4RcTXKRcRHm2v9Dcf4pOaNColYHqoDB8rubUwGY= -github.com/iotaledger/hive.go v0.0.0-20220408130540-d344e455dd23/go.mod h1:YKe8Y/+kiF1oZWnu6p67QEzofFNxNsAMpP6MpcvbnNM= +github.com/iotaledger/hive.go v0.0.0-20221227223844-749e1d43a081 h1:2KZmrgQFHkBd/BopA+wpW/asoRbFPl+XFvNfVlqrSWI= +github.com/iotaledger/hive.go v0.0.0-20221227223844-749e1d43a081/go.mod h1:n/3e0/ibMEHBCJqxZomsVCIvhMIMibH+05XrYDD5pro= github.com/iotaledger/iota.go v1.0.0 h1:tqm1FxJ/zOdzbrAaQ5BQpVF8dUy2eeGlSeWlNG8GoXY= github.com/iotaledger/iota.go v1.0.0/go.mod h1:RiKYwDyY7aCD1L0YRzHSjOsJ5mUR9yvQpvhZncNcGQI= github.com/iotaledger/iota.go/v2 v2.0.2-0.20220225080023-871c779a63cb h1:32j+/9oRThYzt82QckEs63DSGDQGy+CiSHQ1GEBTVwk= github.com/iotaledger/iota.go/v2 v2.0.2-0.20220225080023-871c779a63cb/go.mod h1:nkQd/FAS51Bjf1UECljhGslyreaswOKWVo4mb0I6lPg= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-cid v0.1.0 h1:YN33LQulcRHjfom/i25yoOZR4Telp1Hr/2RU3d0PnC0= -github.com/ipfs/go-cid v0.1.0/go.mod h1:rH5/Xv83Rfy8Rw6xG+id3DYAMUVmem1MowoKwdXmN2o= +github.com/ipfs/go-cid v0.3.2 h1:OGgOd+JCFM+y1DjWPmVH+2/4POtpDzwcr7VgnB7mZXc= +github.com/ipfs/go-cid v0.3.2/go.mod h1:gQ8pKqT/sUxGY+tIwy1RPpAojYu7jAyCp5Tz1svoupw= github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= -github.com/ipfs/go-datastore v0.5.1/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= +github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk= +github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8= github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= -github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= -github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= -github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/ipfs/go-log/v2 v2.4.0/go.mod h1:nPZnh7Cj7lwS3LpRU5Mwr2ol1c2gXIEXuF6aywqrtmo= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= @@ -791,43 +521,32 @@ github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62 github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= -github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= -github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= -github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg= +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= -github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJzodkA= -github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= +github.com/jcmturner/gokrb5/v8 v8.4.3 h1:iTonLeSJOn7MVUtyMT+arAn5AKAPrkilzhGw8wE/Tq8= +github.com/jcmturner/gokrb5/v8 v8.4.3/go.mod h1:dqRwJGXznQrzw6cWmyo6kH+E7jksEQG/CyVWsJEsJO0= github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -842,9 +561,9 @@ github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0t 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/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= +github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI= +github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U= @@ -854,270 +573,145 @@ github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2 github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0= github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.14 h1:i7WCKDToww0wA+9qrUZ1xOjp218vfFo3nTU6UHp+gOc= +github.com/klauspost/compress v1.15.14/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE= -github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/knadh/koanf v1.2.1/go.mod h1:xpPTwMhsA/aaQLAilyCCqfpEiY1gpa160AiCuWHJUjY= -github.com/knadh/koanf v1.4.1 h1:Z0VGW/uo8NJmjd+L1Dc3S5frq6c62w5xQ9Yf4Mg3wFQ= -github.com/knadh/koanf v1.4.1/go.mod h1:1cfH5223ZeZUOs8FU2UdTmaNfHpqgtjV0+NHjRO43gs= +github.com/knadh/koanf v1.4.5 h1:yKWFswTrqFc0u7jBAoERUz30+N1b1yPXU01gAPr8IrY= +github.com/knadh/koanf v1.4.5/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/koron/go-ssdp v0.0.2 h1:fL3wAoyT6hXHQlORyXUW4Q23kkQpJRgEAYcZB5BR71o= -github.com/koron/go-ssdp v0.0.2/go.mod h1:XoLfkAiA2KeZsYh4DbHxD7h3nR2AZNqVQOa+LJuqPYs= +github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= +github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/labstack/echo-contrib v0.13.1 h1:9TktDom9FJKhkKO45YvV4klW8IedtSUp/k85gZVdZ28= +github.com/labstack/echo-contrib v0.13.1/go.mod h1:LdM7aOHAYLOPmAAGXXG9TuN4h5sh6dPEu4pb6W2HKuU= github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= -github.com/labstack/echo/v4 v4.7.2 h1:Kv2/p8OaQ+M6Ex4eGimg9b9e6icoxA42JSlOR3msKtI= -github.com/labstack/echo/v4 v4.7.2/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= +github.com/labstack/echo/v4 v4.10.0 h1:5CiyngihEO4HXsz3vVsJn7f8xAlWwRr3aY6Ih280ZKA= +github.com/labstack/echo/v4 v4.10.0/go.mod h1:S/T/5fy/GigaXnHTkh0ZGe4LpkkQysvRjFMSUTkDRNQ= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/labstack/gommon v0.3.2-0.20220410183028-64116baad496 h1:n+6DpaE0j+mYn9+51nERoX3XD2M4rUpSvIkjNw17rtg= -github.com/labstack/gommon v0.3.2-0.20220410183028-64116baad496/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= -github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= -github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= -github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p v0.18.0 h1:moKKKG875KNGsCjZxTIFB75ihHiVjFeWg5I4aR1pDLk= -github.com/libp2p/go-libp2p v0.18.0/go.mod h1:+veaZ9z1SZQhmc5PW78jvnnxZ89Mgvmh4cggO11ETmw= -github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= -github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= -github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= -github.com/libp2p/go-libp2p-blankhost v0.3.0 h1:kTnLArltMabZlzY63pgGDA4kkUcLkBFSM98zBssn/IY= -github.com/libp2p/go-libp2p-blankhost v0.3.0/go.mod h1:urPC+7U01nCGgJ3ZsV8jdwTp6Ji9ID0dMTvq+aJ+nZU= -github.com/libp2p/go-libp2p-circuit v0.6.0 h1:rw/HlhmUB3OktS/Ygz6+2XABOmHKzZpPUuMNUMosj8w= -github.com/libp2p/go-libp2p-circuit v0.6.0/go.mod h1:kB8hY+zCpMeScyvFrKrGicRdid6vNXbunKE4rXATZ0M= -github.com/libp2p/go-libp2p-connmgr v0.3.1 h1:alEy2fpGKFu+7ZhQF4GF0dvKLyVHeLtIfS/KziwoiZw= -github.com/libp2p/go-libp2p-connmgr v0.3.1/go.mod h1:RVoyPjJm0J9Vd1m6qUN2Tn7kJm4rL1Ml20pFsFgPGik= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.6/go.mod h1:dgHr0l0hIKfWpGpqAMbpo19pen9wJfdCGv51mTmdpmM= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.13.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= -github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M= -github.com/libp2p/go-libp2p-mplex v0.6.0 h1:5ubK4/vLE2JkogKlJ2JLeXcSfA6qY6mE2HMJV9ve/Sk= -github.com/libp2p/go-libp2p-mplex v0.6.0/go.mod h1:i3usuPrBbh9FD2fLZjGpotyNkwr42KStYZQY7BeTiu4= -github.com/libp2p/go-libp2p-nat v0.1.0 h1:vigUi2MEN+fwghe5ijpScxtbbDz+L/6y8XwlzYOJgSY= -github.com/libp2p/go-libp2p-nat v0.1.0/go.mod h1:DQzAG+QbDYjN1/C3B6vXucLtz3u9rEonLVPtZVzQqks= -github.com/libp2p/go-libp2p-noise v0.3.0 h1:NCVH7evhVt9njbTQshzT7N1S3Q6fjj9M11FCgfH5+cA= -github.com/libp2p/go-libp2p-noise v0.3.0/go.mod h1:JNjHbociDJKHD64KTkzGnzqJ0FEV5gHJa6AB00kbCNQ= -github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= -github.com/libp2p/go-libp2p-peerstore v0.6.0 h1:HJminhQSGISBIRb93N6WK3t6Fa8OOTnHd/VBjL4mY5A= -github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= -github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= -github.com/libp2p/go-libp2p-quic-transport v0.16.1/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= -github.com/libp2p/go-libp2p-quic-transport v0.17.0 h1:yFh4Gf5MlToAYLuw/dRvuzYd1EnE2pX3Lq1N6KDiWRQ= -github.com/libp2p/go-libp2p-quic-transport v0.17.0/go.mod h1:x4pw61P3/GRCcSLypcQJE/Q2+E9f4X+5aRcZLXf20LM= -github.com/libp2p/go-libp2p-resource-manager v0.1.5/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= -github.com/libp2p/go-libp2p-resource-manager v0.2.0 h1:Ul/k5d5StIpAtq7IapAEGh/2+0rwsJGXYJ6Kbzeedtc= -github.com/libp2p/go-libp2p-resource-manager v0.2.0/go.mod h1:K+eCkiapf+ey/LADO4TaMpMTP9/Qde/uLlrnRqV4PLQ= -github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= -github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= -github.com/libp2p/go-libp2p-swarm v0.10.2 h1:UaXf+CTq6Ns1N2V1EgqJ9Q3xaRsiN7ImVlDMpirMAWw= -github.com/libp2p/go-libp2p-swarm v0.10.2/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= -github.com/libp2p/go-libp2p-testing v0.8.0/go.mod h1:gRdsNxQSxAZowTgcLY7CC33xPmleZzoBpqSYbWenqPc= -github.com/libp2p/go-libp2p-testing v0.9.0 h1:NnqhCnKispyyodubaZY0TYRh3Nz2DMBjmeKJJuPoos8= -github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-tls v0.3.1/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-tls v0.4.0 h1:5EbzrSqAxP8z1MCZfeBz/8+9ch0IQMQzAxnCihC1MW8= -github.com/libp2p/go-libp2p-tls v0.4.0/go.mod h1:EKCixHEysLNDlLUoKxv+3f/Lp90O2EXNjTr0UQDnrIw= -github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.1 h1:MSMe+tUfxpC9GArTz7a4G5zQKQgGh00Vio87d3j3xIg= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.1/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= -github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= -github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= -github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= -github.com/libp2p/go-libp2p-yamux v0.8.2 h1:6GKWntresp0TFxMP/oSoH96nV8XKJRdynXsdp43dn0Y= -github.com/libp2p/go-libp2p-yamux v0.8.2/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= -github.com/libp2p/go-mplex v0.6.0 h1:5kKp029zrsLVJT5q6ASt4LwuZFxj3B13wXXaGmFrWg0= -github.com/libp2p/go-mplex v0.6.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-msgio v0.1.0 h1:8Q7g/528ivAlfXTFWvWhVjTE8XG8sDTkRUKPYh9+5Q8= -github.com/libp2p/go-msgio v0.1.0/go.mod h1:eNlv2vy9V2X/kNldcZ+SShFE++o2Yjxwx6RAYsmgJnE= +github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= +github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= +github.com/libp2p/go-libp2p v0.24.2 h1:iMViPIcLY0D6zr/f+1Yq9EavCZu2i7eDstsr1nEwSAk= +github.com/libp2p/go-libp2p v0.24.2/go.mod h1:WuxtL2V8yGjam03D93ZBC19tvOUiPpewYv1xdFGWu1k= +github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= +github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI= +github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= +github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= +github.com/libp2p/go-msgio v0.2.0/go.mod h1:dBVM1gW3Jk9XqHkU4eKdGvVHdLa51hoGfll6jMJMSlY= github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= -github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= -github.com/libp2p/go-netroute v0.2.0/go.mod h1:Vio7LTzZ+6hoT4CMZi5/6CpY3Snzh2vgZhWgxMNwlQI= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= -github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= -github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= -github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= +github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= +github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ= +github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo= +github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= +github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560= +github.com/libp2p/go-reuseport v0.2.0/go.mod h1:bvVho6eLMm6Bz5hmU0LYN3ixd3nPPvtIlaURZZgOY4k= github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-stream-muxer-multistream v0.4.0 h1:HsM/9OdtqnIzjVXcxTXjmqKrj3gJ8kacaOJwJS1ipaY= -github.com/libp2p/go-stream-muxer-multistream v0.4.0/go.mod h1:nb+dGViZleRP4XcyHuZSVrJCBl55nRBOMmiSL/dyziw= -github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= -github.com/libp2p/go-tcp-transport v0.5.1 h1:edOOs688VLZAozWC7Kj5/6HHXKNwi9M6wgRmmLa8M6Q= -github.com/libp2p/go-tcp-transport v0.5.1/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= -github.com/libp2p/go-ws-transport v0.6.0 h1:326XBL6Q+5CQ2KtjXz32+eGu02W/Kz2+Fm4SpXdr0q4= -github.com/libp2p/go-ws-transport v0.6.0/go.mod h1:dXqtI9e2JV9FtF1NOtWVZSKXh5zXvnuwPXfj8GPBbYU= -github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/libp2p/go-yamux/v3 v3.0.1/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/libp2p/go-yamux/v3 v3.0.2/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/libp2p/go-yamux/v3 v3.1.0 h1:2johPiST4xsXsqQ/38C2MAERw0hJ+t8oehHWA8F2R3Q= -github.com/libp2p/go-yamux/v3 v3.1.0/go.mod h1:jeLEQgLXqE2YqX1ilAClIfCMDY+0uXQUKmmb/qp0gT4= -github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg= -github.com/lucas-clemente/quic-go v0.27.0 h1:v6WY87q9zD4dKASbG8hy/LpzAVNzEQzw8sEIeloJsc4= -github.com/lucas-clemente/quic-go v0.27.0/go.mod h1:AzgQoPda7N+3IqMMMkywBKggIFo2KT6pfnlrQ2QieeI= +github.com/libp2p/go-yamux/v4 v4.0.0 h1:+Y80dV2Yx/kv7Y7JKu0LECyVdMXm1VUoko+VQ9rBfZQ= +github.com/libp2p/go-yamux/v4 v4.0.0/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= +github.com/lucas-clemente/quic-go v0.31.1 h1:O8Od7hfioqq0PMYHDyBkxU2aA7iZ2W9pjbrWuja2YR4= +github.com/lucas-clemente/quic-go v0.31.1/go.mod h1:0wFbizLgYzqHqtlyxyCaJKlE7bYgE6JQ+54TLd/Dq2g= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/markbates/errx v1.1.0 h1:QDFeR+UP95dO12JgW+tgi2UVfo0V8YBHiUIOaeBPiEI= github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc= github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY= github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI= github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= -github.com/marten-seemann/qtls-go1-16 v0.1.5/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-17 v0.1.1 h1:DQjHPq+aOzUeh9/lixAGunn6rIOQyWChPSI4+hgW7jc= -github.com/marten-seemann/qtls-go1-17 v0.1.1/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI= -github.com/marten-seemann/qtls-go1-18 v0.1.1 h1:qp7p7XXUFL7fpBvSS1sWD+uSqPvzNQK43DH+/qEkj0Y= -github.com/marten-seemann/qtls-go1-18 v0.1.1/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= +github.com/marten-seemann/qpack v0.3.0 h1:UiWstOgT8+znlkDPOg2+3rIuYXJ2CnGDkGUXN6ki6hE= +github.com/marten-seemann/qtls-go1-18 v0.1.4 h1:ogomB+lWV3Vmwiu6RTwDVTMGx+9j7SEi98e8QB35Its= +github.com/marten-seemann/qtls-go1-18 v0.1.4/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= +github.com/marten-seemann/qtls-go1-19 v0.1.2 h1:ZevAEqKXH0bZmoOBPiqX2h5rhQ7cbZi+X+rlq2JUbCE= +github.com/marten-seemann/qtls-go1-19 v0.1.2/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= +github.com/marten-seemann/webtransport-go v0.4.3 h1:vkt5o/Ci+luknRteWdYGYH1KcB7ziup+J+1PzZJIvmg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= +github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/dns v1.1.48 h1:Ucfr7IIVyMBz4lRE8qmGUuZ4Wt3/ZGu9hmcMT3Uu4tQ= -github.com/miekg/dns v1.1.48/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= @@ -1131,19 +725,13 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1154,274 +742,152 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= -github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= +github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= +github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= +github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multiaddr v0.5.0 h1:i/JuOoVg4szYQ4YEzDGtb2h0o8M7CG/Yq6cGlcjWZpM= -github.com/multiformats/go-multiaddr v0.5.0/go.mod h1:3KAxNkUqLTJ20AAwN4XVX4kZar+bR+gh4zgbfr3SNug= +github.com/multiformats/go-multiaddr v0.8.0 h1:aqjksEcqK+iD/Foe1RRFsGZh8+XFiGo7FgUCZlpv3LU= +github.com/multiformats/go-multiaddr v0.8.0/go.mod h1:Fs50eBDWvZu+l3/9S6xAE7ZYj6yhxlvaVZjakWN7xRs= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= +github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= +github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= +github.com/multiformats/go-multicodec v0.7.0 h1:rTUjGOwjlhGHbEMbPoSUJowG1spZTVsITRANCjKTUAQ= +github.com/multiformats/go-multicodec v0.7.0/go.mod h1:GUC8upxSBE4oG+q3kWZRw/+6yC1BqO550bjhWsJbZlw= github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-multihash v0.1.0 h1:CgAgwqk3//SVEw3T+6DqI4mWMyRuDwZtOWcJT0q9+EA= -github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-multistream v0.2.2 h1:TCYu1BHTDr1F/Qm75qwYISQdzGcRdC21nFgQW7l7GBo= -github.com/multiformats/go-multistream v0.2.2/go.mod h1:UIcnm7Zuo8HKG+HkWgfQsGL+/MIEhyTqbODbIUwSXKs= +github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= +github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= +github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o= +github.com/multiformats/go-multistream v0.3.3/go.mod h1:ODRoqamLUsETKS9BNcII4gcRsJBU5VAwRIv7O39cEXg= github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= +github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oasisprotocol/ed25519 v0.0.0-20210505154701-76d8c688d86e h1:pHDo+QVA9a72j08pr99Zh91vkQibH0CiNNSp36sOflA= github.com/oasisprotocol/ed25519 v0.0.0-20210505154701-76d8c688d86e/go.mod h1:IZbb50w3AB72BVobEF6qG93NNSrTw/V2QlboxqSu3Xw= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/ginkgo/v2 v2.6.1 h1:1xQPCjcqYw/J5LchOcp4/2q/jzJFjiAOc25chhnDw+Q= +github.com/onsi/ginkgo/v2 v2.6.1/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.0.1/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/panjf2000/ants/v2 v2.4.6/go.mod h1:f6F0NZVFsGCp5A7QW/Zj/m92atWwOkY0OIhFxRNFr4A= -github.com/panjf2000/ants/v2 v2.4.8 h1:JgTbolX6K6RreZ4+bfctI0Ifs+3mrE5BIHudQxUDQ9k= -github.com/panjf2000/ants/v2 v2.4.8/go.mod h1:f6F0NZVFsGCp5A7QW/Zj/m92atWwOkY0OIhFxRNFr4A= +github.com/panjf2000/ants/v2 v2.7.1 h1:qBy5lfSdbxvrR0yUnZfaEDjf0FlCw4ufsbcsxmE7r+M= +github.com/panjf2000/ants/v2 v2.7.1/go.mod h1:KIBmYG9QQX5U2qzFP/yQJaq/nSb6rahS9iEHkrCMgM8= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.0-beta.7 h1:L4yIgTPTZBEmqW8Wkzkk59Ee8wsVRVct80l+lZBQuYw= -github.com/pelletier/go-toml/v2 v2.0.0-beta.7/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= +github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20220331194723-8ee3e6ded87a h1:VXRRto5GMJPNfB7MNbUVoFhtxwoYjBEsIt/NpWg42U0= -github.com/petermattis/goid v0.0.0-20220331194723-8ee3e6ded87a/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= -github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= +github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.33.0 h1:rHgav/0a6+uYgGdNt3jwz8FNSesO/Hsang3O0T9A5SE= -github.com/prometheus/common v0.33.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= +github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.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/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/raulk/clock v1.1.0 h1:dpb29+UKMbLqiU/jqIJptgLR1nn23HLgMY0sTCDza5Y= -github.com/raulk/clock v1.1.0/go.mod h1:3MpVxdZ/ODBQDxbN+kzshf5OSZwPjtMDx6BBXBmOeY0= -github.com/raulk/go-watchdog v1.2.0 h1:konN75pw2BMmZ+AfuAm5rtFsWcJpKF3m02rKituuXNo= -github.com/raulk/go-watchdog v1.2.0/go.mod h1:lzSbAl5sh4rtI8tYHU01BWIDzgzqaQLj6RcA1i4mlqI= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +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/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= +github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM= -github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= @@ -1449,64 +915,44 @@ github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go. github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/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.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify 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= @@ -1514,78 +960,46 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +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/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e h1:IWllFTiDjjLIf2oeKxpIUmtiDV5sn71VgeQgg6vcE7k= github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e/go.mod h1:d7u6HkTYKSv5m6MCKkOQlHwaShTMl3HjqSGW3XtVhXM= -github.com/tidwall/gjson v1.14.0 h1:6aeJ0bzojgWLa82gDQHcx3S0Lr/O51I9bJ5nv6JFx5w= -github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= +github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= +github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= +github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/ugorji/go/codec v1.2.8 h1:sgBJS6COt0b/P40VouWKdseidkDgHxYGm0SAglUHfP0= +github.com/ugorji/go/codec v1.2.8/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= -github.com/wollac/iota-crypto-demo v0.0.0-20211124150533-68dd13b59838 h1:l2x0F76xeTGOacj4jq97gh9ML0GvxExCLoLKFK5zRHs= -github.com/wollac/iota-crypto-demo v0.0.0-20211124150533-68dd13b59838/go.mod h1:/ppk5XTA9XkH4sdjhcxjbasdwJlNJj4AOJyHG9JOugE= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.0/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/wollac/iota-crypto-demo v0.0.0-20221117162917-b10619eccb98 h1:i7k63xHOX2ntuHrhHewfKro67c834jug2DIk599fqAA= +github.com/wollac/iota-crypto-demo v0.0.0-20221117162917-b10619eccb98/go.mod h1:Knu2XMRWe8SkwTlHc/+ghP+O9DEaZRQQEyTjvLJ5Cck= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= @@ -1599,9 +1013,6 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.dedis.ch/fixbuf v1.0.3/go.mod h1:yzJMt34Wa5xD37V5RTdmp38cz3QhMagdGoem9anUalw= go.dedis.ch/kyber/v3 v3.0.4/go.mod h1:OzvaEnPvKlyrWyp3kGXlFdp7ap1VC6RkZDTaPikqhsQ= go.dedis.ch/kyber/v3 v3.0.9/go.mod h1:rhNjUUg6ahf8HEg5HUvVBYoWY4boAafX8tYxX+PS+qg= @@ -1609,20 +1020,15 @@ go.dedis.ch/kyber/v3 v3.0.13/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= go.mongodb.org/mongo-driver v1.0.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1631,80 +1037,57 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/dig v1.12.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw= -go.uber.org/dig v1.14.1 h1:fyakRgZDdi2F8FgwJJoRGangMSPTIxPSLGzR3Oh0/54= -go.uber.org/dig v1.14.1/go.mod h1:52EKx/Vjdpz9EzeNcweC4YMsTrDdFn9mS/+Uw5ZnVTI= +go.uber.org/dig v1.16.0 h1:O48QoUEj4ePocypAIE5jz+SrxVdG/izHM1CZ/Yjrwww= +go.uber.org/dig v1.16.0/go.mod h1:557JTAUZT5bUK0SvCwikmLPPtdQhfvLYtO5tJgQSbnk= +go.uber.org/fx v1.19.0 h1:QetyAKH/ya3Avfg+s84DljRV+svcSAo8k+2y+B+ZaRQ= +go.uber.org/fx v1.19.0/go.mod h1:bGK+AEy7XUwTBkqCsK/vDyFF0JJOA6X5KWpNC0e6qTA= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM= -golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= 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= @@ -1716,8 +1099,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20220407100705-7b9b53b0aca4 h1:K3x+yU+fbot38x5bQbU2QqUAVyYLEktdNH2GxZLnM3U= -golang.org/x/exp v0.0.0-20220407100705-7b9b53b0aca4/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= +golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a h1:tlXy25amD5A7gOfbXdqCGN5k8ESEed/Ee1E5RcrYnqU= +golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1744,9 +1127,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1758,25 +1140,20 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/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-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-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= @@ -1792,31 +1169,25 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ 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-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 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-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3 h1:EN5+DfgmRMvRUrMGERW2gQl3Vc+Z7ZMnI/xdEpPSf0c= -golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1831,8 +1202,6 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ 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-20210402161424-2e8d93401602/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-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1844,8 +1213,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ 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 h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1853,14 +1223,11 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/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-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1871,41 +1238,29 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1917,63 +1272,49 @@ golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/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-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/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-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210909193231-528a39cd75f3/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/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-20220408201424-a24fb2fb8a0f h1:8w7RhxzTVgUzw/AH/9mUV5q0vMgy40SQRursCcfmkCw= -golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/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 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= 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= @@ -1983,22 +1324,20 @@ 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/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs= -golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -2011,11 +1350,10 @@ golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBn 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-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2030,7 +1368,6 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -2054,7 +1391,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210112230658-8b4aab62c064/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -2065,18 +1401,17 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= 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 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -2108,7 +1443,6 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -2120,8 +1454,6 @@ google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRn 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-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-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= @@ -2130,7 +1462,6 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx 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-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -2150,7 +1481,6 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D 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-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2161,29 +1491,22 @@ google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/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-20220407144326-9054f6ed7bac h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9 h1:3wPBShTLWQnEkZ9VW/HZZ8zT/9LLtleBtq7l8SKtJIA= +google.golang.org/genproto v0.0.0-20230106154932-a12b697841d9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.28.1/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= @@ -2196,8 +1519,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= 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= @@ -2211,22 +1534,17 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/h2non/gock.v1 v1.0.14/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= @@ -2236,17 +1554,9 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -2259,13 +1569,11 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2275,43 +1583,11 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= -k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= 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/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/integration-tests/tester/docker-compose.yml b/integration-tests/tester/docker-compose.yml index 5013b2761..47dea9158 100644 --- a/integration-tests/tester/docker-compose.yml +++ b/integration-tests/tester/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.5" services: tester: container_name: tester - image: golang:1.18 + image: golang:1.19 working_dir: /tmp/hornet/integration-tests/tester command: /tmp/assets/entrypoint.sh environment: diff --git a/integration-tests/tester/framework/config.go b/integration-tests/tester/framework/config.go index 308d92cba..b70774e0f 100644 --- a/integration-tests/tester/framework/config.go +++ b/integration-tests/tester/framework/config.go @@ -8,21 +8,21 @@ import ( "github.com/docker/go-connections/nat" - "github.com/gohornet/hornet/plugins/autopeering" - - "github.com/gohornet/hornet/core/app" - "github.com/gohornet/hornet/core/gossip" - "github.com/gohornet/hornet/core/p2p" - "github.com/gohornet/hornet/core/protocfg" - "github.com/gohornet/hornet/core/snapshot" - coopkg "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/utils" - "github.com/gohornet/hornet/plugins/coordinator" - "github.com/gohornet/hornet/plugins/dashboard" - "github.com/gohornet/hornet/plugins/migrator" - "github.com/gohornet/hornet/plugins/profiling" - "github.com/gohornet/hornet/plugins/receipt" - "github.com/gohornet/hornet/plugins/restapi" + "github.com/iotaledger/hornet/plugins/autopeering" + + "github.com/iotaledger/hornet/core/app" + "github.com/iotaledger/hornet/core/gossip" + "github.com/iotaledger/hornet/core/p2p" + "github.com/iotaledger/hornet/core/protocfg" + "github.com/iotaledger/hornet/core/snapshot" + coopkg "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/utils" + "github.com/iotaledger/hornet/plugins/coordinator" + "github.com/iotaledger/hornet/plugins/dashboard" + "github.com/iotaledger/hornet/plugins/migrator" + "github.com/iotaledger/hornet/plugins/profiling" + "github.com/iotaledger/hornet/plugins/receipt" + "github.com/iotaledger/hornet/plugins/restapi" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) diff --git a/integration-tests/tester/framework/framework.go b/integration-tests/tester/framework/framework.go index e3937be31..68be2d2de 100644 --- a/integration-tests/tester/framework/framework.go +++ b/integration-tests/tester/framework/framework.go @@ -10,10 +10,10 @@ import ( "time" "github.com/docker/docker/client" - "github.com/libp2p/go-libp2p-core/crypto" + "github.com/libp2p/go-libp2p/core/crypto" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/p2p/autopeering" + "github.com/iotaledger/hornet/pkg/p2p/autopeering" ) var ( diff --git a/integration-tests/tester/framework/network.go b/integration-tests/tester/framework/network.go index 10aafa431..912711c42 100644 --- a/integration-tests/tester/framework/network.go +++ b/integration-tests/tester/framework/network.go @@ -11,8 +11,8 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/client" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/peer" ) type NetworkType byte diff --git a/integration-tests/tester/framework/node.go b/integration-tests/tester/framework/node.go index 0baa26c07..c7d8e8a29 100644 --- a/integration-tests/tester/framework/node.go +++ b/integration-tests/tester/framework/node.go @@ -8,7 +8,7 @@ import ( "sync/atomic" "time" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/peer" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/integration-tests/tester/framework/profiling.go b/integration-tests/tester/framework/profiling.go index c81a36dad..c7d155695 100644 --- a/integration-tests/tester/framework/profiling.go +++ b/integration-tests/tester/framework/profiling.go @@ -5,7 +5,7 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "strconv" "time" @@ -13,10 +13,10 @@ import ( "github.com/go-echarts/go-echarts/charts" "github.com/gorilla/websocket" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/pkg/tipselect" - "github.com/gohornet/hornet/plugins/dashboard" "github.com/iotaledger/hive.go/websockethub" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/plugins/dashboard" ) const ( @@ -259,7 +259,7 @@ func (n *Profiler) GraphMetrics(dur time.Duration) error { return fmt.Errorf("unable to render metrics charts: %w", err) } - return writeFileInLogDir(fmt.Sprintf("%s_%s_%d.html", n.targetName, metricsChartPrefix, time.Now().Unix()), ioutil.NopCloser(&buf)) + return writeFileInLogDir(fmt.Sprintf("%s_%s_%d.html", n.targetName, metricsChartPrefix, time.Now().Unix()), io.NopCloser(&buf)) } // queries the given pprof URI and returns the profile data. @@ -280,7 +280,7 @@ func (n *Profiler) query(path string) ([]byte, error) { } defer func() { _ = resp.Body.Close() }() - profileBytes, err := ioutil.ReadAll(resp.Body) + profileBytes, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("unable to read profile from response: %w", err) } @@ -289,6 +289,6 @@ func (n *Profiler) query(path string) ([]byte, error) { // writeProfile writes the given profile data to the given file in the log directory. func (n *Profiler) writeProfile(fileName string, profileBytes []byte) error { - profileReader := ioutil.NopCloser(bytes.NewReader(profileBytes)) + profileReader := io.NopCloser(bytes.NewReader(profileBytes)) return writeFileInLogDir(fileName, profileReader) } diff --git a/integration-tests/tester/framework/static_network.go b/integration-tests/tester/framework/static_network.go index ad977d727..ff4c4f453 100644 --- a/integration-tests/tester/framework/static_network.go +++ b/integration-tests/tester/framework/static_network.go @@ -15,10 +15,10 @@ type connected bool type StaticPeeringLayout map[int]map[int]connected // Validate validates whether the static peering layout is valid by checking: -// - the layout isn't empty -// - keys must be continuous numbers reflecting the ID of the node -// - a node must hold nodes to peer to and they must exist in the map -// - a node doesn't peer to itself +// - the layout isn't empty +// - keys must be continuous numbers reflecting the ID of the node +// - a node must hold nodes to peer to and they must exist in the map +// - a node doesn't peer to itself func (spl StaticPeeringLayout) Validate() error { if len(spl) == 0 { return ErrLayoutEmpty @@ -118,7 +118,7 @@ func (n *StaticNetwork) AwaitPeering(ctx context.Context) error { peers, err := node.DebugNodeAPIClient.Peers(context.Background()) if err != nil { - log.Println(fmt.Sprintf("node %s, peering: %s", node.ID.String(), err)) + log.Printf("node %s, peering: %s\n", node.ID.String(), err) continue } diff --git a/integration-tests/tester/framework/visualizer_test.go b/integration-tests/tester/framework/visualizer_test.go index 12156619e..074d9c760 100644 --- a/integration-tests/tester/framework/visualizer_test.go +++ b/integration-tests/tester/framework/visualizer_test.go @@ -11,7 +11,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/hornet" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/integration-tests/tester/tests/autopeering/autopeering_test.go b/integration-tests/tester/tests/autopeering/autopeering_test.go index 892c9e112..3c7e1c357 100644 --- a/integration-tests/tester/tests/autopeering/autopeering_test.go +++ b/integration-tests/tester/tests/autopeering/autopeering_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" ) // TestAutopeering creates an autopeered network and then checks whether all nodes are synced. diff --git a/integration-tests/tester/tests/autopeering/main_test.go b/integration-tests/tester/tests/autopeering/main_test.go index 35d62b1eb..848a41375 100644 --- a/integration-tests/tester/tests/autopeering/main_test.go +++ b/integration-tests/tester/tests/autopeering/main_test.go @@ -4,7 +4,7 @@ import ( "os" "testing" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" ) var f *framework.Framework diff --git a/integration-tests/tester/tests/benchmark/benchmark_test.go b/integration-tests/tester/tests/benchmark/benchmark_test.go index 6009b5c4e..7463371f8 100644 --- a/integration-tests/tester/tests/benchmark/benchmark_test.go +++ b/integration-tests/tester/tests/benchmark/benchmark_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" ) // TestNetworkBenchmark boots up a statically peered network and then graphs MPS, CPU and memory profiles diff --git a/integration-tests/tester/tests/benchmark/main_test.go b/integration-tests/tester/tests/benchmark/main_test.go index 28a8388de..3b0ab8767 100644 --- a/integration-tests/tester/tests/benchmark/main_test.go +++ b/integration-tests/tester/tests/benchmark/main_test.go @@ -4,7 +4,7 @@ import ( "os" "testing" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" ) var f *framework.Framework diff --git a/integration-tests/tester/tests/common/common_test.go b/integration-tests/tester/tests/common/common_test.go index 57a63cd5f..79b3dfcd6 100644 --- a/integration-tests/tester/tests/common/common_test.go +++ b/integration-tests/tester/tests/common/common_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" ) // TestCommon boots up a statically peered network and then checks that all diff --git a/integration-tests/tester/tests/common/main_test.go b/integration-tests/tester/tests/common/main_test.go index 28a8388de..3b0ab8767 100644 --- a/integration-tests/tester/tests/common/main_test.go +++ b/integration-tests/tester/tests/common/main_test.go @@ -4,7 +4,7 @@ import ( "os" "testing" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" ) var f *framework.Framework diff --git a/integration-tests/tester/tests/migration/batch_test.go b/integration-tests/tester/tests/migration/batch_test.go index 9325de0fe..2d385ed7b 100644 --- a/integration-tests/tester/tests/migration/batch_test.go +++ b/integration-tests/tester/tests/migration/batch_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/integration-tests/tester/tests/migration/main_test.go b/integration-tests/tester/tests/migration/main_test.go index 15b73451e..396dcd860 100644 --- a/integration-tests/tester/tests/migration/main_test.go +++ b/integration-tests/tester/tests/migration/main_test.go @@ -4,7 +4,7 @@ import ( "os" "testing" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" ) var f *framework.Framework diff --git a/integration-tests/tester/tests/migration/migration_test.go b/integration-tests/tester/tests/migration/migration_test.go index fe8023844..0354095c7 100644 --- a/integration-tests/tester/tests/migration/migration_test.go +++ b/integration-tests/tester/tests/migration/migration_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/integration-tests/tester/tests/snapshot/main_test.go b/integration-tests/tester/tests/snapshot/main_test.go index d721094c7..35d30ec63 100644 --- a/integration-tests/tester/tests/snapshot/main_test.go +++ b/integration-tests/tester/tests/snapshot/main_test.go @@ -4,7 +4,7 @@ import ( "os" "testing" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" ) var f *framework.Framework diff --git a/integration-tests/tester/tests/snapshot/snapshot_test.go b/integration-tests/tester/tests/snapshot/snapshot_test.go index dd1049116..b39751fac 100644 --- a/integration-tests/tester/tests/snapshot/snapshot_test.go +++ b/integration-tests/tester/tests/snapshot/snapshot_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" "github.com/iotaledger/iota.go/consts" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/integration-tests/tester/tests/value/main_test.go b/integration-tests/tester/tests/value/main_test.go index 1481a962a..88792700d 100644 --- a/integration-tests/tester/tests/value/main_test.go +++ b/integration-tests/tester/tests/value/main_test.go @@ -4,7 +4,7 @@ import ( "os" "testing" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" ) var f *framework.Framework diff --git a/integration-tests/tester/tests/value/value_test.go b/integration-tests/tester/tests/value/value_test.go index 8845cbd22..dcc05db23 100644 --- a/integration-tests/tester/tests/value/value_test.go +++ b/integration-tests/tester/tests/value/value_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/integration-tests/tester/framework" + "github.com/iotaledger/hornet/integration-tests/tester/framework" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) diff --git a/main.go b/main.go index 382b42c19..9a444852f 100644 --- a/main.go +++ b/main.go @@ -1,34 +1,34 @@ package main import ( - "github.com/gohornet/hornet/core/app" - "github.com/gohornet/hornet/core/database" - "github.com/gohornet/hornet/core/gossip" - "github.com/gohornet/hornet/core/gracefulshutdown" - "github.com/gohornet/hornet/core/p2p" - "github.com/gohornet/hornet/core/pow" - "github.com/gohornet/hornet/core/profile" - "github.com/gohornet/hornet/core/protocfg" - "github.com/gohornet/hornet/core/snapshot" - "github.com/gohornet/hornet/core/tangle" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/plugins/autopeering" - "github.com/gohornet/hornet/plugins/coordinator" - "github.com/gohornet/hornet/plugins/dashboard" - "github.com/gohornet/hornet/plugins/debug" - "github.com/gohornet/hornet/plugins/faucet" - "github.com/gohornet/hornet/plugins/migrator" - "github.com/gohornet/hornet/plugins/mqtt" - "github.com/gohornet/hornet/plugins/participation" - "github.com/gohornet/hornet/plugins/profiling" - "github.com/gohornet/hornet/plugins/prometheus" - "github.com/gohornet/hornet/plugins/receipt" - "github.com/gohornet/hornet/plugins/restapi" - restapiv1 "github.com/gohornet/hornet/plugins/restapi/v1" - "github.com/gohornet/hornet/plugins/spammer" - "github.com/gohornet/hornet/plugins/urts" - "github.com/gohornet/hornet/plugins/versioncheck" - "github.com/gohornet/hornet/plugins/warpsync" + "github.com/iotaledger/hornet/core/app" + "github.com/iotaledger/hornet/core/database" + "github.com/iotaledger/hornet/core/gossip" + "github.com/iotaledger/hornet/core/gracefulshutdown" + "github.com/iotaledger/hornet/core/p2p" + "github.com/iotaledger/hornet/core/pow" + "github.com/iotaledger/hornet/core/profile" + "github.com/iotaledger/hornet/core/protocfg" + "github.com/iotaledger/hornet/core/snapshot" + "github.com/iotaledger/hornet/core/tangle" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/plugins/autopeering" + "github.com/iotaledger/hornet/plugins/coordinator" + "github.com/iotaledger/hornet/plugins/dashboard" + "github.com/iotaledger/hornet/plugins/debug" + "github.com/iotaledger/hornet/plugins/faucet" + "github.com/iotaledger/hornet/plugins/migrator" + "github.com/iotaledger/hornet/plugins/mqtt" + "github.com/iotaledger/hornet/plugins/participation" + "github.com/iotaledger/hornet/plugins/profiling" + "github.com/iotaledger/hornet/plugins/prometheus" + "github.com/iotaledger/hornet/plugins/receipt" + "github.com/iotaledger/hornet/plugins/restapi" + restapiv1 "github.com/iotaledger/hornet/plugins/restapi/v1" + "github.com/iotaledger/hornet/plugins/spammer" + "github.com/iotaledger/hornet/plugins/urts" + "github.com/iotaledger/hornet/plugins/versioncheck" + "github.com/iotaledger/hornet/plugins/warpsync" ) func main() { diff --git a/pkg/common/errors.go b/pkg/common/errors.go index 4acdd1db7..b3ecbba81 100644 --- a/pkg/common/errors.go +++ b/pkg/common/errors.go @@ -5,6 +5,8 @@ import ( ) var ( + // ErrCritical is returned when a critical error stops the execution of a task. + ErrCritical = errors.New("critical error") // ErrOperationAborted is returned when the operation was aborted e.g. by a shutdown signal. ErrOperationAborted = errors.New("operation was aborted") // ErrMessageNotFound is returned when a message was not found. @@ -13,6 +15,8 @@ var ( ErrNodeNotSynced = errors.New("node is not synchronized") // ErrNodeLoadTooHigh is returned when the load on the node is too high. ErrNodeLoadTooHigh = errors.New("node load is too high") + // ErrSnapshotInfoNotFound is returned when the snapshot info is not found in the database. + ErrSnapshotInfoNotFound = errors.New("snapshot info not found") ) // CriticalError wraps the given error as a critical error. diff --git a/pkg/common/errors_test.go b/pkg/common/errors_test.go index a07821bda..037343442 100644 --- a/pkg/common/errors_test.go +++ b/pkg/common/errors_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/common" ) func TestSoftError_Error(t *testing.T) { diff --git a/pkg/dag/children_traverser.go b/pkg/dag/children_traverser.go index d75c3826a..4be39b750 100644 --- a/pkg/dag/children_traverser.go +++ b/pkg/dag/children_traverser.go @@ -7,9 +7,9 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/utils" ) // ChildrenTraverser can be used to walk the dag in direction of the tips (future cone). diff --git a/pkg/dag/concurrent_parents_traverser.go b/pkg/dag/concurrent_parents_traverser.go index f5cbd2c94..365a2a7b4 100644 --- a/pkg/dag/concurrent_parents_traverser.go +++ b/pkg/dag/concurrent_parents_traverser.go @@ -9,9 +9,9 @@ import ( "go.uber.org/atomic" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/utils" ) var ( diff --git a/pkg/dag/cone_root_indexes.go b/pkg/dag/cone_root_indexes.go index 1e04a1433..a16c94bf4 100644 --- a/pkg/dag/cone_root_indexes.go +++ b/pkg/dag/cone_root_indexes.go @@ -7,10 +7,10 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" ) // updateOutdatedConeRootIndexes updates the cone root indexes of the given messages. diff --git a/pkg/dag/cone_root_indexes_test.go b/pkg/dag/cone_root_indexes_test.go index 2ccbed14e..69514706e 100644 --- a/pkg/dag/cone_root_indexes_test.go +++ b/pkg/dag/cone_root_indexes_test.go @@ -6,11 +6,11 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/testsuite" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/testsuite" + "github.com/iotaledger/hornet/pkg/whiteflag" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/dag/helper.go b/pkg/dag/helper.go index 3e1fd94d6..eee85d27c 100644 --- a/pkg/dag/helper.go +++ b/pkg/dag/helper.go @@ -3,8 +3,8 @@ package dag import ( "context" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/storage" ) // Predicate defines whether a traversal should continue or not. diff --git a/pkg/dag/memcached_traverser.go b/pkg/dag/memcached_traverser.go index 0f2f10c79..6cb873918 100644 --- a/pkg/dag/memcached_traverser.go +++ b/pkg/dag/memcached_traverser.go @@ -1,9 +1,9 @@ package dag import ( - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" ) type MemcachedTraverserStorage struct { diff --git a/pkg/dag/parents_traverser.go b/pkg/dag/parents_traverser.go index c35669a77..009107cfd 100644 --- a/pkg/dag/parents_traverser.go +++ b/pkg/dag/parents_traverser.go @@ -6,9 +6,9 @@ import ( "fmt" "sync" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/utils" ) type ParentsTraverserInterface interface { diff --git a/pkg/dag/storage_interfaces.go b/pkg/dag/storage_interfaces.go index b5e18a594..ce434ae34 100644 --- a/pkg/dag/storage_interfaces.go +++ b/pkg/dag/storage_interfaces.go @@ -1,9 +1,9 @@ package dag import ( - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" ) // ParentsTraverserStorage provides the interface to the used storage in the ParentsTraverser. diff --git a/pkg/database/database.go b/pkg/database/database.go index 7f43c6ad3..d429938b6 100644 --- a/pkg/database/database.go +++ b/pkg/database/database.go @@ -6,10 +6,10 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/utils" ) type Engine string diff --git a/pkg/database/engine.go b/pkg/database/engine.go index d3bc17bec..eda7dfb25 100644 --- a/pkg/database/engine.go +++ b/pkg/database/engine.go @@ -8,11 +8,11 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/kvstore/mapdb" "github.com/iotaledger/hive.go/kvstore/pebble" "github.com/iotaledger/hive.go/kvstore/rocksdb" + "github.com/iotaledger/hornet/pkg/utils" ) type databaseInfo struct { diff --git a/pkg/database/pebble.go b/pkg/database/pebble.go index 84437361d..5b860e4fe 100644 --- a/pkg/database/pebble.go +++ b/pkg/database/pebble.go @@ -62,7 +62,7 @@ func NewPebbleDB(directory string, reportCompactionRunning func(running bool), e // of dirty filesystem buffers. This option only controls SSTable syncs; WAL // syncs are controlled by WALBytesPerSync. // - // The default value is 512 KB. + // The default value is 512KB. opts.BytesPerSync = 512 << 10 // 512 KB // Cache is used to cache uncompressed blocks from sstables. @@ -108,14 +108,6 @@ func NewPebbleDB(directory string, reportCompactionRunning func(running bool), e // The default value is 1 GB. opts.Experimental.CompactionDebtConcurrency = 10 << 30 // 10 GB - // DeleteRangeFlushDelay configures how long the database should wait - // before forcing a flush of a memtable that contains a range - // deletion. Disk space cannot be reclaimed until the range deletion - // is flushed. No automatic flush occurs if zero. - // - // The default value is 0. - opts.Experimental.DeleteRangeFlushDelay = 10 * time.Second - // MinDeletionRate is the minimum number of bytes per second that would // be deleted. Deletion pacing is used to slow down deletions when // compactions finish up or readers close, and newly-obsolete files need @@ -162,6 +154,14 @@ func NewPebbleDB(directory string, reportCompactionRunning func(running bool), e // The default value is 1. opts.Experimental.ReadSamplingMultiplier = 0 + // DeleteRangeFlushDelay configures how long the database should wait + // before forcing a flush of a memtable that contains a range + // deletion. Disk space cannot be reclaimed until the range deletion + // is flushed. No automatic flush occurs if zero. + // + // The default value is 0. + opts.FlushDelayDeleteRange = 10 * time.Second + // FlushSplitBytes denotes the target number of bytes per sublevel in // each flush split interval (i.e. range between two flush split keys) // in L0 sstables. When set to zero, only a single sstable is generated @@ -236,7 +236,7 @@ func NewPebbleDB(directory string, reportCompactionRunning func(running bool), e // when L0 read-amplification passes the L0CompactionConcurrency threshold. // // The default value is 1. - opts.MaxConcurrentCompactions = 1 + opts.MaxConcurrentCompactions = func() int { return 1 } return pebble.CreateDB(directory, opts) } diff --git a/pkg/database/utils.go b/pkg/database/utils.go index d1a6c4b31..64ac03264 100644 --- a/pkg/database/utils.go +++ b/pkg/database/utils.go @@ -3,14 +3,14 @@ package database import ( "fmt" - "github.com/gohornet/hornet/pkg/utils" - hiveutils "github.com/iotaledger/hive.go/kvstore/utils" + "github.com/iotaledger/hive.go/ioutils" + "github.com/iotaledger/hornet/pkg/utils" ) // DatabaseExists checks if the database folder exists and is not empty. func DatabaseExists(dbPath string) (bool, error) { - dirExists, err := hiveutils.PathExists(dbPath) + dirExists, err := ioutils.PathExists(dbPath) if err != nil { return false, fmt.Errorf("unable to check database path (%s): %w", dbPath, err) } diff --git a/pkg/jwt/jwt.go b/pkg/jwt/jwt.go index ec9f72a68..485631a84 100644 --- a/pkg/jwt/jwt.go +++ b/pkg/jwt/jwt.go @@ -11,7 +11,7 @@ import ( "github.com/golang-jwt/jwt" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" - "github.com/libp2p/go-libp2p-core/crypto" + "github.com/libp2p/go-libp2p/core/crypto" ) // Errors @@ -84,6 +84,7 @@ func (j *JWTAuth) Middleware(skipper middleware.Skipper, allow func(c echo.Conte } // use the default JWT middleware to verify and extract the JWT + //nolint:staticcheck // TODO: replace with https://github.com/labstack/echo-jwt instead handler := middleware.JWTWithConfig(config)(func(c echo.Context) error { return nil }) diff --git a/pkg/keymanager/keymanager.go b/pkg/keymanager/keymanager.go index 53fef9eea..435e9b016 100644 --- a/pkg/keymanager/keymanager.go +++ b/pkg/keymanager/keymanager.go @@ -3,7 +3,7 @@ package keymanager import ( "sort" - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) diff --git a/pkg/keymanager/keymanager_test.go b/pkg/keymanager/keymanager_test.go index 2173f84f6..bd1eecab4 100644 --- a/pkg/keymanager/keymanager_test.go +++ b/pkg/keymanager/keymanager_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/keymanager" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) diff --git a/pkg/model/coordinator/coordinator.go b/pkg/model/coordinator/coordinator.go index 01080de11..3e76691cd 100644 --- a/pkg/model/coordinator/coordinator.go +++ b/pkg/model/coordinator/coordinator.go @@ -10,21 +10,21 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/utils" - - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/migrator" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/utils" + "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/whiteflag" iotago "github.com/iotaledger/iota.go/v2" // import implementation diff --git a/pkg/model/coordinator/debug_node_api.go b/pkg/model/coordinator/debug_node_api.go index 155c736e7..a0663ea0c 100644 --- a/pkg/model/coordinator/debug_node_api.go +++ b/pkg/model/coordinator/debug_node_api.go @@ -8,8 +8,8 @@ import ( iotago "github.com/iotaledger/iota.go/v2" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" ) const ( diff --git a/pkg/model/coordinator/events.go b/pkg/model/coordinator/events.go index fa78fe85c..eb599c851 100644 --- a/pkg/model/coordinator/events.go +++ b/pkg/model/coordinator/events.go @@ -1,8 +1,8 @@ package coordinator import ( - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" ) // CheckpointCaller is used to signal issued checkpoints. diff --git a/pkg/model/coordinator/milestones.go b/pkg/model/coordinator/milestones.go index dcc5ca29d..3d83e354b 100644 --- a/pkg/model/coordinator/milestones.go +++ b/pkg/model/coordinator/milestones.go @@ -4,10 +4,10 @@ import ( "context" "time" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/coordinator/quorum.go b/pkg/model/coordinator/quorum.go index b53cc2024..71a418605 100644 --- a/pkg/model/coordinator/quorum.go +++ b/pkg/model/coordinator/quorum.go @@ -10,10 +10,10 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/coordinator/signing_provider.go b/pkg/model/coordinator/signing_provider.go index d4c429b1d..87b1b097e 100644 --- a/pkg/model/coordinator/signing_provider.go +++ b/pkg/model/coordinator/signing_provider.go @@ -1,8 +1,8 @@ package coordinator import ( - "github.com/gohornet/hornet/pkg/keymanager" - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) diff --git a/pkg/model/coordinator/state.go b/pkg/model/coordinator/state.go index 22b01730f..0884a5e9b 100644 --- a/pkg/model/coordinator/state.go +++ b/pkg/model/coordinator/state.go @@ -5,8 +5,8 @@ import ( "encoding/json" "time" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" ) // State stores the latest state of the coordinator. diff --git a/pkg/model/faucet/faucet.go b/pkg/model/faucet/faucet.go index 24a0e4307..e09b19c4e 100644 --- a/pkg/model/faucet/faucet.go +++ b/pkg/model/faucet/faucet.go @@ -10,22 +10,22 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/utils" - "github.com/gohornet/hornet/pkg/whiteflag" "github.com/iotaledger/hive.go/daemon" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/serializer" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/faucet/faucet_test.go b/pkg/model/faucet/faucet_test.go index 150752d73..ef53caaf7 100644 --- a/pkg/model/faucet/faucet_test.go +++ b/pkg/model/faucet/faucet_test.go @@ -7,9 +7,9 @@ import ( iotago "github.com/iotaledger/iota.go/v2" - "github.com/gohornet/hornet/pkg/model/faucet/test" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/faucet/test" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" ) func TestSingleRequest(t *testing.T) { diff --git a/pkg/model/faucet/test/testenv.go b/pkg/model/faucet/test/testenv.go index c91669067..cb8233545 100644 --- a/pkg/model/faucet/test/testenv.go +++ b/pkg/model/faucet/test/testenv.go @@ -10,19 +10,19 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/faucet" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/testsuite" - "github.com/gohornet/hornet/pkg/testsuite/utils" - "github.com/gohornet/hornet/pkg/whiteflag" "github.com/iotaledger/hive.go/daemon" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/faucet" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/testsuite" + "github.com/iotaledger/hornet/pkg/testsuite/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/pow" ) @@ -320,7 +320,7 @@ func (env *FaucetTestEnv) processFaucetRequests(preFlushFunc func() error) (horn tips = append(tips, messageID) wg.Done() }) - env.Faucet.Events.IssuedMessage.Attach(onFaucetIssuedMessage) + env.Faucet.Events.IssuedMessage.Hook(onFaucetIssuedMessage) defer env.Faucet.Events.IssuedMessage.Detach(onFaucetIssuedMessage) if preFlushFunc != nil { diff --git a/pkg/model/migrator/receipt.go b/pkg/model/migrator/receipt.go index 94ac799b3..770b8bb09 100644 --- a/pkg/model/migrator/receipt.go +++ b/pkg/model/migrator/receipt.go @@ -3,16 +3,15 @@ package migrator import ( "bytes" "fmt" - "io/ioutil" "os" "path" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" "github.com/iotaledger/iota.go/encoding/t5b1" iotago "github.com/iotaledger/iota.go/v2" ) @@ -79,7 +78,7 @@ func (rs *ReceiptService) Backup(r *utxo.ReceiptTuple) error { if err != nil { return err } - if err := ioutil.WriteFile(receiptFileName, receiptJSON, os.ModePerm); err != nil { + if err := os.WriteFile(receiptFileName, receiptJSON, os.ModePerm); err != nil { return common.CriticalError(fmt.Errorf("unable to persist receipt onto disk: %w", err)) } return nil diff --git a/pkg/model/migrator/service.go b/pkg/model/migrator/service.go index 3a81ca398..a9e47b02d 100644 --- a/pkg/model/migrator/service.go +++ b/pkg/model/migrator/service.go @@ -7,12 +7,12 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/serializer" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/utils" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/migrator/service_test.go b/pkg/model/migrator/service_test.go index 6ff4d3add..39e807698 100644 --- a/pkg/model/migrator/service_test.go +++ b/pkg/model/migrator/service_test.go @@ -2,7 +2,6 @@ package migrator_test import ( "context" - "io/ioutil" "log" "os" "path/filepath" @@ -11,14 +10,14 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/migrator" iotago "github.com/iotaledger/iota.go/v2" ) var stateFileName string func init() { - dir, err := ioutil.TempDir("", "migrator_test") + dir, err := os.MkdirTemp("", "migrator_test") if err != nil { log.Fatalf("failed to create temp dir: %s", err) } diff --git a/pkg/model/migrator/validator.go b/pkg/model/migrator/validator.go index e444e7795..14adf8473 100644 --- a/pkg/model/migrator/validator.go +++ b/pkg/model/migrator/validator.go @@ -9,8 +9,8 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/whiteflag" "github.com/iotaledger/iota.go/address" "github.com/iotaledger/iota.go/api" "github.com/iotaledger/iota.go/bundle" diff --git a/pkg/model/migrator/validator_test.go b/pkg/model/migrator/validator_test.go index c48b6a6c4..f991ec21e 100644 --- a/pkg/model/migrator/validator_test.go +++ b/pkg/model/migrator/validator_test.go @@ -6,7 +6,7 @@ import ( "github.com/pkg/errors" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/migrator" "github.com/iotaledger/iota.go/address" "github.com/iotaledger/iota.go/api" "github.com/iotaledger/iota.go/encoding/t5b1" diff --git a/pkg/model/milestonemanager/milestone_manager.go b/pkg/model/milestonemanager/milestone_manager.go index 9d3b4fcba..212a90678 100644 --- a/pkg/model/milestonemanager/milestone_manager.go +++ b/pkg/model/milestonemanager/milestone_manager.go @@ -3,11 +3,11 @@ package milestonemanager import ( "time" - "github.com/gohornet/hornet/pkg/keymanager" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/milestonemanager/milestones_manager_test.go b/pkg/model/milestonemanager/milestones_manager_test.go index 4fac10ffb..be69ddf6d 100644 --- a/pkg/model/milestonemanager/milestones_manager_test.go +++ b/pkg/model/milestonemanager/milestones_manager_test.go @@ -7,13 +7,13 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/keymanager" - "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/model/milestonemanager" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/testsuite" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/model/milestonemanager" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/testsuite" + "github.com/iotaledger/hornet/pkg/utils" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/mselection/heaviest.go b/pkg/model/mselection/heaviest.go index 0a2c820b0..8bd539a85 100644 --- a/pkg/model/mselection/heaviest.go +++ b/pkg/model/mselection/heaviest.go @@ -9,9 +9,9 @@ import ( "github.com/bits-and-blooms/bitset" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/utils" ) var ( diff --git a/pkg/model/mselection/heaviest_test.go b/pkg/model/mselection/heaviest_test.go index abe990369..8b18c2010 100644 --- a/pkg/model/mselection/heaviest_test.go +++ b/pkg/model/mselection/heaviest_test.go @@ -9,12 +9,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/testsuite" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/testsuite" + "github.com/iotaledger/hornet/pkg/whiteflag" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/participation/answer_test.go b/pkg/model/participation/answer_test.go index c7a851150..c02b56fc6 100644 --- a/pkg/model/participation/answer_test.go +++ b/pkg/model/participation/answer_test.go @@ -7,9 +7,9 @@ import ( "github.com/pkg/errors" "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/model/participation" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/participation" ) func RandValidAnswer() (*participation.Answer, []byte) { diff --git a/pkg/model/participation/ballot_test.go b/pkg/model/participation/ballot_test.go index 4d2bf2003..7e8acd740 100644 --- a/pkg/model/participation/ballot_test.go +++ b/pkg/model/participation/ballot_test.go @@ -6,9 +6,9 @@ import ( "github.com/pkg/errors" "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/model/participation" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/participation" ) func RandBallot(questionCount int) (*participation.Ballot, []byte) { diff --git a/pkg/model/participation/event.go b/pkg/model/participation/event.go index d8231936d..3a72723a2 100644 --- a/pkg/model/participation/event.go +++ b/pkg/model/participation/event.go @@ -10,8 +10,8 @@ import ( // import implementation "golang.org/x/crypto/blake2b" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/participation/event_builder.go b/pkg/model/participation/event_builder.go index 2a6d41758..afcaeba48 100644 --- a/pkg/model/participation/event_builder.go +++ b/pkg/model/participation/event_builder.go @@ -3,8 +3,8 @@ package participation import ( "fmt" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/milestone" ) // NewEventBuilder creates a new EventBuilder. diff --git a/pkg/model/participation/event_test.go b/pkg/model/participation/event_test.go index c076cc0fc..f26ce46b8 100644 --- a/pkg/model/participation/event_test.go +++ b/pkg/model/participation/event_test.go @@ -8,11 +8,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/participation" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" "github.com/iotaledger/hive.go/testutil" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/participation" ) const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" diff --git a/pkg/model/participation/participation_manager.go b/pkg/model/participation/participation_manager.go index d01fd5146..0dc4662a1 100644 --- a/pkg/model/participation/participation_manager.go +++ b/pkg/model/participation/participation_manager.go @@ -6,13 +6,13 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/serializer" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" ) @@ -368,12 +368,12 @@ func (pm *ParticipationManager) ApplyNewLedgerUpdate(index milestone.Index, crea // applyNewUTXOForEvents checks if the new UTXO is part of a participation transaction. // The following rules must be satisfied: -// - Must be a value transaction -// - Inputs must all come from the same address. Multiple inputs are allowed. -// - Has a singular output going to the same address as all input addresses. -// - Output Type 0 (SigLockedSingleOutput) and Type 1 (SigLockedDustAllowanceOutput) are both valid for this. -// - The Indexation must match the configured Indexation. -// - The participation data must be parseable. +// - Must be a value transaction +// - Inputs must all come from the same address. Multiple inputs are allowed. +// - Has a singular output going to the same address as all input addresses. +// - Output Type 0 (SigLockedSingleOutput) and Type 1 (SigLockedDustAllowanceOutput) are both valid for this. +// - The Indexation must match the configured Indexation. +// - The participation data must be parseable. func (pm *ParticipationManager) applyNewUTXOForEvents(index milestone.Index, newOutput *utxo.Output, events map[EventID]*Event) error { messageID := newOutput.MessageID() diff --git a/pkg/model/participation/participation_manager_test.go b/pkg/model/participation/participation_manager_test.go index 043fa8f40..1848ab309 100644 --- a/pkg/model/participation/participation_manager_test.go +++ b/pkg/model/participation/participation_manager_test.go @@ -5,13 +5,13 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/participation" - "github.com/gohornet/hornet/pkg/model/participation/test" - "github.com/gohornet/hornet/pkg/model/storage" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/participation" + "github.com/iotaledger/hornet/pkg/model/participation/test" + "github.com/iotaledger/hornet/pkg/model/storage" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/participation/participation_store.go b/pkg/model/participation/participation_store.go index a82e82216..5553c5c06 100644 --- a/pkg/model/participation/participation_store.go +++ b/pkg/model/participation/participation_store.go @@ -3,13 +3,13 @@ package participation import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/participation/participation_test.go b/pkg/model/participation/participation_test.go index 7228adab5..a22c5203e 100644 --- a/pkg/model/participation/participation_test.go +++ b/pkg/model/participation/participation_test.go @@ -6,9 +6,9 @@ import ( "github.com/pkg/errors" "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/model/participation" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/participation" "github.com/iotaledger/iota.go/v2/tpkg" ) diff --git a/pkg/model/participation/participations_test.go b/pkg/model/participation/participations_test.go index 304c991a7..d50c31b93 100644 --- a/pkg/model/participation/participations_test.go +++ b/pkg/model/participation/participations_test.go @@ -7,9 +7,9 @@ import ( "github.com/pkg/errors" "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/model/participation" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/participation" ) func RandParticipations(participationCount int) (*participation.Participations, []byte) { diff --git a/pkg/model/participation/question_test.go b/pkg/model/participation/question_test.go index 51ef98ef6..819778167 100644 --- a/pkg/model/participation/question_test.go +++ b/pkg/model/participation/question_test.go @@ -7,9 +7,9 @@ import ( "github.com/pkg/errors" "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/model/participation" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/participation" ) func RandValidQuestion() (*participation.Question, []byte) { diff --git a/pkg/model/participation/staking_rewards_test.go b/pkg/model/participation/staking_rewards_test.go index 7a77379f0..20de56785 100644 --- a/pkg/model/participation/staking_rewards_test.go +++ b/pkg/model/participation/staking_rewards_test.go @@ -5,10 +5,10 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/participation" - "github.com/gohornet/hornet/pkg/model/participation/test" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/participation" + "github.com/iotaledger/hornet/pkg/model/participation/test" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/participation/staking_test.go b/pkg/model/participation/staking_test.go index 23301427b..3356e7fc9 100644 --- a/pkg/model/participation/staking_test.go +++ b/pkg/model/participation/staking_test.go @@ -8,9 +8,9 @@ import ( "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/model/participation" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/participation" ) func RandValidStaking() (*participation.Staking, []byte) { diff --git a/pkg/model/participation/status.go b/pkg/model/participation/status.go index 47d90e773..83e20241a 100644 --- a/pkg/model/participation/status.go +++ b/pkg/model/participation/status.go @@ -5,7 +5,7 @@ import ( "encoding/binary" "encoding/hex" - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestone" ) // AnswerStatus holds the current and accumulated vote for an answer. diff --git a/pkg/model/participation/test/builder.go b/pkg/model/participation/test/builder.go index c3b5c44f9..528c6eb96 100644 --- a/pkg/model/participation/test/builder.go +++ b/pkg/model/participation/test/builder.go @@ -3,13 +3,13 @@ package test import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/participation" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/participation" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/testsuite" - "github.com/gohornet/hornet/pkg/testsuite/utils" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/testsuite" + "github.com/iotaledger/hornet/pkg/testsuite/utils" ) type ParticipationHelper struct { diff --git a/pkg/model/participation/test/testenv.go b/pkg/model/participation/test/testenv.go index b347243b4..dd7d54449 100644 --- a/pkg/model/participation/test/testenv.go +++ b/pkg/model/participation/test/testenv.go @@ -8,15 +8,15 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/participation" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/testsuite" - "github.com/gohornet/hornet/pkg/testsuite/utils" - "github.com/gohornet/hornet/pkg/whiteflag" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/participation" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/testsuite" + "github.com/iotaledger/hornet/pkg/testsuite/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/participation/tracked_participation.go b/pkg/model/participation/tracked_participation.go index 42eeedd05..c7642c1cb 100644 --- a/pkg/model/participation/tracked_participation.go +++ b/pkg/model/participation/tracked_participation.go @@ -1,10 +1,10 @@ package participation import ( - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/marshalutil" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/participation/tracked_participation_test.go b/pkg/model/participation/tracked_participation_test.go index cf3aedfb8..e1246cebb 100644 --- a/pkg/model/participation/tracked_participation_test.go +++ b/pkg/model/participation/tracked_participation_test.go @@ -7,12 +7,12 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/participation" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" "github.com/iotaledger/hive.go/testutil" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/participation" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/storage/child.go b/pkg/model/storage/child.go index afa71b585..92167a863 100644 --- a/pkg/model/storage/child.go +++ b/pkg/model/storage/child.go @@ -1,8 +1,8 @@ package storage import ( - "github.com/gohornet/hornet/pkg/model/hornet" "github.com/iotaledger/hive.go/objectstorage" + "github.com/iotaledger/hornet/pkg/model/hornet" ) type Child struct { diff --git a/pkg/model/storage/children_storage.go b/pkg/model/storage/children_storage.go index 9402be41d..682157cc3 100644 --- a/pkg/model/storage/children_storage.go +++ b/pkg/model/storage/children_storage.go @@ -3,11 +3,11 @@ package storage import ( "time" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/profile" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/objectstorage" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/profile" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/storage/health.go b/pkg/model/storage/health.go index 37ac1e831..79037e0d7 100644 --- a/pkg/model/storage/health.go +++ b/pkg/model/storage/health.go @@ -3,8 +3,8 @@ package storage import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/common" ) type StoreHealthTracker struct { diff --git a/pkg/model/storage/indexation.go b/pkg/model/storage/indexation.go index 80b66da69..e99d54e8c 100644 --- a/pkg/model/storage/indexation.go +++ b/pkg/model/storage/indexation.go @@ -1,8 +1,8 @@ package storage import ( - "github.com/gohornet/hornet/pkg/model/hornet" "github.com/iotaledger/hive.go/objectstorage" + "github.com/iotaledger/hornet/pkg/model/hornet" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/storage/indexation_storage.go b/pkg/model/storage/indexation_storage.go index 8dffe5850..6693bdd88 100644 --- a/pkg/model/storage/indexation_storage.go +++ b/pkg/model/storage/indexation_storage.go @@ -3,11 +3,11 @@ package storage import ( "time" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/profile" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/objectstorage" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/profile" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/storage/message.go b/pkg/model/storage/message.go index f34420513..356b31aff 100644 --- a/pkg/model/storage/message.go +++ b/pkg/model/storage/message.go @@ -4,9 +4,9 @@ import ( "fmt" "sync" - "github.com/gohornet/hornet/pkg/model/hornet" "github.com/iotaledger/hive.go/objectstorage" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/storage/message_metadata.go b/pkg/model/storage/message_metadata.go index 2de407c8e..501fc67c4 100644 --- a/pkg/model/storage/message_metadata.go +++ b/pkg/model/storage/message_metadata.go @@ -4,12 +4,12 @@ import ( "fmt" "time" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/bitmask" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/objectstorage" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/storage/messages_memcache.go b/pkg/model/storage/messages_memcache.go index b112d95c6..3ea3922cb 100644 --- a/pkg/model/storage/messages_memcache.go +++ b/pkg/model/storage/messages_memcache.go @@ -1,7 +1,7 @@ package storage import ( - "github.com/gohornet/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/hornet" ) type CachedMessageFunc func(messageID hornet.MessageID) (*CachedMessage, error) diff --git a/pkg/model/storage/messages_storage.go b/pkg/model/storage/messages_storage.go index 7da28abab..1e0f3ac7a 100644 --- a/pkg/model/storage/messages_storage.go +++ b/pkg/model/storage/messages_storage.go @@ -3,12 +3,12 @@ package storage import ( "time" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/profile" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/objectstorage" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/profile" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/storage/metadata_memcache.go b/pkg/model/storage/metadata_memcache.go index b74bb97e7..80ac5fb91 100644 --- a/pkg/model/storage/metadata_memcache.go +++ b/pkg/model/storage/metadata_memcache.go @@ -1,7 +1,7 @@ package storage import ( - "github.com/gohornet/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/hornet" ) type CachedMessageMetadataFunc func(messageID hornet.MessageID) (*CachedMetadata, error) diff --git a/pkg/model/storage/milestones.go b/pkg/model/storage/milestones.go index b1af7d51f..8fd265386 100644 --- a/pkg/model/storage/milestones.go +++ b/pkg/model/storage/milestones.go @@ -1,7 +1,7 @@ package storage import ( - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestone" ) func MilestoneCaller(handler interface{}, params ...interface{}) { diff --git a/pkg/model/storage/milestones_storage.go b/pkg/model/storage/milestones_storage.go index 53782fd81..b0197cd8a 100644 --- a/pkg/model/storage/milestones_storage.go +++ b/pkg/model/storage/milestones_storage.go @@ -5,17 +5,23 @@ import ( "fmt" "time" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/profile" + "github.com/pkg/errors" + "github.com/iotaledger/hive.go/byteutils" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/objectstorage" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/profile" iotago "github.com/iotaledger/iota.go/v2" ) +var ( + ErrMilestoneNotFound = errors.New("milestone not found") +) + func databaseKeyForMilestoneIndex(milestoneIndex milestone.Index) []byte { bytes := make([]byte, 4) binary.LittleEndian.PutUint32(bytes, uint32(milestoneIndex)) @@ -149,6 +155,28 @@ func (s *Storage) CachedMilestoneOrNil(milestoneIndex milestone.Index) *CachedMi return &CachedMilestone{CachedObject: cachedMilestone} } +// MilestoneTimestampByIndex returns the timestamp of a milestone. +func (s *Storage) MilestoneTimestampByIndex(milestoneIndex milestone.Index) (time.Time, error) { + cachedMilestone := s.CachedMilestoneOrNil(milestoneIndex) // milestone +1 + if cachedMilestone == nil { + return time.Time{}, ErrMilestoneNotFound + } + defer cachedMilestone.Release(true) // milestone -1 + + return cachedMilestone.Milestone().Timestamp, nil +} + +// MilestoneTimestampUnixByIndex returns the unix timestamp of a milestone. +func (s *Storage) MilestoneTimestampUnixByIndex(milestoneIndex milestone.Index) (int64, error) { + cachedMilestone := s.CachedMilestoneOrNil(milestoneIndex) // milestone +1 + if cachedMilestone == nil { + return 0, ErrMilestoneNotFound + } + defer cachedMilestone.Release(true) // milestone -1 + + return cachedMilestone.Milestone().Timestamp.Unix(), nil +} + // ContainsMilestone returns if the given milestone exists in the cache/persistence layer. func (s *Storage) ContainsMilestone(milestoneIndex milestone.Index, readOptions ...ReadOption) bool { return s.milestoneStorage.Contains(databaseKeyForMilestoneIndex(milestoneIndex), readOptions...) diff --git a/pkg/model/storage/snapshot.go b/pkg/model/storage/snapshot.go index 1c546e4d7..44cabd07d 100644 --- a/pkg/model/storage/snapshot.go +++ b/pkg/model/storage/snapshot.go @@ -6,9 +6,9 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/bitmask" "github.com/iotaledger/hive.go/marshalutil" + "github.com/iotaledger/hornet/pkg/model/milestone" ) var ( diff --git a/pkg/model/storage/snapshot_db.go b/pkg/model/storage/snapshot_db.go index 65e00b657..df7e7a16d 100644 --- a/pkg/model/storage/snapshot_db.go +++ b/pkg/model/storage/snapshot_db.go @@ -3,8 +3,8 @@ package storage import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/common" ) func (s *Storage) configureSnapshotStore(snapshotStore kvstore.KVStore) error { diff --git a/pkg/model/storage/solid_entry_points.go b/pkg/model/storage/solid_entry_points.go index 5c26b53b7..7fcbc0fc1 100644 --- a/pkg/model/storage/solid_entry_points.go +++ b/pkg/model/storage/solid_entry_points.go @@ -7,9 +7,9 @@ import ( "fmt" "sort" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" ) type SolidEntryPoint struct { diff --git a/pkg/model/storage/solid_entry_points_store.go b/pkg/model/storage/solid_entry_points_store.go index b16cf8838..dbcdf2fd2 100644 --- a/pkg/model/storage/solid_entry_points_store.go +++ b/pkg/model/storage/solid_entry_points_store.go @@ -3,8 +3,8 @@ package storage import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" ) var ( diff --git a/pkg/model/storage/storage.go b/pkg/model/storage/storage.go index 6840abd9e..402d8cfdf 100644 --- a/pkg/model/storage/storage.go +++ b/pkg/model/storage/storage.go @@ -3,12 +3,12 @@ package storage import ( "sync" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/profile" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/objectstorage" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/profile" ) type packageEvents struct { @@ -238,6 +238,8 @@ func (s *Storage) profileCachesDisabled() *profile.Caches { } // profileLeakDetectionEnabled returns a Caches profile with caching disabled and leak detection enabled. +// +//nolint:unused func (s *Storage) profileCacheEnabled() *profile.Caches { return &profile.Caches{ Addresses: &profile.CacheOpts{ @@ -307,6 +309,8 @@ func (s *Storage) profileCacheEnabled() *profile.Caches { } // profileLeakDetectionEnabled returns a Caches profile with caching disabled and leak detection enabled. +// +//nolint:unused func (s *Storage) profileLeakDetectionEnabled() *profile.Caches { return &profile.Caches{ Addresses: &profile.CacheOpts{ diff --git a/pkg/model/storage/unreferenced_message.go b/pkg/model/storage/unreferenced_message.go index e53931142..2749215b4 100644 --- a/pkg/model/storage/unreferenced_message.go +++ b/pkg/model/storage/unreferenced_message.go @@ -3,9 +3,9 @@ package storage import ( "encoding/binary" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/objectstorage" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" ) type UnreferencedMessage struct { diff --git a/pkg/model/storage/unreferenced_message_storage.go b/pkg/model/storage/unreferenced_message_storage.go index bd19dd8ea..1d7201ff2 100644 --- a/pkg/model/storage/unreferenced_message_storage.go +++ b/pkg/model/storage/unreferenced_message_storage.go @@ -4,12 +4,12 @@ import ( "encoding/binary" "time" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/profile" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/objectstorage" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/profile" ) // CachedUnreferencedMessage represents a cached unreferenced message. diff --git a/pkg/model/syncmanager/sync_manager.go b/pkg/model/syncmanager/sync_manager.go index 7bdb55995..d554e6b86 100644 --- a/pkg/model/syncmanager/sync_manager.go +++ b/pkg/model/syncmanager/sync_manager.go @@ -5,15 +5,23 @@ import ( "fmt" "time" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" ) const ( isNodeAlmostSyncedThreshold = 2 ) +type SyncState struct { + NodeSynced bool + NodeAlmostSynced bool + NodeSyncedWithinBelowMaxDepth bool + LatestMilestoneIndex milestone.Index + ConfirmedMilestoneIndex milestone.Index +} + type SyncManager struct { utxoManager *utxo.Manager // belowMaxDepth is the maximum allowed delta @@ -68,6 +76,21 @@ func (s *SyncManager) ResetMilestoneIndexes() { s.latestMilestoneIndex = 0 } +func (s *SyncManager) SyncState() *SyncState { + s.confirmedMilestoneLock.RLock() + s.latestMilestoneLock.RLock() + defer s.confirmedMilestoneLock.RUnlock() + defer s.latestMilestoneLock.RUnlock() + + return &SyncState{ + NodeSynced: s.isNodeSynced, + NodeAlmostSynced: s.isNodeAlmostSynced, + NodeSyncedWithinBelowMaxDepth: s.isNodeSyncedWithinBelowMaxDepth, + LatestMilestoneIndex: s.latestMilestoneIndex, + ConfirmedMilestoneIndex: s.confirmedMilestoneIndex, + } +} + // IsNodeSynced returns whether the node is synced. func (s *SyncManager) IsNodeSynced() bool { return s.isNodeSynced @@ -140,6 +163,7 @@ func (s *SyncManager) updateNodeSynced(confirmedIndex, latestIndex milestone.Ind s.isNodeSynced = false s.isNodeAlmostSynced = false s.isNodeSyncedWithinBelowMaxDepth = false + return } @@ -164,6 +188,7 @@ func (s *SyncManager) updateNodeSynced(confirmedIndex, latestIndex milestone.Ind if latestIndex < isNodeAlmostSyncedThreshold { s.isNodeAlmostSynced = true s.isNodeSyncedWithinBelowMaxDepth = true + return } s.isNodeAlmostSynced = confirmedIndex >= (latestIndex - isNodeAlmostSyncedThreshold) @@ -171,6 +196,7 @@ func (s *SyncManager) updateNodeSynced(confirmedIndex, latestIndex milestone.Ind // catch overflow if latestIndex < s.belowMaxDepth { s.isNodeSyncedWithinBelowMaxDepth = true + return } s.isNodeSyncedWithinBelowMaxDepth = confirmedIndex >= (latestIndex - s.belowMaxDepth) @@ -191,6 +217,7 @@ func (s *SyncManager) SetConfirmedMilestoneIndex(index milestone.Index, updateSy } s.updateNodeSynced(index, s.LatestMilestoneIndex()) + return nil } @@ -221,6 +248,7 @@ func (s *SyncManager) SetLatestMilestoneIndex(index milestone.Index, updateSynce if s.latestMilestoneIndex >= index { // current LMI is bigger than new LMI => abort s.latestMilestoneLock.Unlock() + return false } diff --git a/pkg/model/utxo/balances.go b/pkg/model/utxo/balances.go index 1d9ce1e17..048bc34fb 100644 --- a/pkg/model/utxo/balances.go +++ b/pkg/model/utxo/balances.go @@ -6,11 +6,11 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/byteutils" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/marshalutils_helper.go b/pkg/model/utxo/marshalutils_helper.go index 5a0a2aefe..1ef9cb063 100644 --- a/pkg/model/utxo/marshalutils_helper.go +++ b/pkg/model/utxo/marshalutils_helper.go @@ -1,9 +1,9 @@ package utxo import ( - "github.com/gohornet/hornet/pkg/model/hornet" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/milestone_diff.go b/pkg/model/utxo/milestone_diff.go index c886a6a4a..c6b634ccf 100644 --- a/pkg/model/utxo/milestone_diff.go +++ b/pkg/model/utxo/milestone_diff.go @@ -6,9 +6,9 @@ import ( "fmt" "sort" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/marshalutil" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/milestone_diff_test.go b/pkg/model/utxo/milestone_diff_test.go index b2e2724d6..5af90c259 100644 --- a/pkg/model/utxo/milestone_diff_test.go +++ b/pkg/model/utxo/milestone_diff_test.go @@ -8,9 +8,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/byteutils" "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/output.go b/pkg/model/utxo/output.go index a09c1df3b..588ebd678 100644 --- a/pkg/model/utxo/output.go +++ b/pkg/model/utxo/output.go @@ -7,11 +7,11 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/hornet" "github.com/iotaledger/hive.go/byteutils" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/output_test.go b/pkg/model/utxo/output_test.go index 4b0e6627d..5f066de47 100644 --- a/pkg/model/utxo/output_test.go +++ b/pkg/model/utxo/output_test.go @@ -7,9 +7,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" "github.com/iotaledger/hive.go/byteutils" "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/hornet/pkg/model/hornet" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/receipt.go b/pkg/model/utxo/receipt.go index 875ba5398..8f1fa9396 100644 --- a/pkg/model/utxo/receipt.go +++ b/pkg/model/utxo/receipt.go @@ -3,11 +3,11 @@ package utxo import ( "encoding/binary" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/spent.go b/pkg/model/utxo/spent.go index 1f402dca8..c52f9b991 100644 --- a/pkg/model/utxo/spent.go +++ b/pkg/model/utxo/spent.go @@ -3,12 +3,12 @@ package utxo import ( "bytes" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/byteutils" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/marshalutil" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/spent_test.go b/pkg/model/utxo/spent_test.go index c1bc95523..0c5f1a019 100644 --- a/pkg/model/utxo/spent_test.go +++ b/pkg/model/utxo/spent_test.go @@ -6,10 +6,10 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/byteutils" "github.com/iotaledger/hive.go/kvstore/mapdb" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/utxo.go b/pkg/model/utxo/utxo.go index f80df9b7b..0a17f482a 100644 --- a/pkg/model/utxo/utxo.go +++ b/pkg/model/utxo/utxo.go @@ -9,8 +9,8 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/model/utxo/utxo_test.go b/pkg/model/utxo/utxo_test.go index 33b0c98aa..70b3e4aaf 100644 --- a/pkg/model/utxo/utxo_test.go +++ b/pkg/model/utxo/utxo_test.go @@ -5,8 +5,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/p2p/autopeering/autopeering.go b/pkg/p2p/autopeering/autopeering.go index f1dc9a093..eaaf0fe81 100644 --- a/pkg/p2p/autopeering/autopeering.go +++ b/pkg/p2p/autopeering/autopeering.go @@ -10,13 +10,11 @@ import ( "github.com/pkg/errors" - "github.com/libp2p/go-libp2p-core/crypto" - peer2 "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/crypto" + peer2 "github.com/libp2p/go-libp2p/core/peer" "github.com/mr-tron/base58/base58" "github.com/multiformats/go-multiaddr" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/autopeering/discover" "github.com/iotaledger/hive.go/autopeering/peer" "github.com/iotaledger/hive.go/autopeering/peer/service" @@ -27,6 +25,8 @@ import ( "github.com/iotaledger/hive.go/iputils" "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/netutil" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/utils" ) const ( @@ -386,7 +386,13 @@ func (a *AutopeeringManager) Init(localPeerContainer *LocalPeerContainer, initSe return true } - a.selectionProtocol = selection.New(localPeerContainer.Local(), a.discoveryProtocol, selection.Logger(a.LoggerNamed("sel")), selection.NeighborValidator(selection.ValidatorFunc(isValidPeer))) + a.selectionProtocol = selection.New( + localPeerContainer.Local(), + a.discoveryProtocol, + selection.Logger(a.LoggerNamed("sel")), + selection.NeighborValidator(selection.ValidatorFunc(isValidPeer)), + selection.NeighborBlockDuration(0), // disable neighbor block duration (we manually block neighbors) + ) } func (a *AutopeeringManager) Run(ctx context.Context) { diff --git a/pkg/p2p/autopeering/autopeering_test.go b/pkg/p2p/autopeering/autopeering_test.go index a7521eba8..243c57c4a 100644 --- a/pkg/p2p/autopeering/autopeering_test.go +++ b/pkg/p2p/autopeering/autopeering_test.go @@ -7,7 +7,7 @@ import ( "github.com/multiformats/go-multiaddr" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/p2p/autopeering" + "github.com/iotaledger/hornet/pkg/p2p/autopeering" ) func TestMultiAddrAutopeeringProtocol(t *testing.T) { diff --git a/pkg/p2p/autopeering/local.go b/pkg/p2p/autopeering/local.go index fb3c136ac..0638ada6f 100644 --- a/pkg/p2p/autopeering/local.go +++ b/pkg/p2p/autopeering/local.go @@ -9,7 +9,7 @@ import ( "github.com/multiformats/go-multiaddr" - "github.com/gohornet/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/database" "github.com/iotaledger/hive.go/autopeering/peer" "github.com/iotaledger/hive.go/autopeering/peer/service" diff --git a/pkg/p2p/config_manager.go b/pkg/p2p/config_manager.go index a497a124f..9cfda88bc 100644 --- a/pkg/p2p/config_manager.go +++ b/pkg/p2p/config_manager.go @@ -3,7 +3,7 @@ package p2p import ( "sync" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/peer" "github.com/multiformats/go-multiaddr" "github.com/pkg/errors" ) diff --git a/pkg/p2p/identity.go b/pkg/p2p/identity.go index df0a5aefa..4370828e5 100644 --- a/pkg/p2p/identity.go +++ b/pkg/p2p/identity.go @@ -8,23 +8,22 @@ import ( "encoding/hex" "encoding/pem" "fmt" - "io/ioutil" "os" "path/filepath" "runtime" "github.com/ipfs/go-datastore/query" badger "github.com/ipfs/go-ds-badger" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/peerstore" - "github.com/libp2p/go-libp2p-peerstore/pstoreds" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/peerstore" + "github.com/libp2p/go-libp2p/p2p/host/peerstore/pstoreds" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/utils" kvstoreds "github.com/iotaledger/go-ds-kvstore" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/utils" ) const ( @@ -91,8 +90,8 @@ func NewPeerStoreContainer(peerStorePath string, dbEngine database.Engine, creat }, nil } -// parseEd25519PrivateKeyFromString parses an Ed25519 private key from a hex encoded string. -func parseEd25519PrivateKeyFromString(identityPrivKey string) (crypto.PrivKey, error) { +// ParseEd25519PrivateKeyFromString parses an Ed25519 private key from a hex encoded string. +func ParseEd25519PrivateKeyFromString(identityPrivKey string) (crypto.PrivKey, error) { if identityPrivKey == "" { return nil, ErrNoPrivKeyFound } @@ -181,7 +180,7 @@ func WriteEd25519PrivateKeyToPEMFile(filepath string, privateKey crypto.PrivKey) // or creates a new one and stores it as a PEM file in the p2p store folder. func LoadOrCreateIdentityPrivateKey(p2pStorePath string, identityPrivKey string) (crypto.PrivKey, bool, error) { - privKeyFromConfig, err := parseEd25519PrivateKeyFromString(identityPrivKey) + privKeyFromConfig, err := ParseEd25519PrivateKeyFromString(identityPrivKey) if err != nil { if errors.Is(err, ErrPrivKeyInvalid) { return nil, false, errors.New("configuration contains an invalid private key") @@ -301,7 +300,7 @@ func MigrateDeprecatedPeerStore(p2pStorePath string, identityPrivKey string, new return false, err } - privKey, err := parseEd25519PrivateKeyFromString(identityPrivKey) + privKey, err := ParseEd25519PrivateKeyFromString(identityPrivKey) if err != nil { if errors.Is(err, ErrPrivKeyInvalid) { return false, errors.New("configuration contains an invalid private key") @@ -312,7 +311,7 @@ func MigrateDeprecatedPeerStore(p2pStorePath string, identityPrivKey string, new } // there was no private key specified, retrieve it from the peer store with the public key from the deprecated file - existingPubKeyBytes, err := ioutil.ReadFile(deprecatedPubKeyFilePath) + existingPubKeyBytes, err := os.ReadFile(deprecatedPubKeyFilePath) if err != nil { return false, fmt.Errorf("unable to read deprecated public key file for peer identity: %w", err) } diff --git a/pkg/p2p/manager.go b/pkg/p2p/manager.go index 07ede4010..0b0da9094 100644 --- a/pkg/p2p/manager.go +++ b/pkg/p2p/manager.go @@ -6,16 +6,16 @@ import ( "math/rand" "time" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/network" + "github.com/libp2p/go-libp2p/core/peer" "github.com/multiformats/go-multiaddr" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/typeutils" + "github.com/iotaledger/hornet/pkg/utils" ) const ( @@ -101,11 +101,13 @@ type ManagerEvents struct { // PeerCaller gets called with a Peer. func PeerCaller(handler interface{}, params ...interface{}) { + //nolint:forcetypeassert // we will replace that with generic events anyway handler.(func(*Peer))(params[0].(*Peer)) } // PeerIDCaller gets called with a peer.ID. func PeerIDCaller(handler interface{}, params ...interface{}) { + //nolint:forcetypeassert // we will replace that with generic events anyway handler.(func(peer.ID))(params[0].(peer.ID)) } @@ -117,26 +119,31 @@ type PeerOptError struct { // PeerOptErrorCaller gets called with a Peer and an error. func PeerOptErrorCaller(handler interface{}, params ...interface{}) { + //nolint:forcetypeassert // we will replace that with generic events anyway handler.(func(*PeerOptError))(params[0].(*PeerOptError)) } // ManagerStateCaller gets called with a ManagerState. func ManagerStateCaller(handler interface{}, params ...interface{}) { + //nolint:forcetypeassert // we will replace that with generic events anyway handler.(func(ManagerState))(params[0].(ManagerState)) } // PeerDurationCaller gets called with a Peer and a time.Duration. func PeerDurationCaller(handler interface{}, params ...interface{}) { + //nolint:forcetypeassert // we will replace that with generic events anyway handler.(func(*Peer, time.Duration))(params[0].(*Peer), params[1].(time.Duration)) } // PeerConnCaller gets called with a Peer and its associated network.Conn. func PeerConnCaller(handler interface{}, params ...interface{}) { + //nolint:forcetypeassert // we will replace that with generic events anyway handler.(func(*Peer, network.Conn))(params[0].(*Peer), params[1].(network.Conn)) } // PeerRelationCaller gets called with a Peer and its old PeerRelation. func PeerRelationCaller(handler interface{}, params ...interface{}) { + //nolint:forcetypeassert // we will replace that with generic events anyway handler.(func(p *Peer, old PeerRelation))(params[0].(*Peer), params[1].(PeerRelation)) } @@ -185,7 +192,9 @@ func (mo *ManagerOptions) apply(opts ...ManagerOption) { func (mo *ManagerOptions) reconnectDelay() time.Duration { recInter := mo.reconnectInterval jitter := mo.reconnectIntervalJitter + //nolint:gosec // we don't care about weak random numbers here delayJitter := rand.Int63n(int64(jitter)) + return recInter + time.Duration(delayJitter) } @@ -210,25 +219,28 @@ func NewManager(host host.Host, opts ...ManagerOption) *Manager { StateChange: events.NewEvent(ManagerStateCaller), Error: events.NewEvent(events.ErrorCaller), }, - host: host, - peers: map[peer.ID]*Peer{}, - allowedPeers: map[peer.ID]struct{}{}, - opts: mngOpts, - stopped: typeutils.NewAtomicBool(), - connectPeerChan: make(chan *connectpeermsg, 10), - disconnectPeerChan: make(chan *disconnectpeermsg, 10), - isConnectedReqChan: make(chan *isconnectedrequestmsg, 10), - allowPeerChan: make(chan *allowpeermsg, 10), - disallowPeerChan: make(chan *disallowpeermsg, 10), - isAllowedReqChan: make(chan *isallowedrequestmsg, 10), - connectedChan: make(chan *connectionmsg, 10), - disconnectedChan: make(chan *disconnectmsg, 10), - reconnectChan: make(chan *reconnectmsg, 100), - forEachChan: make(chan *foreachmsg, 10), - callChan: make(chan *callmsg, 10), + host: host, + peers: map[peer.ID]*Peer{}, + allowedPeers: map[peer.ID]struct{}{}, + opts: mngOpts, + stopped: typeutils.NewAtomicBool(), + connectPeerChan: make(chan *connectpeermsg, 10), + connectPeerAttemptChan: make(chan *connectpeerattemptmsg, 10), + reconnectChan: make(chan *reconnectmsg, 100), + reconnectAttemptChan: make(chan *reconnectattemptmsg, 100), + disconnectPeerChan: make(chan *disconnectpeermsg, 10), + isConnectedReqChan: make(chan *isconnectedrequestmsg, 10), + allowPeerChan: make(chan *allowpeermsg, 10), + disallowPeerChan: make(chan *disallowpeermsg, 10), + isAllowedReqChan: make(chan *isallowedrequestmsg, 10), + connectedChan: make(chan *connectionmsg, 10), + disconnectedChan: make(chan *disconnectmsg, 10), + forEachChan: make(chan *foreachmsg, 10), + callChan: make(chan *callmsg, 10), } peeringManager.WrappedLogger = utils.NewWrappedLogger(peeringManager.opts.logger) peeringManager.configureEvents() + return peeringManager } @@ -251,19 +263,21 @@ type Manager struct { // tells whether the manager was shut down. stopped *typeutils.AtomicBool // event loop channels - connectPeerChan chan *connectpeermsg - disconnectPeerChan chan *disconnectpeermsg - isConnectedReqChan chan *isconnectedrequestmsg - allowPeerChan chan *allowpeermsg - disallowPeerChan chan *disallowpeermsg - isAllowedReqChan chan *isallowedrequestmsg - connectedChan chan *connectionmsg - disconnectedChan chan *disconnectmsg - reconnectChan chan *reconnectmsg - forEachChan chan *foreachmsg - callChan chan *callmsg - - // closures + connectPeerChan chan *connectpeermsg + connectPeerAttemptChan chan *connectpeerattemptmsg + reconnectChan chan *reconnectmsg + reconnectAttemptChan chan *reconnectattemptmsg + disconnectPeerChan chan *disconnectpeermsg + isConnectedReqChan chan *isconnectedrequestmsg + allowPeerChan chan *allowpeermsg + disallowPeerChan chan *disallowpeermsg + isAllowedReqChan chan *isallowedrequestmsg + connectedChan chan *connectionmsg + disconnectedChan chan *disconnectmsg + forEachChan chan *foreachmsg + callChan chan *callmsg + + // closures. onP2PManagerConnect *events.Closure onP2PManagerConnected *events.Closure onP2PManagerDisconnect *events.Closure @@ -308,7 +322,7 @@ func (m *Manager) shutdown() { m.stopped.Set() // drain all outstanding requests of the event loop. - // we do not care about correct handling of the channels, because we are shutting down anyway. + // we don't care about correct handling of the channels, because we are shutting down anyway. drainLoop: for { select { @@ -316,6 +330,14 @@ drainLoop: // do not connect to the peer connectPeerMsg.back <- ErrManagerShutdown + case connectPeerAttemptMsg := <-m.connectPeerAttemptChan: + // do not connect to the peer + connectPeerAttemptMsg.back <- ErrManagerShutdown + + case <-m.reconnectChan: + + case <-m.reconnectAttemptChan: + case disconnectPeerMsg := <-m.disconnectPeerChan: disconnectPeerMsg.back <- ErrManagerShutdown @@ -335,8 +357,6 @@ drainLoop: case <-m.disconnectedChan: - case <-m.reconnectChan: - case forEachMsg := <-m.forEachChan: forEachMsg.back <- struct{}{} @@ -363,6 +383,7 @@ func (m *Manager) ConnectPeer(addrInfo *peer.AddrInfo, peerRelation PeerRelation } back := make(chan error) m.connectPeerChan <- &connectpeermsg{addrInfo: addrInfo, peerRelation: peerRelation, back: back, alias: al} + return <-back } @@ -379,6 +400,7 @@ func (m *Manager) DisconnectPeer(peerID peer.ID, disconnectReason ...error) erro reason = disconnectReason[0] } m.disconnectPeerChan <- &disconnectpeermsg{peerID: peerID, reason: reason, back: back} + return <-back } @@ -390,6 +412,7 @@ func (m *Manager) IsConnected(peerID peer.ID) bool { back := make(chan bool) m.isConnectedReqChan <- &isconnectedrequestmsg{peerID: peerID, back: back} + return <-back } @@ -401,6 +424,7 @@ func (m *Manager) AllowPeer(peerID peer.ID) error { back := make(chan error) m.allowPeerChan <- &allowpeermsg{peerID: peerID, back: back} + return <-back } @@ -412,6 +436,7 @@ func (m *Manager) DisallowPeer(peerID peer.ID) error { back := make(chan error) m.disallowPeerChan <- &disallowpeermsg{peerID: peerID, back: back} + return <-back } @@ -423,6 +448,7 @@ func (m *Manager) IsAllowed(peerID peer.ID) bool { back := make(chan bool) m.isAllowedReqChan <- &isallowedrequestmsg{peerID: peerID, back: back} + return <-back } @@ -451,8 +477,10 @@ func (m *Manager) ConnectedCount(relation ...PeerRelation) int { if m.host.Network().Connectedness(p.ID) == network.Connected { count++ } + return true }, relation...) + return count } @@ -464,6 +492,7 @@ func (m *Manager) PeerInfoSnapshot(id peer.ID) *PeerInfoSnapshot { info = p.InfoSnapshot() info.Connected = m.host.Network().Connectedness(p.ID) == network.Connected }) + return info } @@ -474,8 +503,10 @@ func (m *Manager) PeerInfoSnapshots() []*PeerInfoSnapshot { info := p.InfoSnapshot() info.Connected = m.host.Network().Connectedness(p.ID) == network.Connected infos = append(infos, info) + return true }) + return infos } @@ -501,6 +532,25 @@ type connectpeermsg struct { back chan error } +type connectpeerattemptmsg struct { + addrInfo *peer.AddrInfo + peerRelation PeerRelation + alias string + back chan error + connect bool + connectErr error +} + +type reconnectmsg struct { + peerID peer.ID +} + +type reconnectattemptmsg struct { + peerID peer.ID + reconnect bool + connectErr error +} + type connectionmsg struct { net network.Network conn network.Conn @@ -538,10 +588,6 @@ type isallowedrequestmsg struct { back chan bool } -type reconnectmsg struct { - peerID peer.ID -} - type foreachmsg struct { f PeerForEachFunc back chan struct{} @@ -563,18 +609,50 @@ func (m *Manager) eventLoop(ctx context.Context) { select { case <-ctx.Done(): m.shutdown() + return case connectPeerMsg := <-m.connectPeerChan: - err := m.connectPeer(connectPeerMsg.addrInfo, connectPeerMsg.peerRelation, connectPeerMsg.alias) - if err != nil { - m.Events.Error.Trigger(fmt.Errorf("error connect to %s (%v): %w", connectPeerMsg.addrInfo.ID.ShortString(), connectPeerMsg.addrInfo.Addrs, err)) + m.connectPeer(ctx, connectPeerMsg) + + case connectPeerAttemptMsg := <-m.connectPeerAttemptChan: + if connectPeerAttemptMsg.connectErr != nil { + if connectPeerAttemptMsg.connect { + // unsuccessful connect: + // get rid of the peer instance if the relation is unknown + // or initiate a reconnect timer + m.cleanupPeerIfNotKnown(connectPeerAttemptMsg.addrInfo.ID) + m.scheduleReconnectIfKnown(connectPeerAttemptMsg.addrInfo.ID) + } + + m.Events.Error.Trigger(fmt.Errorf("error connect to %s (%v): %w", connectPeerAttemptMsg.addrInfo.ID.ShortString(), connectPeerAttemptMsg.addrInfo.Addrs, connectPeerAttemptMsg.connectErr)) + + if errors.Is(connectPeerAttemptMsg.connectErr, ErrPeerInManagerAlready) { + m.updateRelation(connectPeerAttemptMsg.addrInfo.ID, connectPeerAttemptMsg.peerRelation) + m.updateAlias(connectPeerAttemptMsg.addrInfo.ID, connectPeerAttemptMsg.alias) + } } - if errors.Is(err, ErrPeerInManagerAlready) { - m.updateRelation(connectPeerMsg.addrInfo.ID, connectPeerMsg.peerRelation) - m.updateAlias(connectPeerMsg.addrInfo.ID, connectPeerMsg.alias) + connectPeerAttemptMsg.back <- connectPeerAttemptMsg.connectErr + + case reconnectMsg := <-m.reconnectChan: + m.reconnectPeer(ctx, reconnectMsg.peerID) + + case reconnectAttemptMsg := <-m.reconnectAttemptChan: + if reconnectAttemptMsg.connectErr != nil { + // unsuccessful connect: + // get rid of the peer instance if the relation is unknown + // or initiate a reconnect timer + m.cleanupPeerIfNotKnown(reconnectAttemptMsg.peerID) + m.scheduleReconnectIfKnown(reconnectAttemptMsg.peerID) + + m.Events.Error.Trigger(fmt.Errorf("error reconnect %s: %w", reconnectAttemptMsg.peerID.ShortString(), reconnectAttemptMsg.connectErr)) + + continue } - connectPeerMsg.back <- err + if !reconnectAttemptMsg.reconnect { + continue + } + m.Events.Reconnected.Trigger(m.peers[reconnectAttemptMsg.peerID]) case disconnectPeerMsg := <-m.disconnectPeerChan: p := m.peers[disconnectPeerMsg.peerID] @@ -602,17 +680,6 @@ func (m *Manager) eventLoop(ctx context.Context) { allowed := m.isAllowed(isAllowedReqMsg.peerID) isAllowedReqMsg.back <- allowed - case reconnectMsg := <-m.reconnectChan: - reconnect, err := m.reconnectPeer(reconnectMsg.peerID) - if err != nil { - m.Events.Error.Trigger(fmt.Errorf("error reconnect %s: %w", reconnectMsg.peerID.ShortString(), err)) - continue - } - if !reconnect { - continue - } - m.Events.Reconnected.Trigger(m.peers[reconnectMsg.peerID]) - case isConnectedReqMsg := <-m.isConnectedReqChan: connected := m.isConnected(isConnectedReqMsg.peerID) isConnectedReqMsg.back <- connected @@ -656,24 +723,110 @@ func (m *Manager) eventLoop(ctx context.Context) { // connects to the given peer if it isn't already connected and if its relation is PeerRelationKnown, // then the connection to the peer is further protected from trimming. -func (m *Manager) connectPeer(addrInfo *peer.AddrInfo, relation PeerRelation, alias string) error { - if _, has := m.peers[addrInfo.ID]; has { - return ErrPeerInManagerAlready +func (m *Manager) connectPeer(ctx context.Context, connectPeerMsg *connectpeermsg) { + + if _, has := m.peers[connectPeerMsg.addrInfo.ID]; has { + m.connectPeerAttemptChan <- &connectpeerattemptmsg{ + addrInfo: connectPeerMsg.addrInfo, + peerRelation: connectPeerMsg.peerRelation, + alias: connectPeerMsg.alias, + // pass the error channel of the caller to the connectPeerAttemptChan + back: connectPeerMsg.back, + connect: false, + connectErr: ErrPeerInManagerAlready, + } + + return } - if addrInfo.ID == m.host.ID() { - return ErrCantConnectToItself + if connectPeerMsg.addrInfo.ID == m.host.ID() { + m.connectPeerAttemptChan <- &connectpeerattemptmsg{ + addrInfo: connectPeerMsg.addrInfo, + peerRelation: connectPeerMsg.peerRelation, + alias: connectPeerMsg.alias, + // pass the error channel of the caller to the connectPeerAttemptChan + back: connectPeerMsg.back, + connect: false, + connectErr: ErrCantConnectToItself, + } + + return } - p := NewPeer(addrInfo.ID, relation, addrInfo.Addrs, alias) + p := NewPeer(connectPeerMsg.addrInfo.ID, connectPeerMsg.peerRelation, connectPeerMsg.addrInfo.Addrs, connectPeerMsg.alias) if p.Relation == PeerRelationKnown || p.Relation == PeerRelationAutopeered { - m.host.ConnManager().Protect(addrInfo.ID, PeerConnectivityProtectionTag) + m.host.ConnManager().Protect(connectPeerMsg.addrInfo.ID, PeerConnectivityProtectionTag) } - m.peers[addrInfo.ID] = p + m.peers[connectPeerMsg.addrInfo.ID] = p m.Events.Connect.Trigger(p) - return m.connect(*addrInfo) + // perform an actual connection attempt to the given peer. + // connection attempts should happen in a separate goroutine + go func() { + ctxConnect, cancelConnect := context.WithTimeout(ctx, connTimeout) + defer cancelConnect() + + // if the connection fails, the peer is either cleared from the Manager if its relation is PeerRelationUnknown + // or a reconnect attempt is scheduled if it is PeerRelationKnown. + // this is done in via the connectPeerAttemptChan. + m.connectPeerAttemptChan <- &connectpeerattemptmsg{ + addrInfo: connectPeerMsg.addrInfo, + peerRelation: connectPeerMsg.peerRelation, + alias: connectPeerMsg.alias, + // pass the error channel of the caller to the connectPeerAttemptChan + back: connectPeerMsg.back, + connect: true, + connectErr: m.host.Connect(ctxConnect, *connectPeerMsg.addrInfo), + } + }() +} + +// reconnect peer does a connection attempt to the given peer but only +// if its relation is PeerRelationKnown. +func (m *Manager) reconnectPeer(ctx context.Context, peerID peer.ID) { + p, has := m.peers[peerID] + if !has { + // directly return the result of the reconnect attempt + m.reconnectAttemptChan <- &reconnectattemptmsg{ + peerID: peerID, + reconnect: false, + connectErr: nil, + } + + return + } + + if p.Relation != PeerRelationKnown || p.reconnectTimer == nil { + // directly return the result of the reconnect attempt + m.reconnectAttemptChan <- &reconnectattemptmsg{ + peerID: peerID, + reconnect: false, + connectErr: nil, + } + + return + } + + m.Events.Reconnecting.Trigger(p) + + addrInfo := peer.AddrInfo{ID: peerID, Addrs: p.Addrs} + + // perform an actual connection attempt to the given peer. + // connection attempts should happen in a separate goroutine + go func() { + ctxConnect, cancelConnect := context.WithTimeout(ctx, connTimeout) + defer cancelConnect() + + // if the connection fails, the peer is either cleared from the Manager if its relation is PeerRelationUnknown + // or a reconnect attempt is scheduled if it is PeerRelationKnown. + // this is done in via the reconnectAttemptChan. + m.reconnectAttemptChan <- &reconnectattemptmsg{ + peerID: peerID, + reconnect: true, + connectErr: m.host.Connect(ctxConnect, addrInfo), + } + }() } // disconnects and removes the given peer from the Manager. @@ -686,6 +839,7 @@ func (m *Manager) disconnectPeer(peerID peer.ID) (bool, error) { m.host.ConnManager().Unprotect(peerID, PeerConnectivityProtectionTag) delete(m.peers, peerID) m.Events.Disconnect.Trigger(p) + return true, m.host.Network().ClosePeer(peerID) } @@ -718,6 +872,7 @@ func (m *Manager) disallowPeer(peerID peer.ID) { // checks whether the given peer is allowed to connect (autopeering). func (m *Manager) isAllowed(peerID peer.ID) bool { _, has := m.allowedPeers[peerID] + return has } @@ -730,15 +885,19 @@ func (m *Manager) updateRelation(peerID peer.ID, newRelation PeerRelation) { } oldRelation := p.Relation p.Relation = newRelation + switch newRelation { case PeerRelationUnknown: p.reconnectTimer.Stop() p.reconnectTimer = nil + case PeerRelationAutopeered: fallthrough + case PeerRelationKnown: m.host.ConnManager().Protect(peerID, PeerConnectivityProtectionTag) } + m.Events.RelationUpdated.Trigger(p, oldRelation) } @@ -796,40 +955,6 @@ func (m *Manager) resetReconnect(peerID peer.ID) { } } -// reconnect peer does a connection attempt to the given peer but only -// if its relation is PeerRelationKnown. -func (m *Manager) reconnectPeer(peerID peer.ID) (bool, error) { - p, has := m.peers[peerID] - if !has { - return false, nil - } - - if p.Relation != PeerRelationKnown || p.reconnectTimer == nil { - return false, nil - } - - m.Events.Reconnecting.Trigger(p) - return true, m.connect(peer.AddrInfo{ID: peerID, Addrs: p.Addrs}) -} - -// connect does an actual connection attempt to the given peer. -// if the connection fails, the peer is either cleared from the Manager if its relation is PeerRelationUnknown -// or a reconnect attempt is scheduled if it is PeerRelationKnown. -func (m *Manager) connect(addrInfo peer.AddrInfo) error { - ctx, cancel := context.WithTimeout(context.Background(), connTimeout) - defer cancel() - - err := m.host.Connect(ctx, addrInfo) - if err != nil { - // unsuccessful connect: - // get rid of the peer instance if the relation is unknown - // or initiate a reconnect timer - m.cleanupPeerIfNotKnown(addrInfo.ID) - m.scheduleReconnectIfKnown(addrInfo.ID) - } - return err -} - // adds the given connection as peer with PeerRelationUnknown to the Manager's peer set, // if the peer isn't already in the set. func (m *Manager) addPeerAsUnknownIfAbsent(conn network.Conn) { @@ -863,6 +988,7 @@ func (m *Manager) isConnected(peerID peer.ID) bool { if _, has := m.peers[peerID]; !has { return false } + return m.host.Network().Connectedness(peerID) == network.Connected } @@ -932,15 +1058,15 @@ func (m *Manager) configureEvents() { } func (m *Manager) attachEvents() { - m.Events.Connect.Attach(m.onP2PManagerConnect) - m.Events.Connected.Attach(m.onP2PManagerConnected) - m.Events.Disconnect.Attach(m.onP2PManagerDisconnect) - m.Events.Disconnected.Attach(m.onP2PManagerDisconnected) - m.Events.ScheduledReconnect.Attach(m.onP2PManagerScheduledReconnect) - m.Events.Reconnecting.Attach(m.onP2PManagerReconnecting) - m.Events.RelationUpdated.Attach(m.onP2PManagerRelationUpdated) - m.Events.StateChange.Attach(m.onP2PManagerStateChange) - m.Events.Error.Attach(m.onP2PManagerError) + m.Events.Connect.Hook(m.onP2PManagerConnect) + m.Events.Connected.Hook(m.onP2PManagerConnected) + m.Events.Disconnect.Hook(m.onP2PManagerDisconnect) + m.Events.Disconnected.Hook(m.onP2PManagerDisconnected) + m.Events.ScheduledReconnect.Hook(m.onP2PManagerScheduledReconnect) + m.Events.Reconnecting.Hook(m.onP2PManagerReconnecting) + m.Events.RelationUpdated.Hook(m.onP2PManagerRelationUpdated) + m.Events.StateChange.Hook(m.onP2PManagerStateChange) + m.Events.Error.Hook(m.onP2PManagerError) } func (m *Manager) detachEvents() { @@ -960,8 +1086,8 @@ func (m *Manager) detachEvents() { // the handlers are called in newly spawned goroutines. type netNotifiee Manager -func (m *netNotifiee) Listen(net network.Network, multiaddr multiaddr.Multiaddr) {} -func (m *netNotifiee) ListenClose(net network.Network, multiaddr multiaddr.Multiaddr) {} +func (m *netNotifiee) Listen(_ network.Network, _ multiaddr.Multiaddr) {} +func (m *netNotifiee) ListenClose(_ network.Network, _ multiaddr.Multiaddr) {} func (m *netNotifiee) Connected(net network.Network, conn network.Conn) { if m.stopped.IsSet() { return @@ -974,5 +1100,3 @@ func (m *netNotifiee) Disconnected(net network.Network, conn network.Conn) { } m.disconnectedChan <- &disconnectmsg{net: net, conn: conn, reason: errors.New("connection closed by libp2p network event")} } -func (m *netNotifiee) OpenedStream(net network.Network, stream network.Stream) {} -func (m *netNotifiee) ClosedStream(net network.Network, stream network.Stream) {} diff --git a/pkg/p2p/manager_test.go b/pkg/p2p/manager_test.go index b50be155b..4bcfdb813 100644 --- a/pkg/p2p/manager_test.go +++ b/pkg/p2p/manager_test.go @@ -7,18 +7,18 @@ import ( "time" "github.com/libp2p/go-libp2p" - connmgr "github.com/libp2p/go-libp2p-connmgr" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/network" + "github.com/libp2p/go-libp2p/core/peer" + connmgr "github.com/libp2p/go-libp2p/p2p/net/connmgr" "github.com/pkg/errors" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/p2p" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/hornet/pkg/p2p" ) func newNode(t require.TestingT) host.Host { @@ -140,7 +140,8 @@ func TestManager(t *testing.T) { // if we then tell node 1 to connect to node 2 again explicitly (even if they're already connected), // but with a different relation than what node 2 currently is for node 1, it will be updated: - _ = node1Manager.ConnectPeer(node2AddrInfo, p2p.PeerRelationKnown) + err = node1Manager.ConnectPeer(node2AddrInfo, p2p.PeerRelationKnown) + require.ErrorIs(t, err, p2p.ErrPeerInManagerAlready) require.True(t, node1.ConnManager().IsProtected(node2.ID(), p2p.PeerConnectivityProtectionTag)) // connect node 4 to node 2 too @@ -237,10 +238,10 @@ func TestManagerEvents(t *testing.T) { node2AddrInfo := &peer.AddrInfo{ID: node2.ID(), Addrs: node2.Addrs()} var connectCalled, connectedCalled bool - node1Manager.Events.Connect.Attach(events.NewClosure(func(_ *p2p.Peer) { + node1Manager.Events.Connect.Hook(events.NewClosure(func(_ *p2p.Peer) { connectCalled = true })) - node1Manager.Events.Connected.Attach(events.NewClosure(func(_ *p2p.Peer, _ network.Conn) { + node1Manager.Events.Connected.Hook(events.NewClosure(func(_ *p2p.Peer, _ network.Conn) { connectedCalled = true })) @@ -255,10 +256,10 @@ func TestManagerEvents(t *testing.T) { }, 4*time.Second, 10*time.Millisecond) var disconnectCalled, disconnectedCalled bool - node1Manager.Events.Disconnect.Attach(events.NewClosure(func(_ *p2p.Peer) { + node1Manager.Events.Disconnect.Hook(events.NewClosure(func(_ *p2p.Peer) { disconnectCalled = true })) - node1Manager.Events.Disconnected.Attach(events.NewClosure(func(_ *p2p.PeerOptError) { + node1Manager.Events.Disconnected.Hook(events.NewClosure(func(_ *p2p.PeerOptError) { disconnectedCalled = true })) @@ -280,7 +281,7 @@ func TestManagerEvents(t *testing.T) { var relationUpdatedCalled bool var updatedRelation, oldRelation p2p.PeerRelation - node1Manager.Events.RelationUpdated.Attach(events.NewClosure(func(peer *p2p.Peer, oldRel p2p.PeerRelation) { + node1Manager.Events.RelationUpdated.Hook(events.NewClosure(func(peer *p2p.Peer, oldRel p2p.PeerRelation) { relationUpdatedCalled = true updatedRelation = peer.Relation oldRelation = oldRel @@ -292,10 +293,10 @@ func TestManagerEvents(t *testing.T) { require.Equal(t, p2p.PeerRelationUnknown, oldRelation) var reconnectingCalled, reconnectedCalled bool - node1Manager.Events.Reconnecting.Attach(events.NewClosure(func(_ *p2p.Peer) { + node1Manager.Events.Reconnecting.Hook(events.NewClosure(func(_ *p2p.Peer) { reconnectingCalled = true })) - node1Manager.Events.Reconnected.Attach(events.NewClosure(func(_ *p2p.Peer) { + node1Manager.Events.Reconnected.Hook(events.NewClosure(func(_ *p2p.Peer) { reconnectedCalled = true })) diff --git a/pkg/p2p/peer.go b/pkg/p2p/peer.go index d36f477dc..c83b348a6 100644 --- a/pkg/p2p/peer.go +++ b/pkg/p2p/peer.go @@ -3,7 +3,7 @@ package p2p import ( "time" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/peer" "github.com/multiformats/go-multiaddr" ) diff --git a/pkg/pow/pow.go b/pkg/pow/pow.go index d45bc0127..c63868efc 100644 --- a/pkg/pow/pow.go +++ b/pkg/pow/pow.go @@ -7,10 +7,10 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/utils" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/pow" ) diff --git a/pkg/protocol/gossip/broadcaster.go b/pkg/protocol/gossip/broadcaster.go index efabf7504..e4c770dff 100644 --- a/pkg/protocol/gossip/broadcaster.go +++ b/pkg/protocol/gossip/broadcaster.go @@ -3,9 +3,9 @@ package gossip import ( "context" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/p2p" ) // Broadcaster provides functions to broadcast data to gossip streams. @@ -71,12 +71,13 @@ func (b *Broadcaster) BroadcastHeartbeat(filter func(proto *Protocol) bool) { return } - confirmedMilestoneIndex := b.syncManager.ConfirmedMilestoneIndex() // bee differentiates between solid and confirmed milestone, for hornet it is the same. + syncState := b.syncManager.SyncState() connectedCount := b.peeringManager.ConnectedCount() - syncedCount := b.service.SynchronizedCount(confirmedMilestoneIndex) + // TODO: overflow not handled for synced/connected + syncedCount := b.service.SynchronizedCount(syncState.ConfirmedMilestoneIndex) - heartbeatMsg, err := NewHeartbeatMsg(confirmedMilestoneIndex, snapshotInfo.PruningIndex, b.syncManager.LatestMilestoneIndex(), byte(connectedCount), byte(syncedCount)) + heartbeatMsg, err := NewHeartbeatMsg(syncState.ConfirmedMilestoneIndex, snapshotInfo.PruningIndex, syncState.LatestMilestoneIndex, byte(connectedCount), byte(syncedCount)) if err != nil { return } diff --git a/pkg/protocol/gossip/msg_proc.go b/pkg/protocol/gossip/msg_proc.go index 79c839966..346438b32 100644 --- a/pkg/protocol/gossip/msg_proc.go +++ b/pkg/protocol/gossip/msg_proc.go @@ -5,23 +5,23 @@ import ( "fmt" "time" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/peer" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/profile" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/objectstorage" "github.com/iotaledger/hive.go/protocol/message" "github.com/iotaledger/hive.go/serializer" "github.com/iotaledger/hive.go/syncutils" "github.com/iotaledger/hive.go/workerpool" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/profile" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/pow" ) @@ -379,10 +379,29 @@ func (proc *MessageProcessor) processWorkUnit(wu *WorkUnit, p *Protocol) { } } - wu.requested = requests.HasRequest() + // ATTENTION: potential data race, processRequests might be executed several times in parallel for the same WorkUnit. + // requested should only be set to true but not to false, even if HasRequest might be false in one run. + if requests.HasRequest() { + wu.requested = true + } + return requests } + processMessage := func(msg *storage.Message, isMilestonePayload bool, requests Requests, p *Protocol) { + // do not process gossip if we are not in sync. + // we ignore all received messages if we didn't request them and it's not a milestone. + // otherwise these messages would get evicted from the cache, and it's heavier to load them + // from the storage than to request them again. + // ATTENTION: we use requests.HasRequest() here instead of wu.requested because + // we only want to trigger the MessageProcessed event with the correct requests. + if !requests.HasRequest() && !proc.syncManager.IsNodeAlmostSynced() && !isMilestonePayload { + return + } + + proc.Events.MessageProcessed.Trigger(msg, requests, p) + } + wu.processingLock.Lock() switch { @@ -402,17 +421,13 @@ func (proc *MessageProcessor) processWorkUnit(wu *WorkUnit, p *Protocol) { case wu.Is(Hashed): wu.processingLock.Unlock() + isMilestonePayload := wu.msg.IsMilestone() + // we need to check for requests here again because there is a race condition // between processing received messages and enqueuing requests. - requests := processRequests(wu, wu.msg, wu.msg.IsMilestone()) - if wu.requested { - proc.Events.MessageProcessed.Trigger(wu.msg, requests, p) - } + requests := processRequests(wu, wu.msg, isMilestonePayload) - if proc.storage.ContainsMessage(wu.msg.MessageID()) { - proc.serverMetrics.KnownMessages.Inc() - p.Metrics.KnownMessages.Inc() - } + processMessage(wu.msg, isMilestonePayload, requests, p) return } @@ -454,15 +469,7 @@ func (proc *MessageProcessor) processWorkUnit(wu *WorkUnit, p *Protocol) { // increase the known message count for all other peers wu.increaseKnownTxCount(p) - // do not process gossip if we are not in sync. - // we ignore all received messages if we didn't request them and it's not a milestone. - // otherwise these messages would get evicted from the cache, and it's heavier to load them - // from the storage than to request them again. - if !wu.requested && !proc.syncManager.IsNodeAlmostSynced() && !isMilestonePayload { - return - } - - proc.Events.MessageProcessed.Trigger(msg, requests, p) + processMessage(msg, isMilestonePayload, requests, p) } func (proc *MessageProcessor) Broadcast(cachedMsgMeta *storage.CachedMetadata) { @@ -475,18 +482,20 @@ func (proc *MessageProcessor) Broadcast(cachedMsgMeta *storage.CachedMetadata) { return } - if !proc.syncManager.IsNodeSyncedWithinBelowMaxDepth() { + syncState := proc.syncManager.SyncState() + + if !syncState.NodeSyncedWithinBelowMaxDepth { // no need to broadcast messages if the node is not sync within "below max depth" return } // we pass a background context here to not prevent broadcasting messages at shutdown (COO etc). - _, ocri, err := dag.ConeRootIndexes(context.Background(), proc.storage, cachedMsgMeta.Retain(), proc.syncManager.ConfirmedMilestoneIndex()) // meta pass +1 + _, ocri, err := dag.ConeRootIndexes(context.Background(), proc.storage, cachedMsgMeta.Retain(), syncState.ConfirmedMilestoneIndex) // meta pass +1 if err != nil { return } - if (proc.syncManager.LatestMilestoneIndex() - ocri) > proc.opts.BelowMaxDepth { + if (syncState.LatestMilestoneIndex - ocri) > proc.opts.BelowMaxDepth { // the solid message was below max depth in relation to the latest milestone index, do not broadcast return } diff --git a/pkg/protocol/gossip/msg_proc_test.go b/pkg/protocol/gossip/msg_proc_test.go index c63fb801f..aec7ad1ff 100644 --- a/pkg/protocol/gossip/msg_proc_test.go +++ b/pkg/protocol/gossip/msg_proc_test.go @@ -6,17 +6,17 @@ import ( "testing" "github.com/libp2p/go-libp2p" - connmgr "github.com/libp2p/go-libp2p-connmgr" - "github.com/libp2p/go-libp2p-core/crypto" + "github.com/libp2p/go-libp2p/core/crypto" + connmgr "github.com/libp2p/go-libp2p/p2p/net/connmgr" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/testsuite" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/testsuite" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/protocol/gossip/protocol.go b/pkg/protocol/gossip/protocol.go index a1588440d..37601081b 100644 --- a/pkg/protocol/gossip/protocol.go +++ b/pkg/protocol/gossip/protocol.go @@ -5,15 +5,15 @@ import ( "sync" "time" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/network" + "github.com/libp2p/go-libp2p/core/peer" "go.uber.org/atomic" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/protocol" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" ) const ( @@ -199,33 +199,38 @@ func (p *Protocol) SendLatestMilestoneRequest() { // HasDataForMilestone tells whether the underlying peer given the latest heartbeat message, has the cone data for the given milestone. // Returns false if no heartbeat message was received yet. func (p *Protocol) HasDataForMilestone(index milestone.Index) bool { - if p.LatestHeartbeat == nil { + heartbeat := p.LatestHeartbeat + if heartbeat == nil { return false } - return p.LatestHeartbeat.PrunedMilestoneIndex < index && p.LatestHeartbeat.SolidMilestoneIndex >= index + + return heartbeat.PrunedMilestoneIndex < index && heartbeat.SolidMilestoneIndex >= index } // CouldHaveDataForMilestone tells whether the underlying peer given the latest heartbeat message, could have parts of the cone data for the given milestone. // Returns false if no heartbeat message was received yet. func (p *Protocol) CouldHaveDataForMilestone(index milestone.Index) bool { - if p.LatestHeartbeat == nil { + heartbeat := p.LatestHeartbeat + if heartbeat == nil { return false } - return p.LatestHeartbeat.PrunedMilestoneIndex < index && p.LatestHeartbeat.LatestMilestoneIndex >= index + + return heartbeat.PrunedMilestoneIndex < index && heartbeat.LatestMilestoneIndex >= index } // IsSynced tells whether the underlying peer is synced. func (p *Protocol) IsSynced(cmi milestone.Index) bool { - if p.LatestHeartbeat == nil { + heartbeat := p.LatestHeartbeat + if heartbeat == nil { return false } - latestIndex := p.LatestHeartbeat.LatestMilestoneIndex + latestIndex := heartbeat.LatestMilestoneIndex if latestIndex < cmi { latestIndex = cmi } - if p.LatestHeartbeat.SolidMilestoneIndex < (latestIndex - minCMISynchronizationThreshold) { + if heartbeat.SolidMilestoneIndex < (latestIndex - minCMISynchronizationThreshold) { return false } diff --git a/pkg/protocol/gossip/requester.go b/pkg/protocol/gossip/requester.go index 43d629614..964d81736 100644 --- a/pkg/protocol/gossip/requester.go +++ b/pkg/protocol/gossip/requester.go @@ -4,9 +4,9 @@ import ( "context" "time" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" ) // RequesterOptions are options around a Requester. diff --git a/pkg/protocol/gossip/rqueue.go b/pkg/protocol/gossip/rqueue.go index 4481dd094..c8d823d03 100644 --- a/pkg/protocol/gossip/rqueue.go +++ b/pkg/protocol/gossip/rqueue.go @@ -9,8 +9,8 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" ) var ( diff --git a/pkg/protocol/gossip/rqueue_test.go b/pkg/protocol/gossip/rqueue_test.go index c1f3464fe..d0e2fafd3 100644 --- a/pkg/protocol/gossip/rqueue_test.go +++ b/pkg/protocol/gossip/rqueue_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/protocol/gossip" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/protocol/gossip/service.go b/pkg/protocol/gossip/service.go index 2dd3dd121..016d4aa87 100644 --- a/pkg/protocol/gossip/service.go +++ b/pkg/protocol/gossip/service.go @@ -4,22 +4,22 @@ import ( "context" "errors" "fmt" - "github.com/iotaledger/hive.go/workerpool" "time" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/protocol" - "github.com/multiformats/go-multiaddr" + "github.com/iotaledger/hive.go/workerpool" + + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/network" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/typeutils" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/utils" ) // ServiceEvents are events happening around a Service. @@ -183,7 +183,6 @@ type Service struct { connectedChan chan *connectionmsg closeStreamChan chan *closestreammsg disconnectedChan chan *connectionmsg - streamClosedChan chan *streamclosedmsg relationUpdatedChan chan *relationupdatedmsg streamReqChan chan *streamreqmsg forEachChan chan *foreachmsg @@ -231,7 +230,6 @@ func NewService( connectedChan: make(chan *connectionmsg, 10), closeStreamChan: make(chan *closestreammsg, 10), disconnectedChan: make(chan *connectionmsg, 10), - streamClosedChan: make(chan *streamclosedmsg, 10), relationUpdatedChan: make(chan *relationupdatedmsg, 10), streamReqChan: make(chan *streamreqmsg, 10), forEachChan: make(chan *foreachmsg, 10), @@ -306,17 +304,11 @@ func (s *Service) Start(ctx context.Context) { s.inboundStreamChan <- stream }) - // manage libp2p network events - s.host.Network().Notify((*netNotifiee)(s)) - s.eventLoop(ctx) // libp2p stream handler s.host.RemoveStreamHandler(s.protocol) - // de-register libp2p network events - s.host.Network().StopNotify((*netNotifiee)(s)) - s.detachEvents() s.peeringMngWP.Stop() } @@ -340,8 +332,6 @@ drainLoop: case <-s.disconnectedChan: - case <-s.streamClosedChan: - case <-s.relationUpdatedChan: case streamReqMsg := <-s.streamReqChan: @@ -371,11 +361,6 @@ type streamreqmsg struct { back chan *Protocol } -type streamclosedmsg struct { - peerID peer.ID - stream network.Stream -} - type relationupdatedmsg struct { peer *p2p.Peer oldRelation p2p.PeerRelation @@ -398,26 +383,21 @@ func (s *Service) eventLoop(ctx context.Context) { s.handleInboundStream(inboundStream) case connectedMsg := <-s.connectedChan: - s.handleConnected(connectedMsg.peer, connectedMsg.conn) + s.handleConnected(ctx, connectedMsg.peer, connectedMsg.conn) - case disconnectMsg := <-s.closeStreamChan: - if err := s.deregisterProtocol(disconnectMsg.peerID); err != nil && !errors.Is(err, ErrProtocolDoesNotExist) { - disconnectMsg.back <- err + case closeStreamMsg := <-s.closeStreamChan: + if err := s.deregisterProtocol(closeStreamMsg.peerID); err != nil && !errors.Is(err, ErrProtocolDoesNotExist) { + closeStreamMsg.back <- err } - disconnectMsg.back <- nil + closeStreamMsg.back <- nil case disconnectedMsg := <-s.disconnectedChan: if err := s.deregisterProtocol(disconnectedMsg.peer.ID); err != nil && !errors.Is(err, ErrProtocolDoesNotExist) { s.Events.Error.Trigger(err) } - case streamClosedMsg := <-s.streamClosedChan: - if err := s.deregisterProtocol(streamClosedMsg.peerID); err != nil && !errors.Is(err, ErrProtocolDoesNotExist) { - s.Events.Error.Trigger(err) - } - case relationUpdatedMsg := <-s.relationUpdatedChan: - s.handleRelationUpdated(relationUpdatedMsg.peer, relationUpdatedMsg.oldRelation) + s.handleRelationUpdated(ctx, relationUpdatedMsg.peer, relationUpdatedMsg.oldRelation) case streamReqMsg := <-s.streamReqChan: streamReqMsg.back <- s.proto(streamReqMsg.peerID) @@ -463,7 +443,7 @@ func (s *Service) handleInboundStream(stream network.Stream) { if len(cancelReason) > 0 { s.Events.InboundStreamCanceled.Trigger(stream, cancelReason) - s.closeUnwantedStream(stream) + s.closeUnwantedStreamAndClosePeer(stream) return } @@ -474,19 +454,27 @@ func (s *Service) handleInboundStream(stream network.Stream) { s.registerProtocol(remotePeerID, stream) } -// closes the given unwanted stream by closing the underlying -// connection and the stream itself. +// closeUnwantedStream closes the given unwanted stream. func (s *Service) closeUnwantedStream(stream network.Stream) { // using close and reset is the only way to make the remote's peer // "ClosedStream" notifiee handler fire: this is important, because // we want the remote peer to deregister the stream - _ = stream.Conn().Close() _ = stream.Reset() } +// closeUnwantedStreamAndClosePeer closes the given unwanted stream by closing the underlying +// peer and the stream itself. +func (s *Service) closeUnwantedStreamAndClosePeer(stream network.Stream) { + // using close and reset is the only way to make the remote's peer + // "ClosedStream" notifiee handler fire: this is important, because + // we want the remote peer to deregister the stream + _ = stream.Reset() + _ = s.host.Network().ClosePeer(stream.Conn().RemotePeer()) +} + // handles the automatic creation of a protocol instance if the given peer // was connected outbound and its peer relation allows it. -func (s *Service) handleConnected(peer *p2p.Peer, conn network.Conn) { +func (s *Service) handleConnected(ctx context.Context, peer *p2p.Peer, conn network.Conn) { connect := func() error { // don't create a new protocol if one is already ongoing @@ -510,14 +498,16 @@ func (s *Service) handleConnected(peer *p2p.Peer, conn network.Conn) { s.unknownPeers[peer.ID] = struct{}{} } - stream, err := s.openStream(peer.ID) + stream, err := s.openStream(ctx, peer.ID) if err != nil { // close the connection to the peer _ = conn.Close() + return err } s.registerProtocol(peer.ID, stream) + return nil } @@ -527,17 +517,18 @@ func (s *Service) handleConnected(peer *p2p.Peer, conn network.Conn) { } // opens up a stream to the given peer. -func (s *Service) openStream(peerID peer.ID) (network.Stream, error) { - ctx, cancel := context.WithTimeout(context.Background(), s.opts.streamConnectTimeout) - defer cancel() +func (s *Service) openStream(ctx context.Context, peerID peer.ID) (network.Stream, error) { + ctxNewStream, cancelNewStream := context.WithTimeout(ctx, s.opts.streamConnectTimeout) + defer cancelNewStream() - stream, err := s.host.NewStream(ctx, peerID, s.protocol) + stream, err := s.host.NewStream(ctxNewStream, peerID, s.protocol) if err != nil { return nil, fmt.Errorf("unable to create gossip stream to %s: %w", peerID, err) } // now some special sauce to trigger the remote peer's SetStreamHandler // https://github.com/libp2p/go-libp2p/issues/729 _, _ = stream.Read(make([]byte, 0)) + return stream, nil } @@ -571,6 +562,11 @@ func (s *Service) deregisterProtocol(peerID peer.ID) error { return fmt.Errorf("unable to cleanly reset stream to %s: %w", peerID, err) } + // Drop connection to peer since we no longer have a protocol stream to it + if conn := proto.Stream.Conn(); conn != nil { + return conn.Close() + } + return nil } @@ -578,7 +574,7 @@ func (s *Service) deregisterProtocol(peerID peer.ID) error { // is no longer unknown, a gossip protocol stream is started. likewise, if the // relation is "downgraded" to unknown, the ongoing stream is closed if no more // unknown peer slots are available. -func (s *Service) handleRelationUpdated(peer *p2p.Peer, oldRel p2p.PeerRelation) { +func (s *Service) handleRelationUpdated(ctx context.Context, peer *p2p.Peer, oldRel p2p.PeerRelation) { newRel := peer.Relation updateRelation := func() error { @@ -586,6 +582,7 @@ func (s *Service) handleRelationUpdated(peer *p2p.Peer, oldRel p2p.PeerRelation) if len(s.unknownPeers) >= s.opts.unknownPeersLimit { // close the stream if no more unknown peer slots are available err := s.deregisterProtocol(peer.ID) + return err } s.unknownPeers[peer.ID] = struct{}{} @@ -603,7 +600,7 @@ func (s *Service) handleRelationUpdated(peer *p2p.Peer, oldRel p2p.PeerRelation) // here we might open a stream even if the connection is inbound: // the service should however take care of duplicated streams - stream, err := s.openStream(peer.ID) + stream, err := s.openStream(ctx, peer.ID) if err != nil { return err } @@ -691,15 +688,15 @@ func (s *Service) configureEvents() { func (s *Service) attachEvents() { // peering manager - s.peeringManager.Events.Connected.Attach(s.onPeeringManagerConnected) - s.peeringManager.Events.Disconnected.Attach(s.onPeeringManagerDisconnected) - s.peeringManager.Events.RelationUpdated.Attach(s.onPeeringManagerRelationUpdated) + s.peeringManager.Events.Connected.Hook(s.onPeeringManagerConnected) + s.peeringManager.Events.Disconnected.Hook(s.onPeeringManagerDisconnected) + s.peeringManager.Events.RelationUpdated.Hook(s.onPeeringManagerRelationUpdated) // logger - s.Events.ProtocolStarted.Attach(s.onGossipServiceProtocolStarted) - s.Events.ProtocolTerminated.Attach(s.onGossipServiceProtocolTerminated) - s.Events.InboundStreamCanceled.Attach(s.onGossipServiceInboundStreamCanceled) - s.Events.Error.Attach(s.onGossipServiceError) + s.Events.ProtocolStarted.Hook(s.onGossipServiceProtocolStarted) + s.Events.ProtocolTerminated.Hook(s.onGossipServiceProtocolTerminated) + s.Events.InboundStreamCanceled.Hook(s.onGossipServiceInboundStreamCanceled) + s.Events.Error.Hook(s.onGossipServiceError) } func (s *Service) detachEvents() { @@ -714,22 +711,3 @@ func (s *Service) detachEvents() { s.Events.InboundStreamCanceled.Detach(s.onGossipServiceInboundStreamCanceled) s.Events.Error.Detach(s.onGossipServiceError) } - -// lets Service implement network.Notifiee in order to automatically -// clean up ongoing reset streams -type netNotifiee Service - -func (m *netNotifiee) Listen(net network.Network, multiaddr multiaddr.Multiaddr) {} -func (m *netNotifiee) ListenClose(net network.Network, multiaddr multiaddr.Multiaddr) {} -func (m *netNotifiee) Connected(net network.Network, conn network.Conn) {} -func (m *netNotifiee) Disconnected(net network.Network, conn network.Conn) {} -func (m *netNotifiee) OpenedStream(net network.Network, stream network.Stream) {} -func (m *netNotifiee) ClosedStream(net network.Network, stream network.Stream) { - if stream.Protocol() != m.protocol { - return - } - if m.stopped.IsSet() { - return - } - m.streamClosedChan <- &streamclosedmsg{peerID: stream.Conn().RemotePeer(), stream: stream} -} diff --git a/pkg/protocol/gossip/service_test.go b/pkg/protocol/gossip/service_test.go index 3eb654a45..9664d9137 100644 --- a/pkg/protocol/gossip/service_test.go +++ b/pkg/protocol/gossip/service_test.go @@ -7,29 +7,26 @@ import ( "time" "github.com/libp2p/go-libp2p" - connmgr "github.com/libp2p/go-libp2p-connmgr" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/peer" + connmgr "github.com/libp2p/go-libp2p/p2p/net/connmgr" + "github.com/libp2p/go-libp2p/p2p/transport/tcp" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/protocol/gossip" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/protocol/gossip" ) const protocolID = "/iota/abcdf/1.0.0" -func newNode(name string, ctx context.Context, t *testing.T, mngOpts []p2p.ManagerOption, srvOpts []gossip.ServiceOption) ( +func newNode(name string, ctx context.Context, t *testing.T, mngOpts []p2p.ManagerOption, srvOpts []gossip.ServiceOption, privateKey crypto.PrivKey) ( host.Host, *p2p.Manager, *gossip.Service, peer.AddrInfo, ) { - // we use Ed25519 because otherwise it takes longer as the default is RSA - sk, _, err := crypto.GenerateKeyPair(crypto.Ed25519, -1) - require.NoError(t, err) - connManager, err := connmgr.NewConnManager( 1, 100, @@ -38,8 +35,10 @@ func newNode(name string, ctx context.Context, t *testing.T, mngOpts []p2p.Manag require.NoError(t, err) n, err := libp2p.New( - libp2p.Identity(sk), + libp2p.DefaultListenAddrs, + libp2p.Identity(privateKey), libp2p.ConnectionManager(connManager), + libp2p.Transport(tcp.NewTCPTransport), ) require.NoError(t, err) @@ -71,17 +70,26 @@ func TestServiceEvents(t *testing.T) { } var srvOpts []gossip.ServiceOption - node1, node1Manager, node1Service, node1AddrInfo := newNode("node1", ctx, t, mngOpts, srvOpts) - node2, node2Manager, node2Service, node2AddrInfo := newNode("node2", ctx, t, mngOpts, srvOpts) + node1PrvKey, err := p2p.ParseEd25519PrivateKeyFromString("5536d0d7eb7cb3780085d73d55079a373a726df58010d881167add08d7e8108c76d7a7f15c094c292faa22ac81b976034f0b11db86a8863d9a9b0c64820e087d") + require.NoError(t, err) + + node2PrvKey, err := p2p.ParseEd25519PrivateKeyFromString("35764adaa5e02cbd677285ffd90f927644d2010dca7608876dd3ea3a44f8fcb491cdffa377a307e1d16df5c18e4beee9fffbd61998bd1f8c76a616c1b6c7ca7d") + require.NoError(t, err) + + // node 1 + node1, node1Manager, node1Service, node1AddrInfo := newNode("node1", ctx, t, mngOpts, srvOpts, node1PrvKey) + + // node 2 + node2, node2Manager, node2Service, node2AddrInfo := newNode("node2", ctx, t, mngOpts, srvOpts, node2PrvKey) fmt.Println("node 1", node1.ID().ShortString()) fmt.Println("node 2", node2.ID().ShortString()) var protocolStartedCalled1, protocolStartedCalled2 bool - node1Service.Events.ProtocolStarted.Attach(events.NewClosure(func(_ *gossip.Protocol) { + node1Service.Events.ProtocolStarted.Hook(events.NewClosure(func(_ *gossip.Protocol) { protocolStartedCalled1 = true })) - node2Service.Events.ProtocolStarted.Attach(events.NewClosure(func(_ *gossip.Protocol) { + node2Service.Events.ProtocolStarted.Hook(events.NewClosure(func(_ *gossip.Protocol) { protocolStartedCalled2 = true })) @@ -111,10 +119,10 @@ func TestServiceEvents(t *testing.T) { require.True(t, protocolStartedCalled2) var protocolTerminatedCalled1, protocolTerminatedCalled2 bool - node1Service.Events.ProtocolTerminated.Attach(events.NewClosure(func(_ *gossip.Protocol) { + node1Service.Events.ProtocolTerminated.Hook(events.NewClosure(func(_ *gossip.Protocol) { protocolTerminatedCalled1 = true })) - node2Service.Events.ProtocolTerminated.Attach(events.NewClosure(func(_ *gossip.Protocol) { + node2Service.Events.ProtocolTerminated.Hook(events.NewClosure(func(_ *gossip.Protocol) { protocolTerminatedCalled2 = true })) @@ -148,10 +156,10 @@ func TestServiceEvents(t *testing.T) { protocolStartedCalled1 = false protocolTerminatedCalled1 = false - node1Service.Events.ProtocolStarted.Attach(events.NewClosure(func(_ *gossip.Protocol) { + node1Service.Events.ProtocolStarted.Hook(events.NewClosure(func(_ *gossip.Protocol) { protocolStartedCalled1 = true })) - node1Service.Events.ProtocolTerminated.Attach(events.NewClosure(func(_ *gossip.Protocol) { + node1Service.Events.ProtocolTerminated.Hook(events.NewClosure(func(_ *gossip.Protocol) { protocolTerminatedCalled1 = true })) @@ -191,21 +199,35 @@ func TestWithUnknownPeersLimit(t *testing.T) { gossip.WithUnknownPeersLimit(1), } - node1, node1Manager, node1Service, node1AddrInfo := newNode("node1", ctx, t, mngOpts, srvOpts) - node2, node2Manager, node2Service, node2AddrInfo := newNode("node2", ctx, t, mngOpts, srvOpts) + node1PrvKey, err := p2p.ParseEd25519PrivateKeyFromString("5536d0d7eb7cb3780085d73d55079a373a726df58010d881167add08d7e8108c76d7a7f15c094c292faa22ac81b976034f0b11db86a8863d9a9b0c64820e087d") + require.NoError(t, err) + + node2PrvKey, err := p2p.ParseEd25519PrivateKeyFromString("35764adaa5e02cbd677285ffd90f927644d2010dca7608876dd3ea3a44f8fcb491cdffa377a307e1d16df5c18e4beee9fffbd61998bd1f8c76a616c1b6c7ca7d") + require.NoError(t, err) + + node3PrvKey, err := p2p.ParseEd25519PrivateKeyFromString("1d586a941f97be3d8ead709c9ff31579c9677f681ec05cd1e0233d36513b178bd2a54ee6c67c84037ae8da89033c1bcfc2252ecd466f6cf472c22cbe0e9a7842") + require.NoError(t, err) + + // node 1 + node1, node1Manager, node1Service, node1AddrInfo := newNode("node1", ctx, t, mngOpts, srvOpts, node1PrvKey) + + // node 2 + node2, node2Manager, node2Service, node2AddrInfo := newNode("node2", ctx, t, mngOpts, srvOpts, node2PrvKey) + + // node 3 node3, node3Manager, node3Service, _ := newNode("node3", ctx, t, mngOpts, []gossip.ServiceOption{ gossip.WithUnknownPeersLimit(2), - }) + }, node3PrvKey) fmt.Println("node 1", node1.ID().ShortString()) fmt.Println("node 2", node2.ID().ShortString()) fmt.Println("node 3", node3.ID().ShortString()) var protocolStartedCalled1, protocolStartedCalled2 bool - node1Service.Events.ProtocolStarted.Attach(events.NewClosure(func(_ *gossip.Protocol) { + node1Service.Events.ProtocolStarted.Hook(events.NewClosure(func(_ *gossip.Protocol) { protocolStartedCalled1 = true })) - node2Service.Events.ProtocolStarted.Attach(events.NewClosure(func(_ *gossip.Protocol) { + node2Service.Events.ProtocolStarted.Hook(events.NewClosure(func(_ *gossip.Protocol) { protocolStartedCalled2 = true })) @@ -237,7 +259,7 @@ func TestWithUnknownPeersLimit(t *testing.T) { // now lets verify that node 3 can't build a gossip stream to neither node 1 and 2 since both // have their available slots filled var node3ProtocolTerminated int - node3Service.Events.ProtocolTerminated.Attach(events.NewClosure(func(_ *gossip.Protocol) { + node3Service.Events.ProtocolTerminated.Hook(events.NewClosure(func(_ *gossip.Protocol) { node3ProtocolTerminated++ })) diff --git a/pkg/protocol/gossip/sting.go b/pkg/protocol/gossip/sting.go index 99464621a..318280e85 100644 --- a/pkg/protocol/gossip/sting.go +++ b/pkg/protocol/gossip/sting.go @@ -6,11 +6,11 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" "github.com/iotaledger/hive.go/protocol/message" "github.com/iotaledger/hive.go/protocol/tlv" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/protocol/gossip/warpsync.go b/pkg/protocol/gossip/warpsync.go index 2943cd9e9..6a3c65b79 100644 --- a/pkg/protocol/gossip/warpsync.go +++ b/pkg/protocol/gossip/warpsync.go @@ -7,14 +7,14 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" ) // NewWarpSync creates a new WarpSync instance with the given advancement range and criteria func. @@ -244,6 +244,8 @@ func (ws *WarpSync) reset() { type WarpSyncMilestoneRequester struct { syncutils.Mutex + // used to cancel the warp sync requester. + ctx context.Context // used to access the node storage. storage *storage.Storage // used to determine the sync status of the node. @@ -258,12 +260,14 @@ type WarpSyncMilestoneRequester struct { // NewWarpSyncMilestoneRequester creates a new WarpSyncMilestoneRequester instance. func NewWarpSyncMilestoneRequester( + ctx context.Context, dbStorage *storage.Storage, syncManager *syncmanager.SyncManager, requester *Requester, preventDiscard bool) *WarpSyncMilestoneRequester { return &WarpSyncMilestoneRequester{ + ctx: ctx, storage: dbStorage, syncManager: syncManager, requester: requester, @@ -272,25 +276,16 @@ func NewWarpSyncMilestoneRequester( } } -// RequestMissingMilestoneParents traverses the parents of a given milestone and requests each missing parent. +// requestMissingMilestoneParents traverses the parents of a given milestone and requests each missing parent. // Already requested milestones or traversed messages will be ignored, to circumvent requesting // the same parents multiple times. -func (w *WarpSyncMilestoneRequester) RequestMissingMilestoneParents(ctx context.Context, cachedMilestone *storage.CachedMilestone) error { - defer cachedMilestone.Release(true) // milestone -1 - - w.Lock() - defer w.Unlock() - - msIndex := cachedMilestone.Milestone().Index - +func (w *WarpSyncMilestoneRequester) requestMissingMilestoneParents(msIndex milestone.Index, milestoneMessageID hornet.MessageID) error { if msIndex <= w.syncManager.ConfirmedMilestoneIndex() { return nil } - milestoneMessageID := cachedMilestone.Milestone().MessageID - return dag.TraverseParentsOfMessage( - ctx, + w.ctx, w.storage, milestoneMessageID, // traversal stops if no more messages pass the given condition @@ -333,7 +328,10 @@ func (w *WarpSyncMilestoneRequester) Cleanup() { // RequestMilestoneRange requests up to N milestones nearest to the current confirmed milestone index. // Returns the number of milestones requested. -func (w *WarpSyncMilestoneRequester) RequestMilestoneRange(ctx context.Context, rangeToRequest int, onExistingMilestoneInRange func(ctx context.Context, milestone *storage.CachedMilestone) error, from ...milestone.Index) int { +func (w *WarpSyncMilestoneRequester) RequestMilestoneRange(rangeToRequest int, from ...milestone.Index) (int, milestone.Index, milestone.Index) { + w.Lock() + defer w.Unlock() + var requested int startingPoint := w.syncManager.ConfirmedMilestoneIndex() @@ -341,32 +339,27 @@ func (w *WarpSyncMilestoneRequester) RequestMilestoneRange(ctx context.Context, startingPoint = from[0] } + startIndex := startingPoint + 1 + endIndex := startingPoint + milestone.Index(rangeToRequest) + var msIndexes []milestone.Index - for i := 1; i <= rangeToRequest; i++ { - toReq := startingPoint + milestone.Index(i) + for i := milestone.Index(1); i <= milestone.Index(rangeToRequest); i++ { + msIndexToRequest := startingPoint + i - cachedMilestone := w.storage.CachedMilestoneOrNil(toReq) // milestone +1 + cachedMilestone := w.storage.CachedMilestoneOrNil(msIndexToRequest) // milestone +1 if cachedMilestone == nil { // only request if we do not have the milestone requested++ - msIndexes = append(msIndexes, toReq) + msIndexes = append(msIndexes, msIndexToRequest) continue } + cachedMilestone.Release(true) // milestone -1 // milestone already exists - if onExistingMilestoneInRange != nil { - if err := onExistingMilestoneInRange(ctx, cachedMilestone.Retain()); err != nil && errors.Is(err, common.ErrOperationAborted) { // milestone pass +1 - // do not proceed if the node was shut down - cachedMilestone.Release(true) // milestone -1 - return 0 - } + if err := w.requestMissingMilestoneParents(msIndexToRequest, cachedMilestone.Milestone().MessageID); err != nil && errors.Is(err, common.ErrOperationAborted) { + // do not proceed if the node was shut down + return 0, 0, 0 } - - cachedMilestone.Release(true) // milestone -1 - } - - if len(msIndexes) == 0 { - return requested } // enqueue every milestone request to the request queue @@ -374,5 +367,5 @@ func (w *WarpSyncMilestoneRequester) RequestMilestoneRange(ctx context.Context, w.requester.Request(msIndex, msIndex) } - return requested + return requested, startIndex, endIndex } diff --git a/pkg/protocol/gossip/warpsync_test.go b/pkg/protocol/gossip/warpsync_test.go index 8353c538d..eacea9a2d 100644 --- a/pkg/protocol/gossip/warpsync_test.go +++ b/pkg/protocol/gossip/warpsync_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/protocol/gossip" ) func TestAdvanceAtEightyPercentReached(t *testing.T) { diff --git a/pkg/protocol/gossip/work_unit.go b/pkg/protocol/gossip/work_unit.go index 93adb66d3..c2f4d6865 100644 --- a/pkg/protocol/gossip/work_unit.go +++ b/pkg/protocol/gossip/work_unit.go @@ -1,12 +1,12 @@ package gossip import ( - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/peer" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/storage" "github.com/iotaledger/hive.go/objectstorage" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/model/storage" ) // WorkUnitState defines the state which a WorkUnit is in. diff --git a/pkg/restapi/proxy.go b/pkg/restapi/proxy.go new file mode 100644 index 000000000..4569730b2 --- /dev/null +++ b/pkg/restapi/proxy.go @@ -0,0 +1,133 @@ +package restapi + +import ( + "fmt" + "net/url" + "strings" + "sync" + + "github.com/labstack/echo/v4" + "github.com/labstack/echo/v4/middleware" +) + +type DynamicProxy struct { + group *echo.Group + balancer *balancer +} + +type balancer struct { + mutex sync.RWMutex + prefix string + targets map[string]*middleware.ProxyTarget +} + +func (b *balancer) AddTarget(target *middleware.ProxyTarget) bool { + b.mutex.Lock() + defer b.mutex.Unlock() + b.targets[target.Name] = target + + return false +} + +func (b *balancer) RemoveTarget(prefix string) bool { + b.mutex.Lock() + defer b.mutex.Unlock() + delete(b.targets, prefix) + + return true +} + +func (b *balancer) Next(c echo.Context) *middleware.ProxyTarget { + b.mutex.RLock() + defer b.mutex.RUnlock() + + uri := b.uriFromRequest(c) + + name := strings.TrimPrefix(uri, "/") + for k, v := range b.targets { + if strings.HasPrefix(name, k) { + return v + } + } + + return nil +} + +func (b *balancer) uriFromRequest(c echo.Context) string { + req := c.Request() + rawURI := req.RequestURI + if rawURI != "" && rawURI[0] != '/' { + prefix := "" + if req.URL.Scheme != "" { + prefix = req.URL.Scheme + "://" + } + if req.URL.Host != "" { + prefix += req.URL.Host // host or host:port + } + if prefix != "" { + rawURI = strings.TrimPrefix(rawURI, prefix) + } + } + rawURI = strings.TrimPrefix(rawURI, b.prefix) + + return rawURI +} + +func (b *balancer) skipper(c echo.Context) bool { + return b.Next(c) == nil +} + +func (b *balancer) AddTargetHostAndPort(prefix string, host string, port uint32) error { + apiURL, err := url.Parse(fmt.Sprintf("http://%s:%d", host, port)) + if err != nil { + return err + } + b.AddTarget(&middleware.ProxyTarget{ + Name: prefix, + URL: apiURL, + }) + + return nil +} + +func NewDynamicProxy(e *echo.Echo, prefix string) *DynamicProxy { + balancer := &balancer{ + prefix: prefix, + targets: map[string]*middleware.ProxyTarget{}, + } + + proxy := &DynamicProxy{ + group: e.Group(prefix), + balancer: balancer, + } + + return proxy +} + +func (p *DynamicProxy) middleware(prefix string) echo.MiddlewareFunc { + config := middleware.DefaultProxyConfig + config.Skipper = p.balancer.skipper + config.Balancer = p.balancer + config.Rewrite = map[string]string{ + fmt.Sprintf("^%s/%s/*", p.balancer.prefix, prefix): "/$1", + } + + return middleware.ProxyWithConfig(config) +} + +func (p *DynamicProxy) AddGroup(prefix string) *echo.Group { + return p.group.Group("/" + prefix) +} + +func (p *DynamicProxy) AddReverseProxy(prefix string, host string, port uint32) error { + if err := p.balancer.AddTargetHostAndPort(prefix, host, port); err != nil { + return err + } + p.AddGroup(prefix).Use(p.middleware(prefix)) + + return nil +} + +func (p *DynamicProxy) RemoveReverseProxy(prefix string) { + p.balancer.RemoveTarget(prefix) +} diff --git a/pkg/restapi/restapi.go b/pkg/restapi/restapi.go index 4290705b2..7ca1e0ae5 100644 --- a/pkg/restapi/restapi.go +++ b/pkg/restapi/restapi.go @@ -7,12 +7,12 @@ import ( "strings" "github.com/labstack/echo/v4" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/peer" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/shutdown/shutdown_handler.go b/pkg/shutdown/shutdown_handler.go index 23f8890bc..27b008424 100644 --- a/pkg/shutdown/shutdown_handler.go +++ b/pkg/shutdown/shutdown_handler.go @@ -7,9 +7,9 @@ import ( "syscall" "time" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/daemon" "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/hornet/pkg/utils" ) const ( diff --git a/pkg/snapshot/download.go b/pkg/snapshot/download.go index 50503747f..bb39280af 100644 --- a/pkg/snapshot/download.go +++ b/pkg/snapshot/download.go @@ -14,8 +14,8 @@ import ( "github.com/dustin/go-humanize" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/utils" ) const ( diff --git a/pkg/snapshot/pruning.go b/pkg/snapshot/pruning.go index 6007f2d7b..188934b4d 100644 --- a/pkg/snapshot/pruning.go +++ b/pkg/snapshot/pruning.go @@ -7,12 +7,12 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/utils" iotago "github.com/iotaledger/iota.go/v2" ) @@ -64,12 +64,13 @@ func (s *SnapshotManager) calcTargetIndexBySize(targetSizeBytes ...int64) (miles return 0, ErrNoPruningNeeded } - milestoneRange := s.syncManager.ConfirmedMilestoneIndex() - s.storage.SnapshotInfo().PruningIndex + confirmedMilestoneIndex := s.syncManager.ConfirmedMilestoneIndex() + milestoneRange := confirmedMilestoneIndex - s.storage.SnapshotInfo().PruningIndex prunedDatabaseSizeBytes := float64(targetDatabaseSizeBytes) * ((100.0 - s.pruningSizeThresholdPercentage) / 100.0) diffPercentage := prunedDatabaseSizeBytes / float64(currentDatabaseSizeBytes) milestoneDiff := milestone.Index(math.Ceil(float64(milestoneRange) * diffPercentage)) - return s.syncManager.ConfirmedMilestoneIndex() - milestoneDiff, nil + return confirmedMilestoneIndex - milestoneDiff, nil } // pruneUnreferencedMessages prunes all unreferenced messages from the database for the given milestone @@ -166,7 +167,7 @@ func (s *SnapshotManager) pruneDatabase(ctx context.Context, targetIndex milesto snapshotInfo := s.storage.SnapshotInfo() if snapshotInfo == nil { - s.LogPanic("No snapshotInfo found!") + return 0, errors.Wrap(common.ErrCritical, common.ErrSnapshotInfoNotFound.Error()) } //lint:ignore SA5011 nil pointer is already checked before with a panic diff --git a/pkg/snapshot/snapshot.go b/pkg/snapshot/snapshot.go index e7854c258..75440977f 100644 --- a/pkg/snapshot/snapshot.go +++ b/pkg/snapshot/snapshot.go @@ -10,18 +10,18 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/utils" ) var ( @@ -72,6 +72,7 @@ type SnapshotManager struct { storage *storage.Storage syncManager *syncmanager.SyncManager utxoManager *utxo.Manager + snapshotCreationEnabled bool networkID uint64 networkIDSource string snapshotFullPath string @@ -108,6 +109,7 @@ func NewSnapshotManager( storage *storage.Storage, syncManager *syncmanager.SyncManager, utxoManager *utxo.Manager, + snapshotCreationEnabled bool, networkID uint64, networkIDSource string, snapshotFullPath string, @@ -131,6 +133,7 @@ func NewSnapshotManager( WrappedLogger: utils.NewWrappedLogger(log), tangleDatabase: tangleDatabase, utxoDatabase: utxoDatabase, + snapshotCreationEnabled: snapshotCreationEnabled, storage: storage, syncManager: syncManager, utxoManager: utxoManager, @@ -168,6 +171,9 @@ func (s *SnapshotManager) IsSnapshottingOrPruning() bool { } func (s *SnapshotManager) shouldTakeSnapshot(confirmedMilestoneIndex milestone.Index) bool { + if !s.snapshotCreationEnabled { + return false + } snapshotInfo := s.storage.SnapshotInfo() if snapshotInfo == nil { @@ -650,11 +656,5 @@ func (s *SnapshotManager) CheckCurrentSnapshot(snapshotInfo *storage.SnapshotInf s.LogPanicf("node is configured to operate in network %d/%s but the stored snapshot data corresponds to %d", s.networkID, s.networkIDSource, snapshotInfo.NetworkID) } - // if we don't enforce loading of a snapshot, - // we can check the ledger state of the current database and start the node. - if err := s.utxoManager.CheckLedgerState(); err != nil { - s.LogFatal(err) - } - return nil } diff --git a/pkg/snapshot/snapshot_file.go b/pkg/snapshot/snapshot_file.go index 566c4ce70..97a540a07 100644 --- a/pkg/snapshot/snapshot_file.go +++ b/pkg/snapshot/snapshot_file.go @@ -10,11 +10,11 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/byteutils" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/snapshot/snapshot_file_test.go b/pkg/snapshot/snapshot_file_test.go index f077999c9..d8dac6973 100644 --- a/pkg/snapshot/snapshot_file_test.go +++ b/pkg/snapshot/snapshot_file_test.go @@ -12,11 +12,11 @@ import ( "github.com/dustin/go-humanize" "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/snapshot" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/snapshot" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) diff --git a/pkg/snapshot/snapshot_read.go b/pkg/snapshot/snapshot_read.go index 1f7603c37..04ddb3779 100644 --- a/pkg/snapshot/snapshot_read.go +++ b/pkg/snapshot/snapshot_read.go @@ -8,11 +8,11 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/snapshot/snapshot_test.go b/pkg/snapshot/snapshot_test.go index e4d58d479..a06142555 100644 --- a/pkg/snapshot/snapshot_test.go +++ b/pkg/snapshot/snapshot_test.go @@ -8,11 +8,11 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/snapshot/snapshot_write.go b/pkg/snapshot/snapshot_write.go index fdc481c69..5441d8f21 100644 --- a/pkg/snapshot/snapshot_write.go +++ b/pkg/snapshot/snapshot_write.go @@ -3,22 +3,21 @@ package snapshot import ( "context" "fmt" - "io/ioutil" "os" "path/filepath" "time" "github.com/pkg/errors" - coreDatabase "github.com/gohornet/hornet/core/database" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/kvstore" + coreDatabase "github.com/iotaledger/hornet/core/database" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/utils" iotago "github.com/iotaledger/iota.go/v2" ) @@ -380,14 +379,15 @@ func (s *SnapshotManager) readSnapshotIndexFromFullSnapshotFile(snapshotFullPath // returns the timestamp of the target milestone. func readTargetMilestoneTimestamp(dbStorage *storage.Storage, targetIndex milestone.Index) (time.Time, error) { - cachedMilestoneTarget := dbStorage.CachedMilestoneOrNil(targetIndex) // milestone +1 - if cachedMilestoneTarget == nil { - return time.Time{}, errors.Wrapf(ErrCritical, "target milestone (%d) not found", targetIndex) + milestoneTimestamp, err := dbStorage.MilestoneTimestampByIndex(targetIndex) + if err != nil { + if err == storage.ErrMilestoneNotFound { + return time.Time{}, errors.Wrapf(ErrCritical, "target milestone (%d) not found", targetIndex) + } + return time.Time{}, errors.Wrap(ErrCritical, err.Error()) } - defer cachedMilestoneTarget.Release(true) // milestone -1 - ts := cachedMilestoneTarget.Milestone().Timestamp - return ts, nil + return milestoneTimestamp, nil } // creates a snapshot file by streaming data from the database into a snapshot file. @@ -833,7 +833,7 @@ func MergeSnapshotsFiles(fullPath string, deltaPath string, targetFileName strin return nil, err } - tempDir, err := ioutil.TempDir("", "snapMerge") + tempDir, err := os.MkdirTemp("", "snapMerge") if err != nil { return nil, fmt.Errorf("can't create temp dir: %w", err) } diff --git a/pkg/spammer/spammer.go b/pkg/spammer/spammer.go index 3208e00eb..85d8d7192 100644 --- a/pkg/spammer/spammer.go +++ b/pkg/spammer/spammer.go @@ -5,11 +5,11 @@ import ( "fmt" "time" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/pow" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/pow" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/tangle/events.go b/pkg/tangle/events.go index 960db63b8..d85228d0d 100644 --- a/pkg/tangle/events.go +++ b/pkg/tangle/events.go @@ -1,10 +1,10 @@ package tangle import ( - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/whiteflag" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/whiteflag" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/tangle/health.go b/pkg/tangle/health.go index e1aae7465..51b650423 100644 --- a/pkg/tangle/health.go +++ b/pkg/tangle/health.go @@ -3,7 +3,8 @@ package tangle import ( "time" - "github.com/gohornet/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/protocol/gossip" ) const ( @@ -11,15 +12,25 @@ const ( ) // IsNodeHealthy returns whether the node is synced, has active neighbors and its latest milestone is not too old. -func (t *Tangle) IsNodeHealthy() bool { - if !t.syncManager.IsNodeAlmostSynced() { +func (t *Tangle) IsNodeHealthy(sync ...*syncmanager.SyncState) bool { + + var syncState *syncmanager.SyncState + if len(sync) > 0 { + syncState = sync[0] + } else { + syncState = t.syncManager.SyncState() + } + + if !syncState.NodeAlmostSynced { return false } var gossipStreamsOngoing int t.gossipService.ForEach(func(_ *gossip.Protocol) bool { gossipStreamsOngoing++ - return true + + // one stream is enough + return false }) if gossipStreamsOngoing == 0 { @@ -27,14 +38,11 @@ func (t *Tangle) IsNodeHealthy() bool { } // latest milestone timestamp - lmi := t.syncManager.LatestMilestoneIndex() - cachedMilestone := t.storage.CachedMilestoneOrNil(lmi) // milestone +1 - if cachedMilestone == nil { + milestoneTimestamp, err := t.storage.MilestoneTimestampByIndex(syncState.LatestMilestoneIndex) + if err != nil { return false } - defer cachedMilestone.Release(true) // milestone -1 // check whether the milestone is older than 5 minutes - timeMs := cachedMilestone.Milestone().Timestamp - return time.Since(timeMs) < maxAllowedMilestoneAge + return time.Since(milestoneTimestamp) < maxAllowedMilestoneAge } diff --git a/pkg/tangle/message.go b/pkg/tangle/message.go index 1021f7fc2..842a8c526 100644 --- a/pkg/tangle/message.go +++ b/pkg/tangle/message.go @@ -1,9 +1,9 @@ package tangle import ( - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/milestonemanager" - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestonemanager" + "github.com/iotaledger/hornet/pkg/model/storage" ) // AddMessageToStorage adds a new message to the cache/persistence layer, diff --git a/pkg/tangle/milestones.go b/pkg/tangle/milestones.go index df2ece68c..8fc1dde19 100644 --- a/pkg/tangle/milestones.go +++ b/pkg/tangle/milestones.go @@ -1,7 +1,7 @@ package tangle import ( - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/storage" ) func (t *Tangle) processValidMilestone(cachedMilestone *storage.CachedMilestone, requested bool) { diff --git a/pkg/tangle/revalidation.go b/pkg/tangle/revalidation.go index 946e04976..e7bdee619 100644 --- a/pkg/tangle/revalidation.go +++ b/pkg/tangle/revalidation.go @@ -6,12 +6,12 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/snapshot" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/utils" ) const ( @@ -37,21 +37,21 @@ var ( // This way HORNET should be able to re-solidify the existing tangle in the database. // // Object Storages: -// - Milestone => will be removed and added again if missing by receiving the msg -// - Message => will be removed and added again by requesting the msg at solidification -// - MessageMetadata => will be removed and added again if missing by receiving the msg -// - Children => will be removed and added again if missing by receiving the msg -// - Indexation => will be removed and added again if missing by receiving the msg -// - UnreferencedMessage => will be removed at pruning anyway +// - Milestone => will be removed and added again if missing by receiving the msg +// - Message => will be removed and added again by requesting the msg at solidification +// - MessageMetadata => will be removed and added again if missing by receiving the msg +// - Children => will be removed and added again if missing by receiving the msg +// - Indexation => will be removed and added again if missing by receiving the msg +// - UnreferencedMessage => will be removed at pruning anyway // // Database: -// - LedgerState -// - Unspent => will be removed and loaded again from last snapshot -// - Spent => will be removed and loaded again from last snapshot -// - Balances => will be removed and loaded again from last snapshot -// - Diffs => will be removed and loaded again from last snapshot -// - Treasury => will be removed and loaded again from last snapshot -// - Receipts => will be removed and loaded again from last snapshot (if pruneReceipts is enabled) +// - LedgerState +// - Unspent => will be removed and loaded again from last snapshot +// - Spent => will be removed and loaded again from last snapshot +// - Balances => will be removed and loaded again from last snapshot +// - Diffs => will be removed and loaded again from last snapshot +// - Treasury => will be removed and loaded again from last snapshot +// - Receipts => will be removed and loaded again from last snapshot (if pruneReceipts is enabled) func (t *Tangle) RevalidateDatabase(snapshotManager *snapshot.SnapshotManager, pruneReceipts bool) error { // mark the database as tainted forever. diff --git a/pkg/tangle/solidifier.go b/pkg/tangle/solidifier.go index db9826ca5..5435e3aad 100644 --- a/pkg/tangle/solidifier.go +++ b/pkg/tangle/solidifier.go @@ -7,19 +7,18 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/utils" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" ) var ( - ErrMilestoneNotFound = errors.New("milestone not found") - ErrDivisionByZero = errors.New("division by zero") + ErrDivisionByZero = errors.New("division by zero") ) type ConfirmedMilestoneMetric struct { @@ -212,8 +211,9 @@ func (t *Tangle) solidifyMilestone(newMilestoneIndex milestone.Index, force bool t.solidifierLock.Lock() defer t.solidifierLock.Unlock() - currentConfirmedIndex := t.syncManager.ConfirmedMilestoneIndex() - latestIndex := t.syncManager.LatestMilestoneIndex() + syncState := t.syncManager.SyncState() + currentConfirmedIndex := syncState.ConfirmedMilestoneIndex + latestIndex := syncState.LatestMilestoneIndex if currentConfirmedIndex == latestIndex && latestIndex != 0 { // Latest milestone already solid @@ -314,7 +314,7 @@ func (t *Tangle) solidifyMilestone(newMilestoneIndex milestone.Index, force bool t.LogPanicf("SetConfirmedMilestoneIndex failed: %s", err) } timeSetConfirmedMilestoneIndex = time.Now() - if t.syncManager.IsNodeAlmostSynced() { + if syncState.NodeAlmostSynced { // propagate new cone root indexes to the future cone (needed for URTS, heaviest branch tipselection, message broadcasting, etc...) // we can safely ignore errors of the future cone solidifier. _ = dag.UpdateConeRootIndexes(milestoneSolidificationCtx, memcachedTraverserStorage, confirmation.Mutations.MessagesReferenced, confirmation.MilestoneIndex) @@ -385,7 +385,8 @@ func (t *Tangle) solidifyMilestone(newMilestoneIndex milestone.Index, force bool var rmpsMessage string if metric, err := t.calcConfirmedMilestoneMetric(cachedMilestoneToSolidify.Retain(), confirmedMilestoneStats.Index); err == nil { // milestone pass +1 - if t.syncManager.IsNodeSynced() { + isNodeSynced := t.syncManager.IsNodeSynced() + if isNodeSynced { // Only trigger the metrics event if the node is sync (otherwise the MPS and conf.rate is wrong) if t.firstSyncedMilestone == 0 { t.firstSyncedMilestone = confirmedMilestoneStats.Index @@ -395,7 +396,7 @@ func (t *Tangle) solidifyMilestone(newMilestoneIndex milestone.Index, force bool t.firstSyncedMilestone = 0 } - if t.syncManager.IsNodeSynced() && (confirmedMilestoneStats.Index > t.firstSyncedMilestone+1) { + if isNodeSynced && (confirmedMilestoneStats.Index > t.firstSyncedMilestone+1) { t.lastConfirmedMilestoneMetricLock.Lock() t.lastConfirmedMilestoneMetric = metric t.lastConfirmedMilestoneMetricLock.Unlock() @@ -426,7 +427,7 @@ func (t *Tangle) calcConfirmedMilestoneMetric(cachedMilestone *storage.CachedMil cachedMilestoneOld := t.storage.CachedMilestoneOrNil(milestoneIndexToSolidify - 1) // milestone +1 if cachedMilestoneOld == nil { - return nil, ErrMilestoneNotFound + return nil, storage.ErrMilestoneNotFound } defer cachedMilestoneOld.Release(true) // milestone -1 diff --git a/pkg/tangle/solidifier_future_cone.go b/pkg/tangle/solidifier_future_cone.go index 80a72f789..50fa780bd 100644 --- a/pkg/tangle/solidifier_future_cone.go +++ b/pkg/tangle/solidifier_future_cone.go @@ -3,11 +3,12 @@ package tangle import ( "bytes" "context" + "fmt" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/storage" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/storage" ) type MarkMessageAsSolidFunc func(*storage.CachedMetadata) @@ -67,6 +68,56 @@ func (s *FutureConeSolidifier) SolidifyFutureConesWithMetadataMemcache(ctx conte return solidifyFutureCone(ctx, memcachedTraverserStorage, s.markMessageAsSolidFunc, messageIDs) } +// SolidifyDirectChildrenWithMetadataMemcache updates the solidity of the direct children of the given messages. +// The given messages itself must already be solid, otherwise an error is returned. +// This function doesn't use the same memcache nor traverser like the FutureConeSolidifier, but it holds the lock, so no other solidifications are done in parallel. +func (s *FutureConeSolidifier) SolidifyDirectChildrenWithMetadataMemcache(ctx context.Context, memcachedTraverserStorage dag.TraverserStorage, messageIDs hornet.MessageIDs) error { + s.Lock() + defer s.Unlock() + + return solidifyDirectChildren(ctx, memcachedTraverserStorage, s.markMessageAsSolidFunc, messageIDs) +} + +// checkMessageSolid checks if the message is solid by checking the solid state of the direct parents. +func checkMessageSolid(dbStorage dag.TraverserStorage, cachedMsgMeta *storage.CachedMetadata) (isSolid bool, newlySolid bool, err error) { + defer cachedMsgMeta.Release(true) // meta -1 + + if cachedMsgMeta.Metadata().IsSolid() { + return true, false, nil + } + + // check if current message is solid by checking the solidity of its parents + for _, parentMessageID := range cachedMsgMeta.Metadata().Parents() { + contains, err := dbStorage.SolidEntryPointsContain(parentMessageID) + if err != nil { + return false, false, err + } + if contains { + // Ignore solid entry points (snapshot milestone included) + continue + } + + cachedMsgMetaParent, err := dbStorage.CachedMessageMetadata(parentMessageID) // meta +1 + if err != nil { + return false, false, err + } + if cachedMsgMetaParent == nil { + // parent is missing => message is not solid + return false, false, nil + } + + if !cachedMsgMetaParent.Metadata().IsSolid() { + // parent is not solid => message is not solid + cachedMsgMetaParent.Release(true) // meta -1 + + return false, false, nil + } + cachedMsgMetaParent.Release(true) // meta -1 + } + + return true, true, nil +} + // solidifyFutureCone updates the solidity of the future cone (messages approving the given messages). // We keep on walking the future cone, if a message became newly solid during the walk. func solidifyFutureCone( @@ -88,46 +139,67 @@ func solidifyFutureCone( func(cachedMsgMeta *storage.CachedMetadata) (bool, error) { // meta +1 defer cachedMsgMeta.Release(true) // meta -1 - if cachedMsgMeta.Metadata().IsSolid() && !bytes.Equal(startMessageID, cachedMsgMeta.Metadata().MessageID()) { - // do not walk the future cone if the current message is already solid, except it was the startTx - return false, nil + isSolid, newlySolid, err := checkMessageSolid(traverserStorage, cachedMsgMeta.Retain()) + if err != nil { + return false, err + } + + if newlySolid { + // mark current message as solid + markMessageAsSolidFunc(cachedMsgMeta.Retain()) // meta pass +1 + } + + // only walk the future cone if the current message got newly solid or it is solid and it was the startTx + return newlySolid || (isSolid && bytes.Equal(startMessageID, cachedMsgMeta.Metadata().MessageID())), nil + }, + // consumer + // no need to consume here + nil, + true); err != nil { + return err + } + } + + return nil +} + +// solidifyDirectChildren updates the solidity of the future cone (messages approving the given messages). +// We only solidify the direct children of the given messageIDs. +func solidifyDirectChildren( + ctx context.Context, + traverserStorage dag.TraverserStorage, + markMessageAsSolidFunc MarkMessageAsSolidFunc, + messageIDs hornet.MessageIDs) error { + + childrenTraverser := dag.NewChildrenTraverser(traverserStorage) + + for _, messageID := range messageIDs { + + startMessageID := messageID + + if err := childrenTraverser.Traverse( + ctx, + messageID, + // traversal stops if no more messages pass the given condition + func(cachedMsgMeta *storage.CachedMetadata) (bool, error) { // meta +1 + defer cachedMsgMeta.Release(true) // meta -1 + + isSolid, newlySolid, err := checkMessageSolid(traverserStorage, cachedMsgMeta.Retain()) + if err != nil { + return false, err } - // check if current message is solid by checking the solidity of its parents - for _, parentMessageID := range cachedMsgMeta.Metadata().Parents() { - contains, err := traverserStorage.SolidEntryPointsContain(parentMessageID) - if err != nil { - return false, err - } - if contains { - // Ignore solid entry points (snapshot milestone included) - continue - } - - cachedMsgMetaParent, err := traverserStorage.CachedMessageMetadata(parentMessageID) // meta +1 - if err != nil { - return false, err - } - if cachedMsgMetaParent == nil { - // parent is missing => message is not solid - // do not walk the future cone if the current message is not solid - return false, nil - } - - if !cachedMsgMetaParent.Metadata().IsSolid() { - // parent is not solid => message is not solid - // do not walk the future cone if the current message is not solid - cachedMsgMetaParent.Release(true) // meta -1 - return false, nil - } - cachedMsgMetaParent.Release(true) // meta -1 + if !isSolid && bytes.Equal(startMessageID, cachedMsgMeta.Metadata().MessageID()) { + return false, fmt.Errorf("starting message for solidifyDirectChildren was not solid: %s", startMessageID.ToHex()) } - // mark current message as solid - markMessageAsSolidFunc(cachedMsgMeta.Retain()) // meta pass +1 + if newlySolid { + // mark current message as solid + markMessageAsSolidFunc(cachedMsgMeta.Retain()) // meta pass +1 + } - // walk the future cone since the message got newly solid - return true, nil + // only walk the future cone if the current message is solid and it was the startTx + return isSolid && bytes.Equal(startMessageID, cachedMsgMeta.Metadata().MessageID()), nil }, // consumer // no need to consume here @@ -136,5 +208,6 @@ func solidifyFutureCone( return err } } + return nil } diff --git a/pkg/tangle/stats.go b/pkg/tangle/stats.go index bd0a1b3df..5e88aa781 100644 --- a/pkg/tangle/stats.go +++ b/pkg/tangle/stats.go @@ -1,7 +1,7 @@ package tangle import ( - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/utils" ) func (t *Tangle) LastConfirmedMilestoneMetric() *ConfirmedMilestoneMetric { diff --git a/pkg/tangle/tangle.go b/pkg/tangle/tangle.go index 0f6caf526..6cca32b15 100644 --- a/pkg/tangle/tangle.go +++ b/pkg/tangle/tangle.go @@ -6,20 +6,20 @@ import ( "sync" "time" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/migrator" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/milestonemanager" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/daemon" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/hive.go/syncutils" "github.com/iotaledger/hive.go/timeutil" "github.com/iotaledger/hive.go/workerpool" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestonemanager" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/utils" ) type Tangle struct { @@ -193,6 +193,7 @@ func (t *Tangle) SetUpdateSyncedAtStartup(updateSyncedAtStartup bool) { func (t *Tangle) ResetMilestoneTimeoutTicker() { if t.milestoneTimeoutTicker != nil { t.milestoneTimeoutTicker.Shutdown() + t.milestoneTimeoutTicker.WaitForGracefulShutdown() } t.milestoneTimeoutTicker = timeutil.NewTicker(func() { diff --git a/pkg/tangle/tangle_processor.go b/pkg/tangle/tangle_processor.go index d467366af..481089b6a 100644 --- a/pkg/tangle/tangle_processor.go +++ b/pkg/tangle/tangle_processor.go @@ -5,16 +5,16 @@ import ( "fmt" "time" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/timeutil" "github.com/iotaledger/hive.go/workerpool" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/utils" ) func (t *Tangle) ConfigureTangleProcessor() { @@ -47,8 +47,9 @@ func (t *Tangle) RunTangleProcessor() { // set latest known milestone from database latestMilestoneFromDatabase := t.storage.SearchLatestMilestoneIndexInStore() - if latestMilestoneFromDatabase < t.syncManager.ConfirmedMilestoneIndex() { - latestMilestoneFromDatabase = t.syncManager.ConfirmedMilestoneIndex() + confirmedMilestoneIndex := t.syncManager.ConfirmedMilestoneIndex() + if latestMilestoneFromDatabase < confirmedMilestoneIndex { + latestMilestoneFromDatabase = confirmedMilestoneIndex } t.syncManager.SetLatestMilestoneIndex(latestMilestoneFromDatabase, t.updateSyncedAtStartup) @@ -108,7 +109,7 @@ func (t *Tangle) RunTangleProcessor() { } if err := t.daemon.BackgroundWorker("TangleProcessor[UpdateMetrics]", func(ctx context.Context) { - t.Events.MPSMetricsUpdated.Attach(onMPSMetricsUpdated) + t.Events.MPSMetricsUpdated.Hook(onMPSMetricsUpdated) t.startWaitGroup.Done() <-ctx.Done() t.Events.MPSMetricsUpdated.Detach(onMPSMetricsUpdated) @@ -118,8 +119,8 @@ func (t *Tangle) RunTangleProcessor() { if err := t.daemon.BackgroundWorker("TangleProcessor[ReceiveTx]", func(ctx context.Context) { t.LogInfo("Starting TangleProcessor[ReceiveTx] ... done") - t.messageProcessor.Events.MessageProcessed.Attach(onMsgProcessed) - t.Events.MessageSolid.Attach(onMessageSolid) + t.messageProcessor.Events.MessageProcessed.Hook(onMsgProcessed) + t.Events.MessageSolid.Hook(onMessageSolid) t.receiveMsgWorkerPool.Start() t.startWaitGroup.Done() <-ctx.Done() @@ -147,9 +148,9 @@ func (t *Tangle) RunTangleProcessor() { if err := t.daemon.BackgroundWorker("TangleProcessor[ProcessMilestone]", func(ctx context.Context) { t.LogInfo("Starting TangleProcessor[ProcessMilestone] ... done") t.processValidMilestoneWorkerPool.Start() - t.milestoneManager.Events.ReceivedValidMilestone.Attach(onReceivedValidMilestone) - t.Events.LatestMilestoneIndexChanged.Attach(onLatestMilestoneIndexChanged) - t.Events.MilestoneTimeout.Attach(onMilestoneTimeout) + t.milestoneManager.Events.ReceivedValidMilestone.Hook(onReceivedValidMilestone) + t.Events.LatestMilestoneIndexChanged.Hook(onLatestMilestoneIndexChanged) + t.Events.MilestoneTimeout.Hook(onMilestoneTimeout) t.startWaitGroup.Done() <-ctx.Done() t.LogInfo("Stopping TangleProcessor[ProcessMilestone] ...") @@ -189,8 +190,9 @@ func (t *Tangle) IsReceiveTxWorkerPoolBusy() bool { func (t *Tangle) processIncomingTx(incomingMsg *storage.Message, requests gossip.Requests, proto *gossip.Protocol) { - latestMilestoneIndex := t.syncManager.LatestMilestoneIndex() - isNodeSyncedWithinBelowMaxDepth := t.syncManager.IsNodeSyncedWithinBelowMaxDepth() + syncState := t.syncManager.SyncState() + latestMilestoneIndex := syncState.LatestMilestoneIndex + isNodeSyncedWithinBelowMaxDepth := syncState.NodeSyncedWithinBelowMaxDepth requested := requests.HasRequest() @@ -203,6 +205,7 @@ func (t *Tangle) processIncomingTx(incomingMsg *storage.Message, requests gossip if !alreadyAdded { t.serverMetrics.NewMessages.Inc() + // increase the new message metric for the peer that submitted the message if proto != nil { proto.Metrics.NewMessages.Inc() } @@ -216,20 +219,34 @@ func (t *Tangle) processIncomingTx(incomingMsg *storage.Message, requests gossip } } - confirmedMilestoneIndex := t.syncManager.ConfirmedMilestoneIndex() + confirmedMilestoneIndex := syncState.ConfirmedMilestoneIndex if latestMilestoneIndex == 0 { latestMilestoneIndex = confirmedMilestoneIndex } - if t.syncManager.IsNodeAlmostSynced() { - // try to solidify the message and its future cone - t.futureConeSolidifierWorkerPool.Submit(cachedMsg.CachedMetadata()) // meta pass +1 + if syncState.NodeAlmostSynced { + // we need to solidify the message before marking "messageProcessedSyncEvent" as done, + // otherwise clients might successfully attach messages to the node and reuse them as parents + // in further transactions, knowing that these messages are solid, but for the node itself they might not be solid yet, + // because the asynchronous futureConeSolidifierWorkerPool did not process the message yet. + if isSolid, newlySolid, err := checkMessageSolid(t.storage, cachedMsg.CachedMetadata()); err == nil { // meta pass +1 + if newlySolid { + t.markMessageAsSolid(cachedMsg.CachedMetadata()) // meta pass +1 + } + + if isSolid { + // try to solidify the future cone of the message + t.futureConeSolidifierWorkerPool.Submit(cachedMsg.CachedMetadata()) // meta pass +1 + } + } } t.Events.ReceivedNewMessage.Trigger(cachedMsg, latestMilestoneIndex, confirmedMilestoneIndex) } else { t.serverMetrics.KnownMessages.Inc() + + // increase the known message metric for the peer that submitted the message if proto != nil { proto.Metrics.KnownMessages.Inc() } @@ -251,7 +268,7 @@ func (t *Tangle) processIncomingTx(incomingMsg *storage.Message, requests gossip // we check whether the request is nil, so we only trigger the solidifier when // we actually handled a message coming from a request (as otherwise the solidifier // is triggered too often through messages received from normal gossip) - if requested && !t.syncManager.IsNodeSynced() && t.requestQueue.Empty() { + if requested && !syncState.NodeSynced && t.requestQueue.Empty() { // we trigger the milestone solidifier in order to solidify milestones // which should be solid given that the request queue is empty t.milestoneSolidifierWorkerPool.TrySubmit(milestone.Index(0), true) @@ -297,6 +314,7 @@ func (t *Tangle) PrintStatus() { queued, pending, processing := t.requestQueue.Size() avgLatency := t.requestQueue.AvgLatency() + syncState := t.syncManager.SyncState() println( fmt.Sprintf( "req(qu/pe/proc/lat): %05d/%05d/%05d/%04dms, "+ @@ -308,8 +326,8 @@ func (t *Tangle) PrintStatus() { queued, pending, processing, avgLatency, currentLowestMilestoneIndexInReqQ, t.receiveMsgWorkerPool.GetPendingQueueSize(), - t.syncManager.ConfirmedMilestoneIndex(), - t.syncManager.LatestMilestoneIndex(), + syncState.ConfirmedMilestoneIndex, + syncState.LatestMilestoneIndex, t.lastIncomingMPS, t.lastNewMPS, t.lastOutgoingMPS, diff --git a/pkg/testsuite/coordinator.go b/pkg/testsuite/coordinator.go index 3626449a5..07368665a 100644 --- a/pkg/testsuite/coordinator.go +++ b/pkg/testsuite/coordinator.go @@ -6,15 +6,15 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/keymanager" - "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/testsuite/utils" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/testsuite/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" "github.com/iotaledger/iota.go/v2/ed25519" ) diff --git a/pkg/testsuite/profile.go b/pkg/testsuite/profile.go index 70e9ca152..8bebfec32 100644 --- a/pkg/testsuite/profile.go +++ b/pkg/testsuite/profile.go @@ -1,6 +1,6 @@ package testsuite -import "github.com/gohornet/hornet/pkg/profile" +import "github.com/iotaledger/hornet/pkg/profile" var TestProfileCaches = &profile.Caches{ Addresses: &profile.CacheOpts{ diff --git a/pkg/testsuite/tangle.go b/pkg/testsuite/tangle.go index eea6bea73..1f808880f 100644 --- a/pkg/testsuite/tangle.go +++ b/pkg/testsuite/tangle.go @@ -7,14 +7,14 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/pkg/testsuite/utils" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/pkg/testsuite/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" ) // StoreMessage adds the message to the storage layer and solidifies it. diff --git a/pkg/testsuite/test_environment.go b/pkg/testsuite/test_environment.go index 3dff6f67e..3151bf215 100644 --- a/pkg/testsuite/test_environment.go +++ b/pkg/testsuite/test_environment.go @@ -2,7 +2,6 @@ package testsuite import ( "fmt" - "io/ioutil" "math/rand" "os" "testing" @@ -10,22 +9,22 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/keymanager" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/milestonemanager" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/utils" - "github.com/gohornet/hornet/pkg/whiteflag" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/kvstore/mapdb" "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestonemanager" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) @@ -122,7 +121,7 @@ func SetupTestEnvironment(testInterface testing.TB, genesisAddress *iotago.Ed255 cooPrvKey2, err := utils.ParseEd25519PrivateKeyFromString("0e324c6ff069f31890d496e9004636fd73d8e8b5bea08ec58a4178ca85462325f6752f5f46a53364e2ee9c4d662d762a81efd51010282a75cd6bd03f28ef349c") require.NoError(te.TestInterface, err) - tempDir, err := ioutil.TempDir("", fmt.Sprintf("test_%s", te.TestInterface.Name())) + tempDir, err := os.MkdirTemp("", fmt.Sprintf("test_%s", te.TestInterface.Name())) require.NoError(te.TestInterface, err) te.tempDir = tempDir diff --git a/pkg/testsuite/utils.go b/pkg/testsuite/utils.go index 90974f3cb..9352f36ea 100644 --- a/pkg/testsuite/utils.go +++ b/pkg/testsuite/utils.go @@ -7,11 +7,11 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/testsuite/utils" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/testsuite/utils" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/testsuite/utils/dot_file.go b/pkg/testsuite/utils/dot_file.go index 27571041c..698695f4f 100644 --- a/pkg/testsuite/utils/dot_file.go +++ b/pkg/testsuite/utils/dot_file.go @@ -7,8 +7,8 @@ import ( "runtime" "testing" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/storage" ) // ShortenedHash returns a shortened hex encoded hash for the given hash. diff --git a/pkg/testsuite/utils/hdwallet.go b/pkg/testsuite/utils/hdwallet.go index 9858ab0fe..1ac04ee86 100644 --- a/pkg/testsuite/utils/hdwallet.go +++ b/pkg/testsuite/utils/hdwallet.go @@ -1,13 +1,13 @@ package utils import ( - "bytes" "fmt" "github.com/wollac/iota-crypto-demo/pkg/bip32path" "github.com/wollac/iota-crypto-demo/pkg/slip10" + "github.com/wollac/iota-crypto-demo/pkg/slip10/eddsa" - "github.com/gohornet/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) @@ -41,8 +41,9 @@ func (hd *HDWallet) BookSpents(spentOutputs []*utxo.Output) { func (hd *HDWallet) BookSpent(spentOutput *utxo.Output) { newUtxo := make([]*utxo.Output, 0) for _, u := range hd.utxo { - if bytes.Equal(u.OutputID()[:], spentOutput.OutputID()[:]) { + if u.OutputID() == spentOutput.OutputID() { fmt.Printf("%s spent %s\n", hd.name, u.OutputID().ToHex()) + continue } newUtxo = append(newUtxo, u) @@ -59,6 +60,7 @@ func (hd *HDWallet) Balance() uint64 { for _, u := range hd.utxo { balance += u.Amount() } + return balance } @@ -77,19 +79,21 @@ func (hd *HDWallet) KeyPair() (ed25519.PrivateKey, ed25519.PublicKey) { panic(err) } - curve := slip10.Ed25519() + curve := eddsa.Ed25519() key, err := slip10.DeriveKeyFromPath(hd.seed, curve, path) if err != nil { panic(err) } - pubKey, privKey := slip10.Ed25519Key(key) + pubKey, privKey := key.Key.(eddsa.Seed).Ed25519Key() + return ed25519.PrivateKey(privKey), ed25519.PublicKey(pubKey) } func (hd *HDWallet) AddressSigner() iotago.AddressSigner { privKey, pubKey := hd.KeyPair() address := iotago.AddressFromEd25519PubKey(pubKey) + return iotago.NewInMemoryAddressSigner(iotago.NewAddressKeysForEd25519Address(&address, privKey)) } @@ -101,6 +105,7 @@ func (hd *HDWallet) Outputs() []*utxo.Output { func (hd *HDWallet) Address() *iotago.Ed25519Address { _, pubKey := hd.KeyPair() addr := iotago.AddressFromEd25519PubKey(pubKey) + return &addr } diff --git a/pkg/tipselect/test/urts_test.go b/pkg/tipselect/test/urts_test.go index 0be9aa923..84135d71e 100644 --- a/pkg/tipselect/test/urts_test.go +++ b/pkg/tipselect/test/urts_test.go @@ -8,13 +8,13 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/testsuite" - "github.com/gohornet/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/testsuite" + "github.com/iotaledger/hornet/pkg/tipselect" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/tipselect/urts.go b/pkg/tipselect/urts.go index 786ec81de..84bcc8d82 100644 --- a/pkg/tipselect/urts.go +++ b/pkg/tipselect/urts.go @@ -9,17 +9,17 @@ import ( "github.com/pkg/errors" "go.uber.org/atomic" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/serializer" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/utils" ) // Score defines the score of a tip. diff --git a/pkg/toolset/benchmark.go b/pkg/toolset/benchmark.go index a2d7074e0..1ea18be85 100644 --- a/pkg/toolset/benchmark.go +++ b/pkg/toolset/benchmark.go @@ -3,7 +3,6 @@ package toolset import ( "context" "fmt" - "io/ioutil" "math" "os" "runtime" @@ -14,9 +13,9 @@ import ( "github.com/dustin/go-humanize" flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/utils" ) func benchmarkIO(args []string) error { @@ -51,7 +50,7 @@ func benchmarkIO(args []string) error { return err } - tempDir, err := ioutil.TempDir("", "benchmarkIO") + tempDir, err := os.MkdirTemp("", "benchmarkIO") if err != nil { return fmt.Errorf("can't create temp dir: %w", err) } diff --git a/pkg/toolset/coordinator_fix_state.go b/pkg/toolset/coordinator_fix_state.go index 9b7d5df43..7dc837d1e 100644 --- a/pkg/toolset/coordinator_fix_state.go +++ b/pkg/toolset/coordinator_fix_state.go @@ -7,11 +7,11 @@ import ( flag "github.com/spf13/pflag" - coreDatabase "github.com/gohornet/hornet/core/database" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/utils" + coreDatabase "github.com/iotaledger/hornet/core/database" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/utils" ) func coordinatorFixStateFile(args []string) error { diff --git a/pkg/toolset/database.go b/pkg/toolset/database.go index 9f88e0c27..622e989ab 100644 --- a/pkg/toolset/database.go +++ b/pkg/toolset/database.go @@ -9,19 +9,19 @@ import ( "github.com/pkg/errors" - databasecore "github.com/gohornet/hornet/core/database" - "github.com/gohornet/hornet/core/protocfg" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/keymanager" - "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/milestonemanager" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/snapshot" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/serializer" + databasecore "github.com/iotaledger/hornet/core/database" + "github.com/iotaledger/hornet/core/protocfg" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestonemanager" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/utils" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/toolset/database_hash.go b/pkg/toolset/database_hash.go index 37e6791ae..edcb4d3fb 100644 --- a/pkg/toolset/database_hash.go +++ b/pkg/toolset/database_hash.go @@ -13,13 +13,14 @@ import ( "github.com/pkg/errors" flag "github.com/spf13/pflag" - coreDatabase "github.com/gohornet/hornet/core/database" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/snapshot" + coreDatabase "github.com/iotaledger/hornet/core/database" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/snapshot" + iotago "github.com/iotaledger/iota.go/v2" ) func calculateDatabaseLedgerHash(dbStorage *storage.Storage, outputJSON bool) error { @@ -101,8 +102,11 @@ func calculateDatabaseLedgerHash(dbStorage *storage.Storage, outputJSON bool) er } } + var ledgerTokenSupply uint64 // write all unspent outputs in lexicographical order for _, output := range outputs { + ledgerTokenSupply += output.Amount + outputBytes, err := output.MarshalBinary() if err != nil { return fmt.Errorf("unable to serialize output %s: %w", hex.EncodeToString(output.OutputID[:]), err) @@ -113,6 +117,10 @@ func calculateDatabaseLedgerHash(dbStorage *storage.Storage, outputJSON bool) er } } + if ledgerTokenSupply != iotago.TokenSupply { + return errors.Wrapf(ErrCritical, "ledger token supply does not match the total supply: %d vs %d", ledgerTokenSupply, iotago.TokenSupply) + } + // calculate sha256 hash of the current ledger state snapshotHashSumWithoutSEPs := lsHash.Sum(nil) @@ -155,6 +163,7 @@ func calculateDatabaseLedgerHash(dbStorage *storage.Storage, outputJSON bool) er SnapshotIndex milestone.Index `json:"snapshotIndex"` UTXOsCount int `json:"UTXOsCount"` SEPsCount int `json:"SEPsCount"` + LedgerTokenSupply uint64 `json:"ledgerTokenSupply"` LedgerStateHash string `json:"ledgerStateHash"` LedgerStateHashWithSEP string `json:"ledgerStateHashWithSEP"` }{ @@ -167,6 +176,7 @@ func calculateDatabaseLedgerHash(dbStorage *storage.Storage, outputJSON bool) er SnapshotIndex: snapshotInfo.SnapshotIndex, UTXOsCount: len(outputs), SEPsCount: len(solidEntryPoints), + LedgerTokenSupply: ledgerTokenSupply, LedgerStateHash: hex.EncodeToString(snapshotHashSumWithoutSEPs), LedgerStateHashWithSEP: hex.EncodeToString(snapshotHashSumWithSEPs), } @@ -184,6 +194,7 @@ func calculateDatabaseLedgerHash(dbStorage *storage.Storage, outputJSON bool) er - Snapshot index: %d - UTXOs count: %d - SEPs count: %d + - Ledger token supply: %d - Ledger state hash (w/o solid entry points): %s - Ledger state hash (with solid entry points): %s`+"\n\n", yesOrNo(!corrupted), @@ -200,6 +211,7 @@ func calculateDatabaseLedgerHash(dbStorage *storage.Storage, outputJSON bool) er snapshotInfo.SnapshotIndex, len(outputs), len(solidEntryPoints), + ledgerTokenSupply, hex.EncodeToString(snapshotHashSumWithoutSEPs), hex.EncodeToString(snapshotHashSumWithSEPs), ) diff --git a/pkg/toolset/database_health.go b/pkg/toolset/database_health.go index 0be400292..aceacc7c2 100644 --- a/pkg/toolset/database_health.go +++ b/pkg/toolset/database_health.go @@ -7,8 +7,8 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/storage" ) func databaseHealth(args []string) error { diff --git a/pkg/toolset/database_merge.go b/pkg/toolset/database_merge.go index ee9aa5258..c48837a51 100644 --- a/pkg/toolset/database_merge.go +++ b/pkg/toolset/database_merge.go @@ -13,16 +13,16 @@ import ( "github.com/iotaledger/hive.go/kvstore" iotago "github.com/iotaledger/iota.go/v2" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/milestonemanager" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/utils" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestonemanager" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" ) var ( diff --git a/pkg/toolset/database_migration.go b/pkg/toolset/database_migration.go index e850dda27..638685b40 100644 --- a/pkg/toolset/database_migration.go +++ b/pkg/toolset/database_migration.go @@ -9,9 +9,9 @@ import ( "github.com/dustin/go-humanize" flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/utils" ) func databaseMigration(args []string) error { diff --git a/pkg/toolset/database_snapshot.go b/pkg/toolset/database_snapshot.go index 6af36dc97..ea3db8bc3 100644 --- a/pkg/toolset/database_snapshot.go +++ b/pkg/toolset/database_snapshot.go @@ -7,10 +7,10 @@ import ( flag "github.com/spf13/pflag" - snapCore "github.com/gohornet/hornet/core/snapshot" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/snapshot" + snapCore "github.com/iotaledger/hornet/core/snapshot" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/snapshot" ) const ( diff --git a/pkg/toolset/database_split.go b/pkg/toolset/database_split.go index 38c00cd9d..efd73b667 100644 --- a/pkg/toolset/database_split.go +++ b/pkg/toolset/database_split.go @@ -6,7 +6,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/core/database" + "github.com/iotaledger/hornet/core/database" ) func databaseSplit(args []string) error { diff --git a/pkg/toolset/database_verify.go b/pkg/toolset/database_verify.go index 559e2bcf5..74da8d7a9 100644 --- a/pkg/toolset/database_verify.go +++ b/pkg/toolset/database_verify.go @@ -12,14 +12,14 @@ import ( iotago "github.com/iotaledger/iota.go/v2" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/milestonemanager" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/milestonemanager" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/whiteflag" ) func databaseVerify(args []string) error { diff --git a/pkg/toolset/ed25519.go b/pkg/toolset/ed25519.go index ba42c9497..2751b0e3f 100644 --- a/pkg/toolset/ed25519.go +++ b/pkg/toolset/ed25519.go @@ -10,8 +10,9 @@ import ( "github.com/wollac/iota-crypto-demo/pkg/bip32path" "github.com/wollac/iota-crypto-demo/pkg/bip39" "github.com/wollac/iota-crypto-demo/pkg/slip10" + "github.com/wollac/iota-crypto-demo/pkg/slip10/eddsa" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/utils" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) @@ -124,11 +125,12 @@ func generateEd25519Key(args []string) error { return err } - key, err := slip10.DeriveKeyFromPath(seed, slip10.Ed25519(), path) + key, err := slip10.DeriveKeyFromPath(seed, eddsa.Ed25519(), path) if err != nil { return err } - pubKey, prvKey := slip10.Ed25519Key(key) + + pubKey, prvKey := key.Key.(eddsa.Seed).Ed25519Key() return printEd25519Info(mnemonicSentence, path, ed25519.PrivateKey(prvKey), ed25519.PublicKey(pubKey), iotago.NetworkPrefix(*hrpFlag), *outputJSONFlag) } diff --git a/pkg/toolset/jwt.go b/pkg/toolset/jwt.go index bdfc0d882..47ccd757f 100644 --- a/pkg/toolset/jwt.go +++ b/pkg/toolset/jwt.go @@ -5,11 +5,11 @@ import ( "os" "path/filepath" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/peer" flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/jwt" - "github.com/gohornet/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/jwt" + "github.com/iotaledger/hornet/pkg/p2p" ) func generateJWTApiToken(args []string) error { diff --git a/pkg/toolset/p2p_identity_extract.go b/pkg/toolset/p2p_identity_extract.go index e710b2361..6c71499ce 100644 --- a/pkg/toolset/p2p_identity_extract.go +++ b/pkg/toolset/p2p_identity_extract.go @@ -7,7 +7,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/p2p" ) func extractP2PIdentity(args []string) error { diff --git a/pkg/toolset/p2p_identity_gen.go b/pkg/toolset/p2p_identity_gen.go index e0ee4f111..746e7c3a0 100644 --- a/pkg/toolset/p2p_identity_gen.go +++ b/pkg/toolset/p2p_identity_gen.go @@ -7,14 +7,14 @@ import ( "os" "path/filepath" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/peer" "github.com/mr-tron/base58" flag "github.com/spf13/pflag" - "github.com/libp2p/go-libp2p-core/crypto" + "github.com/libp2p/go-libp2p/core/crypto" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/utils" ) func generateP2PIdentity(args []string) error { diff --git a/pkg/toolset/pwd_hash.go b/pkg/toolset/pwd_hash.go index 706916660..9f816ab1d 100644 --- a/pkg/toolset/pwd_hash.go +++ b/pkg/toolset/pwd_hash.go @@ -12,8 +12,8 @@ import ( flag "github.com/spf13/pflag" "golang.org/x/term" - "github.com/gohornet/hornet/pkg/basicauth" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/basicauth" + "github.com/iotaledger/hornet/pkg/utils" ) func readPasswordFromEnv() ([]byte, error) { diff --git a/pkg/toolset/snap_gen.go b/pkg/toolset/snap_gen.go index 326d8a759..2076b20f1 100644 --- a/pkg/toolset/snap_gen.go +++ b/pkg/toolset/snap_gen.go @@ -8,10 +8,10 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/snapshot" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/toolset/snap_hash.go b/pkg/toolset/snap_hash.go index 3b12f08c6..816c91378 100644 --- a/pkg/toolset/snap_hash.go +++ b/pkg/toolset/snap_hash.go @@ -3,16 +3,15 @@ package toolset import ( "context" "fmt" - "io/ioutil" "os" "path/filepath" flag "github.com/spf13/pflag" - coreDatabase "github.com/gohornet/hornet/core/database" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/snapshot" + coreDatabase "github.com/iotaledger/hornet/core/database" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/snapshot" ) func snapshotHash(args []string) error { @@ -49,7 +48,7 @@ func snapshotHash(args []string) error { return err } - tempDir, err := ioutil.TempDir("", "snapHash") + tempDir, err := os.MkdirTemp("", "snapHash") if err != nil { return fmt.Errorf("can't create temp dir: %w", err) } diff --git a/pkg/toolset/snap_info.go b/pkg/toolset/snap_info.go index b83f47c08..92ae6e5bc 100644 --- a/pkg/toolset/snap_info.go +++ b/pkg/toolset/snap_info.go @@ -6,7 +6,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/snapshot" ) func snapshotInfo(args []string) error { diff --git a/pkg/toolset/snap_merge.go b/pkg/toolset/snap_merge.go index 6556d1be3..e195c6705 100644 --- a/pkg/toolset/snap_merge.go +++ b/pkg/toolset/snap_merge.go @@ -8,8 +8,8 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/snapshot" ) func snapshotMerge(args []string) error { diff --git a/pkg/toolset/toolset.go b/pkg/toolset/toolset.go index ef0536693..a6fdc8ae3 100644 --- a/pkg/toolset/toolset.go +++ b/pkg/toolset/toolset.go @@ -15,7 +15,7 @@ import ( "github.com/iotaledger/hive.go/configuration" - "github.com/gohornet/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/database" ) const ( diff --git a/pkg/utils/context_test.go b/pkg/utils/context_test.go index 803b33a4c..ed3f3504e 100644 --- a/pkg/utils/context_test.go +++ b/pkg/utils/context_test.go @@ -1,3 +1,4 @@ +//nolint:staticcheck // we can ignore these errors in the test cases package utils_test import ( @@ -7,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/gohornet/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/utils" ) func TestMergedContextCancel(t *testing.T) { diff --git a/pkg/utils/io.go b/pkg/utils/io.go index 6e37ca51c..2d364363c 100644 --- a/pkg/utils/io.go +++ b/pkg/utils/io.go @@ -5,7 +5,6 @@ import ( "encoding/json" "fmt" "io/fs" - "io/ioutil" "os" "path/filepath" @@ -47,7 +46,7 @@ func WriteToFile(filename string, data interface{}, perm os.FileMode) (err error // ReadJSONFromFile uses json.Unmarshal to decode data. Data must be a pointer to a fixed-size value or a slice // of fixed-size values. func ReadJSONFromFile(filename string, data interface{}) error { - jsonData, err := ioutil.ReadFile(filename) + jsonData, err := os.ReadFile(filename) if err != nil { return fmt.Errorf("unable to read JSON file %s: %w", filename, err) } @@ -91,7 +90,7 @@ func WriteJSONToFile(filename string, data interface{}, perm os.FileMode) (err e // ReadTOMLFromFile uses toml.Unmarshal to decode data. Data must be a pointer to a fixed-size value or a slice // of fixed-size values. func ReadTOMLFromFile(filename string, data interface{}) error { - tomlData, err := ioutil.ReadFile(filename) + tomlData, err := os.ReadFile(filename) if err != nil { return fmt.Errorf("unable to read TOML file %s: %w", filename, err) } diff --git a/pkg/whiteflag/confirmation.go b/pkg/whiteflag/confirmation.go index acf5fda0c..b52d9c1c6 100644 --- a/pkg/whiteflag/confirmation.go +++ b/pkg/whiteflag/confirmation.go @@ -6,12 +6,12 @@ import ( "fmt" "time" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/whiteflag/test/white_flag_merkle_test.go b/pkg/whiteflag/test/white_flag_merkle_test.go index 0fcb6ecd7..5faffce21 100644 --- a/pkg/whiteflag/test/white_flag_merkle_test.go +++ b/pkg/whiteflag/test/white_flag_merkle_test.go @@ -9,8 +9,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/whiteflag" // import implementation _ "golang.org/x/crypto/blake2b" diff --git a/pkg/whiteflag/test/white_flag_test.go b/pkg/whiteflag/test/white_flag_test.go index 461da789a..ccf0c636d 100644 --- a/pkg/whiteflag/test/white_flag_test.go +++ b/pkg/whiteflag/test/white_flag_test.go @@ -8,10 +8,10 @@ import ( "github.com/stretchr/testify/require" _ "golang.org/x/crypto/blake2b" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/testsuite" - "github.com/gohornet/hornet/pkg/testsuite/utils" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/testsuite" + "github.com/iotaledger/hornet/pkg/testsuite/utils" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/pkg/whiteflag/white_flag.go b/pkg/whiteflag/white_flag.go index 3ee4f037b..7443810dd 100644 --- a/pkg/whiteflag/white_flag.go +++ b/pkg/whiteflag/white_flag.go @@ -8,13 +8,13 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" // import implementation diff --git a/plugins/autopeering/params.go b/plugins/autopeering/params.go index 9765e0e10..a279fd4f7 100644 --- a/plugins/autopeering/params.go +++ b/plugins/autopeering/params.go @@ -5,7 +5,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/autopeering/plugin.go b/plugins/autopeering/plugin.go index 744269793..ddaf4d7ee 100644 --- a/plugins/autopeering/plugin.go +++ b/plugins/autopeering/plugin.go @@ -5,36 +5,37 @@ import ( "strings" "time" - "github.com/libp2p/go-libp2p-core/crypto" - libp2p "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/network" + libp2p "github.com/libp2p/go-libp2p/core/peer" "github.com/pkg/errors" "go.uber.org/dig" "github.com/iotaledger/hive.go/crypto/ed25519" - databaseCore "github.com/gohornet/hornet/core/database" - "github.com/gohornet/hornet/core/gossip" - "github.com/gohornet/hornet/core/pow" - "github.com/gohornet/hornet/core/snapshot" - "github.com/gohornet/hornet/core/tangle" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/p2p/autopeering" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/plugins/coordinator" - "github.com/gohornet/hornet/plugins/dashboard" - "github.com/gohornet/hornet/plugins/debug" - "github.com/gohornet/hornet/plugins/faucet" - "github.com/gohornet/hornet/plugins/migrator" - "github.com/gohornet/hornet/plugins/mqtt" - "github.com/gohornet/hornet/plugins/participation" - "github.com/gohornet/hornet/plugins/prometheus" - "github.com/gohornet/hornet/plugins/receipt" - restapiv1 "github.com/gohornet/hornet/plugins/restapi/v1" - "github.com/gohornet/hornet/plugins/spammer" - "github.com/gohornet/hornet/plugins/urts" - "github.com/gohornet/hornet/plugins/warpsync" + databaseCore "github.com/iotaledger/hornet/core/database" + "github.com/iotaledger/hornet/core/gossip" + "github.com/iotaledger/hornet/core/pow" + "github.com/iotaledger/hornet/core/snapshot" + "github.com/iotaledger/hornet/core/tangle" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/p2p/autopeering" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/plugins/coordinator" + "github.com/iotaledger/hornet/plugins/dashboard" + "github.com/iotaledger/hornet/plugins/debug" + "github.com/iotaledger/hornet/plugins/faucet" + "github.com/iotaledger/hornet/plugins/migrator" + "github.com/iotaledger/hornet/plugins/mqtt" + "github.com/iotaledger/hornet/plugins/participation" + "github.com/iotaledger/hornet/plugins/prometheus" + "github.com/iotaledger/hornet/plugins/receipt" + restapiv1 "github.com/iotaledger/hornet/plugins/restapi/v1" + "github.com/iotaledger/hornet/plugins/spammer" + "github.com/iotaledger/hornet/plugins/urts" + "github.com/iotaledger/hornet/plugins/warpsync" "github.com/iotaledger/hive.go/autopeering/discover" "github.com/iotaledger/hive.go/autopeering/peer/service" @@ -70,8 +71,9 @@ var ( onSelectionOutgoingPeering *events.Closure onSelectionIncomingPeering *events.Closure onSelectionDropped *events.Closure + onPeerConnected *events.Closure onPeerDisconnected *events.Closure - onAutopeerBecameKnown *events.Closure + onPeeringRelationUpdated *events.Closure ) type dependencies struct { @@ -260,29 +262,75 @@ func configureEvents() { Plugin.LogInfof("removed offline: %s / %s", ev.Peer.Address(), peerID.ShortString()) }) + onPeerConnected = events.NewClosure(func(p *p2p.Peer, conn network.Conn) { + + if deps.AutopeeringManager.Selection() == nil { + return + } + + id := autopeering.ConvertPeerIDToHiveIdentityOrLog(p, Plugin.LogWarnf) + if id == nil { + return + } + + // we block peers that are connected via manual peering in the autopeering module. + // this ensures that no additional connections are established via autopeering. + switch p.Relation { + case p2p.PeerRelationKnown, p2p.PeerRelationUnknown: + deps.AutopeeringManager.Selection().BlockNeighbor(id.ID()) + } + }) + onPeerDisconnected = events.NewClosure(func(peerOptErr *p2p.PeerOptError) { - if peerOptErr.Peer.Relation != p2p.PeerRelationAutopeered { + + if deps.AutopeeringManager.Selection() == nil { return } - if deps.AutopeeringManager.Selection() != nil { - if id := autopeering.ConvertPeerIDToHiveIdentityOrLog(peerOptErr.Peer, Plugin.LogWarnf); id != nil { - Plugin.LogInfof("removing: %s", peerOptErr.Peer.ID.ShortString()) - deps.AutopeeringManager.Selection().RemoveNeighbor(id.ID()) - } + id := autopeering.ConvertPeerIDToHiveIdentityOrLog(peerOptErr.Peer, Plugin.LogWarnf) + if id == nil { + return + } + + // if a peer is disconnected, we need to remove it from the autopeering blacklist + // so that former known and unknown peers can be autopeered. + deps.AutopeeringManager.Selection().UnblockNeighbor(id.ID()) + + if peerOptErr.Peer.Relation != p2p.PeerRelationAutopeered { + return } + + Plugin.LogDebugf("removing: %s", peerOptErr.Peer.ID.ShortString()) + deps.AutopeeringManager.Selection().RemoveNeighbor(id.ID()) }) - onAutopeerBecameKnown = events.NewClosure(func(p *p2p.Peer, oldRel p2p.PeerRelation) { - if oldRel != p2p.PeerRelationAutopeered { + onPeeringRelationUpdated = events.NewClosure(func(p *p2p.Peer, oldRel p2p.PeerRelation) { + + if deps.AutopeeringManager.Selection() == nil { return } - if deps.AutopeeringManager.Selection() != nil { - if id := autopeering.ConvertPeerIDToHiveIdentityOrLog(p, Plugin.LogWarnf); id != nil { - Plugin.LogInfof("removing %s from autopeering selection protocol", p.ID.ShortString()) - deps.AutopeeringManager.Selection().RemoveNeighbor(id.ID()) - } + + id := autopeering.ConvertPeerIDToHiveIdentityOrLog(p, Plugin.LogWarnf) + if id == nil { + return + } + + // we block peers that are connected via manual peering in the autopeering module. + // this ensures that no additional connections are established via autopeering. + // if a peer gets updated to autopeered, we need to unblock it. + switch p.Relation { + case p2p.PeerRelationKnown, p2p.PeerRelationUnknown: + deps.AutopeeringManager.Selection().BlockNeighbor(id.ID()) + case p2p.PeerRelationAutopeered: + deps.AutopeeringManager.Selection().UnblockNeighbor(id.ID()) + } + + if oldRel != p2p.PeerRelationAutopeered { + return } + + Plugin.LogInfof("removing %s from autopeering selection protocol", p.ID.ShortString()) + deps.AutopeeringManager.Selection().RemoveNeighbor(id.ID()) }) onSelectionSaltUpdated = events.NewClosure(func(ev *selection.SaltUpdatedEvent) { @@ -410,18 +458,19 @@ func clearFromAutopeeringSelector(ev *selection.PeeringEvent) { func attachEvents() { if deps.AutopeeringManager.Discovery() != nil { - deps.AutopeeringManager.Discovery().Events().PeerDiscovered.Attach(onDiscoveryPeerDiscovered) - deps.AutopeeringManager.Discovery().Events().PeerDeleted.Attach(onDiscoveryPeerDeleted) + deps.AutopeeringManager.Discovery().Events().PeerDiscovered.Hook(onDiscoveryPeerDiscovered) + deps.AutopeeringManager.Discovery().Events().PeerDeleted.Hook(onDiscoveryPeerDeleted) } if deps.AutopeeringManager.Selection() != nil { // notify the selection when a connection is closed or failed. - deps.PeeringManager.Events.Disconnected.Attach(onPeerDisconnected) - deps.PeeringManager.Events.RelationUpdated.Attach(onAutopeerBecameKnown) - deps.AutopeeringManager.Selection().Events().SaltUpdated.Attach(onSelectionSaltUpdated) - deps.AutopeeringManager.Selection().Events().OutgoingPeering.Attach(onSelectionOutgoingPeering) - deps.AutopeeringManager.Selection().Events().IncomingPeering.Attach(onSelectionIncomingPeering) - deps.AutopeeringManager.Selection().Events().Dropped.Attach(onSelectionDropped) + deps.PeeringManager.Events.Connected.Hook(onPeerConnected) + deps.PeeringManager.Events.Disconnected.Hook(onPeerDisconnected) + deps.PeeringManager.Events.RelationUpdated.Hook(onPeeringRelationUpdated) + deps.AutopeeringManager.Selection().Events().SaltUpdated.Hook(onSelectionSaltUpdated) + deps.AutopeeringManager.Selection().Events().OutgoingPeering.Hook(onSelectionOutgoingPeering) + deps.AutopeeringManager.Selection().Events().IncomingPeering.Hook(onSelectionIncomingPeering) + deps.AutopeeringManager.Selection().Events().Dropped.Hook(onSelectionDropped) } } @@ -433,8 +482,9 @@ func detachEvents() { } if deps.AutopeeringManager.Selection() != nil { + deps.PeeringManager.Events.Connected.Detach(onPeerConnected) deps.PeeringManager.Events.Disconnected.Detach(onPeerDisconnected) - deps.PeeringManager.Events.RelationUpdated.Detach(onAutopeerBecameKnown) + deps.PeeringManager.Events.RelationUpdated.Detach(onPeeringRelationUpdated) deps.AutopeeringManager.Selection().Events().SaltUpdated.Detach(onSelectionSaltUpdated) deps.AutopeeringManager.Selection().Events().OutgoingPeering.Detach(onSelectionOutgoingPeering) deps.AutopeeringManager.Selection().Events().IncomingPeering.Detach(onSelectionIncomingPeering) diff --git a/plugins/coordinator/params.go b/plugins/coordinator/params.go index 250f12a75..cde456854 100644 --- a/plugins/coordinator/params.go +++ b/plugins/coordinator/params.go @@ -6,7 +6,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/coordinator/plugin.go b/plugins/coordinator/plugin.go index b301f2b84..f2147a13a 100644 --- a/plugins/coordinator/plugin.go +++ b/plugins/coordinator/plugin.go @@ -8,27 +8,27 @@ import ( "go.uber.org/dig" "golang.org/x/net/context" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/keymanager" - "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/migrator" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/mselection" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/syncutils" "github.com/iotaledger/hive.go/timeutil" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/keymanager" + "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/mselection" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/pkg/utils" "github.com/iotaledger/iota.go/v2/ed25519" ) @@ -575,10 +575,10 @@ func configureEvents() { } func attachEvents() { - deps.Tangle.Events.MessageSolid.Attach(onMessageSolid) - deps.Tangle.Events.ConfirmedMilestoneIndexChanged.Attach(onConfirmedMilestoneIndexChanged) - deps.Coordinator.Events.IssuedCheckpointMessage.Attach(onIssuedCheckpoint) - deps.Coordinator.Events.IssuedMilestone.Attach(onIssuedMilestone) + deps.Tangle.Events.MessageSolid.Hook(onMessageSolid) + deps.Tangle.Events.ConfirmedMilestoneIndexChanged.Hook(onConfirmedMilestoneIndexChanged) + deps.Coordinator.Events.IssuedCheckpointMessage.Hook(onIssuedCheckpoint) + deps.Coordinator.Events.IssuedMilestone.Hook(onIssuedMilestone) } func detachEvents() { diff --git a/plugins/dashboard/dashboard-packr.go b/plugins/dashboard/dashboard-packr.go index f4035a3f3..6dca857cf 100644 --- a/plugins/dashboard/dashboard-packr.go +++ b/plugins/dashboard/dashboard-packr.go @@ -7,4 +7,4 @@ // and any other packr generated files. package dashboard -import _ "github.com/gohornet/hornet/plugins/dashboard/packrd" +import _ "github.com/iotaledger/hornet/plugins/dashboard/packrd" diff --git a/plugins/dashboard/dbsize.go b/plugins/dashboard/dbsize.go index db26ab5d9..b00ca63d3 100644 --- a/plugins/dashboard/dbsize.go +++ b/plugins/dashboard/dbsize.go @@ -5,10 +5,10 @@ import ( "encoding/json" "time" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/shutdown" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/timeutil" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/shutdown" ) var ( @@ -78,10 +78,10 @@ func runDatabaseSizeCollector() { }) if err := Plugin.Daemon().BackgroundWorker("Dashboard[DBSize]", func(ctx context.Context) { - deps.TangleDatabase.Events().DatabaseCleanup.Attach(onDatabaseCleanup) + deps.TangleDatabase.Events().DatabaseCleanup.Hook(onDatabaseCleanup) defer deps.TangleDatabase.Events().DatabaseCleanup.Detach(onDatabaseCleanup) - deps.UTXODatabase.Events().DatabaseCleanup.Attach(onDatabaseCleanup) + deps.UTXODatabase.Events().DatabaseCleanup.Hook(onDatabaseCleanup) defer deps.UTXODatabase.Events().DatabaseCleanup.Detach(onDatabaseCleanup) ticker := timeutil.NewTicker(func() { diff --git a/plugins/dashboard/livefeed.go b/plugins/dashboard/livefeed.go index bb3d286ff..b2328d3e4 100644 --- a/plugins/dashboard/livefeed.go +++ b/plugins/dashboard/livefeed.go @@ -3,9 +3,9 @@ package dashboard import ( "context" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/shutdown" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/shutdown" ) func runLiveFeed() { @@ -17,7 +17,7 @@ func runLiveFeed() { }) if err := Plugin.Daemon().BackgroundWorker("Dashboard[TxUpdater]", func(ctx context.Context) { - deps.Tangle.Events.LatestMilestoneIndexChanged.Attach(onLatestMilestoneIndexChanged) + deps.Tangle.Events.LatestMilestoneIndexChanged.Hook(onLatestMilestoneIndexChanged) defer deps.Tangle.Events.LatestMilestoneIndexChanged.Detach(onLatestMilestoneIndexChanged) <-ctx.Done() diff --git a/plugins/dashboard/params.go b/plugins/dashboard/params.go index 0868d2425..e7861b49e 100644 --- a/plugins/dashboard/params.go +++ b/plugins/dashboard/params.go @@ -6,7 +6,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/dashboard/plugin.go b/plugins/dashboard/plugin.go index d1b31d941..571e72810 100644 --- a/plugins/dashboard/plugin.go +++ b/plugins/dashboard/plugin.go @@ -11,31 +11,31 @@ import ( "github.com/gorilla/websocket" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/host" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/app" - "github.com/gohornet/hornet/pkg/basicauth" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/jwt" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/protocol/gossip" - restapipkg "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/pkg/tipselect" - "github.com/gohornet/hornet/plugins/restapi" - restapiv1 "github.com/gohornet/hornet/plugins/restapi/v1" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/websockethub" + "github.com/iotaledger/hornet/pkg/app" + "github.com/iotaledger/hornet/pkg/basicauth" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/jwt" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + restapipkg "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/plugins/restapi" + restapiv1 "github.com/iotaledger/hornet/plugins/restapi/v1" ) func init() { @@ -210,10 +210,10 @@ func run() { if err := Plugin.Daemon().BackgroundWorker("Dashboard[WSSend]", func(ctx context.Context) { go hub.Run(ctx) - deps.Tangle.Events.MPSMetricsUpdated.Attach(onMPSMetricsUpdated) - deps.Tangle.Events.ConfirmedMilestoneIndexChanged.Attach(onConfirmedMilestoneIndexChanged) - deps.Tangle.Events.LatestMilestoneIndexChanged.Attach(onLatestMilestoneIndexChanged) - deps.Tangle.Events.NewConfirmedMilestoneMetric.Attach(onNewConfirmedMilestoneMetric) + deps.Tangle.Events.MPSMetricsUpdated.Hook(onMPSMetricsUpdated) + deps.Tangle.Events.ConfirmedMilestoneIndexChanged.Hook(onConfirmedMilestoneIndexChanged) + deps.Tangle.Events.LatestMilestoneIndexChanged.Hook(onLatestMilestoneIndexChanged) + deps.Tangle.Events.NewConfirmedMilestoneMetric.Hook(onNewConfirmedMilestoneMetric) <-ctx.Done() Plugin.LogInfo("Stopping Dashboard[WSSend] ...") deps.Tangle.Events.MPSMetricsUpdated.Detach(onMPSMetricsUpdated) @@ -354,14 +354,16 @@ func peerMetrics() []*restapiv1.PeerResponse { } func currentSyncStatus() *SyncStatus { - return &SyncStatus{CMI: deps.SyncManager.ConfirmedMilestoneIndex(), LMI: deps.SyncManager.LatestMilestoneIndex()} + syncState := deps.SyncManager.SyncState() + return &SyncStatus{CMI: syncState.ConfirmedMilestoneIndex, LMI: syncState.LatestMilestoneIndex} } func currentPublicNodeStatus() *PublicNodeStatus { status := &PublicNodeStatus{} - status.IsHealthy = deps.Tangle.IsNodeHealthy() - status.IsSynced = deps.SyncManager.IsNodeAlmostSynced() + syncState := deps.SyncManager.SyncState() + status.IsHealthy = deps.Tangle.IsNodeHealthy(syncState) + status.IsSynced = syncState.NodeAlmostSynced snapshotInfo := deps.Storage.SnapshotInfo() if snapshotInfo != nil { diff --git a/plugins/dashboard/routes.go b/plugins/dashboard/routes.go index 5619efa42..443f1c978 100644 --- a/plugins/dashboard/routes.go +++ b/plugins/dashboard/routes.go @@ -14,7 +14,7 @@ import ( "github.com/pkg/errors" "golang.org/x/time/rate" - "github.com/gohornet/hornet/pkg/jwt" + "github.com/iotaledger/hornet/pkg/jwt" ) const ( diff --git a/plugins/dashboard/spammer.go b/plugins/dashboard/spammer.go index ed07eeebd..c4a88d210 100644 --- a/plugins/dashboard/spammer.go +++ b/plugins/dashboard/spammer.go @@ -3,10 +3,10 @@ package dashboard import ( "context" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/spammer" - spammerplugin "github.com/gohornet/hornet/plugins/spammer" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/spammer" + spammerplugin "github.com/iotaledger/hornet/plugins/spammer" ) func runSpammerMetricWorker() { @@ -20,8 +20,8 @@ func runSpammerMetricWorker() { }) if err := Plugin.Daemon().BackgroundWorker("Dashboard[SpammerMetricUpdater]", func(ctx context.Context) { - spammerplugin.Events.SpamPerformed.Attach(onSpamPerformed) - spammerplugin.Events.AvgSpamMetricsUpdated.Attach(onAvgSpamMetricsUpdated) + spammerplugin.Events.SpamPerformed.Hook(onSpamPerformed) + spammerplugin.Events.AvgSpamMetricsUpdated.Hook(onAvgSpamMetricsUpdated) <-ctx.Done() Plugin.LogInfo("Stopping Dashboard[SpammerMetricUpdater] ...") spammerplugin.Events.SpamPerformed.Detach(onSpamPerformed) diff --git a/plugins/dashboard/tipsel.go b/plugins/dashboard/tipsel.go index edf516150..201458d1f 100644 --- a/plugins/dashboard/tipsel.go +++ b/plugins/dashboard/tipsel.go @@ -3,10 +3,10 @@ package dashboard import ( "context" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tipselect" - "github.com/gohornet/hornet/plugins/urts" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/plugins/urts" ) func runTipSelMetricWorker() { @@ -21,7 +21,7 @@ func runTipSelMetricWorker() { }) if err := Plugin.Daemon().BackgroundWorker("Dashboard[TipSelMetricUpdater]", func(ctx context.Context) { - deps.TipSelector.Events.TipSelPerformed.Attach(onTipSelPerformed) + deps.TipSelector.Events.TipSelPerformed.Hook(onTipSelPerformed) <-ctx.Done() Plugin.LogInfo("Stopping Dashboard[TipSelMetricUpdater] ...") deps.TipSelector.Events.TipSelPerformed.Detach(onTipSelPerformed) diff --git a/plugins/dashboard/visualizer.go b/plugins/dashboard/visualizer.go index 2c8031a8b..4e74ee602 100644 --- a/plugins/dashboard/visualizer.go +++ b/plugins/dashboard/visualizer.go @@ -3,14 +3,14 @@ package dashboard import ( "context" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tipselect" - "github.com/gohornet/hornet/pkg/whiteflag" - coordinatorPlugin "github.com/gohornet/hornet/plugins/coordinator" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/pkg/whiteflag" + coordinatorPlugin "github.com/iotaledger/hornet/plugins/coordinator" ) const ( @@ -178,23 +178,23 @@ func runVisualizer() { }) if err := Plugin.Daemon().BackgroundWorker("Dashboard[Visualizer]", func(ctx context.Context) { - deps.Tangle.Events.ReceivedNewMessage.Attach(onReceivedNewMessage) + deps.Tangle.Events.ReceivedNewMessage.Hook(onReceivedNewMessage) defer deps.Tangle.Events.ReceivedNewMessage.Detach(onReceivedNewMessage) - deps.Tangle.Events.MessageSolid.Attach(onMessageSolid) + deps.Tangle.Events.MessageSolid.Hook(onMessageSolid) defer deps.Tangle.Events.MessageSolid.Detach(onMessageSolid) - deps.Tangle.Events.ReceivedNewMilestone.Attach(onReceivedNewMilestone) + deps.Tangle.Events.ReceivedNewMilestone.Hook(onReceivedNewMilestone) defer deps.Tangle.Events.ReceivedNewMilestone.Detach(onReceivedNewMilestone) if cooEvents := coordinatorPlugin.Events(); cooEvents != nil { - cooEvents.IssuedCheckpointMessage.Attach(onIssuedCheckpointMessage) + cooEvents.IssuedCheckpointMessage.Hook(onIssuedCheckpointMessage) defer cooEvents.IssuedCheckpointMessage.Detach(onIssuedCheckpointMessage) } - deps.Tangle.Events.MilestoneConfirmed.Attach(onMilestoneConfirmed) + deps.Tangle.Events.MilestoneConfirmed.Hook(onMilestoneConfirmed) defer deps.Tangle.Events.MilestoneConfirmed.Detach(onMilestoneConfirmed) if deps.TipSelector != nil { - deps.TipSelector.Events.TipAdded.Attach(onTipAdded) + deps.TipSelector.Events.TipAdded.Hook(onTipAdded) defer deps.TipSelector.Events.TipAdded.Detach(onTipAdded) - deps.TipSelector.Events.TipRemoved.Attach(onTipRemoved) + deps.TipSelector.Events.TipRemoved.Hook(onTipRemoved) defer deps.TipSelector.Events.TipRemoved.Detach(onTipRemoved) } diff --git a/plugins/dashboard/websocket.go b/plugins/dashboard/websocket.go index 99542a168..ab10b8db0 100644 --- a/plugins/dashboard/websocket.go +++ b/plugins/dashboard/websocket.go @@ -3,9 +3,9 @@ package dashboard import ( "github.com/labstack/echo/v4" - "github.com/gohornet/hornet/pkg/jwt" "github.com/iotaledger/hive.go/syncutils" "github.com/iotaledger/hive.go/websockethub" + "github.com/iotaledger/hornet/pkg/jwt" ) const ( diff --git a/plugins/debug/debug.go b/plugins/debug/debug.go index 26f864997..ff1f7fc32 100644 --- a/plugins/debug/debug.go +++ b/plugins/debug/debug.go @@ -10,16 +10,17 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/utils" - "github.com/gohornet/hornet/pkg/whiteflag" - v1 "github.com/gohornet/hornet/plugins/restapi/v1" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" + v1 "github.com/iotaledger/hornet/plugins/restapi/v1" iotago "github.com/iotaledger/iota.go/v2" ) @@ -354,34 +355,38 @@ func requests(_ echo.Context) (*requestsResponse, error) { queued, pending, processing := deps.RequestQueue.Requests() debugReqs := make([]*request, 0, len(queued)+len(pending)+len(processing)) - for _, req := range queued { - debugReqs = append(debugReqs, &request{ - MessageID: req.MessageID.ToHex(), - Type: "queued", - MessageExists: deps.Storage.ContainsMessage(req.MessageID), - EnqueueTimestamp: req.EnqueueTime.Format(time.RFC3339), - MilestoneIndex: req.MilestoneIndex, - }) - } + appendRequest := func(req *gossip.Request, stateString string) { + switch req.RequestType { + case gossip.RequestTypeMessageID: + messageExists := deps.Storage.ContainsMessage(req.MessageID) + + debugReqs = append(debugReqs, &request{ + Type: "message request", + EnqueueTimestamp: req.EnqueueTime.Format(time.RFC3339), + MilestoneIndex: req.MilestoneIndex, + State: stateString, + MessageID: req.MessageID.ToHex(), + MessageExists: &messageExists, + }) + case gossip.RequestTypeMilestoneIndex: + debugReqs = append(debugReqs, &request{ + Type: "milestone request", + EnqueueTimestamp: req.EnqueueTime.Format(time.RFC3339), + MilestoneIndex: req.MilestoneIndex, + State: stateString, + }) + } - for _, req := range pending { - debugReqs = append(debugReqs, &request{ - MessageID: req.MessageID.ToHex(), - Type: "pending", - MessageExists: deps.Storage.ContainsMessage(req.MessageID), - EnqueueTimestamp: req.EnqueueTime.Format(time.RFC3339), - MilestoneIndex: req.MilestoneIndex, - }) } - for _, req := range processing { - debugReqs = append(debugReqs, &request{ - MessageID: req.MessageID.ToHex(), - Type: "processing", - MessageExists: deps.Storage.ContainsMessage(req.MessageID), - EnqueueTimestamp: req.EnqueueTime.Format(time.RFC3339), - MilestoneIndex: req.MilestoneIndex, - }) + for _, request := range queued { + appendRequest(request, "queued") + } + for _, request := range pending { + appendRequest(request, "pending") + } + for _, request := range processing { + appendRequest(request, "processing") } return &requestsResponse{ diff --git a/plugins/debug/params.go b/plugins/debug/params.go index 62e04cd33..7352ca8ac 100644 --- a/plugins/debug/params.go +++ b/plugins/debug/params.go @@ -5,7 +5,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/debug/plugin.go b/plugins/debug/plugin.go index cc749b128..d0a19fae0 100644 --- a/plugins/debug/plugin.go +++ b/plugins/debug/plugin.go @@ -7,16 +7,16 @@ import ( "github.com/labstack/echo/v4" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/protocol/gossip" - restapipkg "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/plugins/restapi" - restapiv1 "github.com/gohornet/hornet/plugins/restapi/v1" "github.com/iotaledger/hive.go/configuration" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + restapipkg "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/plugins/restapi" + restapiv1 "github.com/iotaledger/hornet/plugins/restapi/v1" ) const ( @@ -83,13 +83,13 @@ var ( type dependencies struct { dig.In - Storage *storage.Storage - SyncManager *syncmanager.SyncManager - Tangle *tangle.Tangle - RequestQueue gossip.RequestQueue - UTXOManager *utxo.Manager - NodeConfig *configuration.Configuration `name:"nodeConfig"` - Echo *echo.Echo `optional:"true"` + Storage *storage.Storage + SyncManager *syncmanager.SyncManager + Tangle *tangle.Tangle + RequestQueue gossip.RequestQueue + UTXOManager *utxo.Manager + NodeConfig *configuration.Configuration `name:"nodeConfig"` + RestRouteManager *restapi.RestRouteManager `optional:"true"` } func configure() { @@ -101,7 +101,7 @@ func configure() { whiteflagParentsSolidTimeout = deps.NodeConfig.Duration(CfgDebugWhiteFlagParentsSolidTimeout) - routeGroup := deps.Echo.Group("/api/plugins/debug") + routeGroup := deps.RestRouteManager.AddRoute("plugins/debug") routeGroup.POST(RouteDebugComputeWhiteFlag, func(c echo.Context) error { resp, err := computeWhiteFlagMutations(c) diff --git a/plugins/debug/types.go b/plugins/debug/types.go index 87896093e..2146f8123 100644 --- a/plugins/debug/types.go +++ b/plugins/debug/types.go @@ -1,8 +1,8 @@ package debug import ( - "github.com/gohornet/hornet/pkg/model/milestone" - v1 "github.com/gohornet/hornet/plugins/restapi/v1" + "github.com/iotaledger/hornet/pkg/model/milestone" + v1 "github.com/iotaledger/hornet/plugins/restapi/v1" ) // computeWhiteFlagMutationsRequest defines the request for a POST debugComputeWhiteFlagMutations REST API call. @@ -53,16 +53,18 @@ type milestoneDiffResponse struct { // request defines an request response. type request struct { - // The hex encoded message ID of the message. - MessageID string `json:"messageId"` // The type of the request. Type string `json:"type"` - // Whether the message already exists in the storage layer. - MessageExists bool `json:"txExists"` // The time the request was enqueued. EnqueueTimestamp string `json:"enqueueTimestamp"` // The index of the milestone this request belongs to. MilestoneIndex milestone.Index `json:"milestoneIndex"` + // The state of the request. + State string `json:"state"` + // The hex encoded message ID of the message. + MessageID string `json:"messageId,omitempty"` + // Whether the message already exists in the storage layer. + MessageExists *bool `json:"messageExists,omitempty"` } // requestsResponse defines the response of a GET debug requests REST API call. diff --git a/plugins/faucet/faucet-packr.go b/plugins/faucet/faucet-packr.go index aa8f920f6..d2ca43e24 100644 --- a/plugins/faucet/faucet-packr.go +++ b/plugins/faucet/faucet-packr.go @@ -7,4 +7,4 @@ // and any other packr generated files. package faucet -import _ "github.com/gohornet/hornet/plugins/faucet/packrd" +import _ "github.com/iotaledger/hornet/plugins/faucet/packrd" diff --git a/plugins/faucet/faucet.go b/plugins/faucet/faucet.go index eaa37d35c..e5df0c326 100644 --- a/plugins/faucet/faucet.go +++ b/plugins/faucet/faucet.go @@ -4,8 +4,8 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/faucet" - "github.com/gohornet/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/model/faucet" + "github.com/iotaledger/hornet/pkg/restapi" ) func getFaucetInfo(_ echo.Context) (*faucet.FaucetInfoResponse, error) { diff --git a/plugins/faucet/params.go b/plugins/faucet/params.go index 6ae3f239c..d3d1556f0 100644 --- a/plugins/faucet/params.go +++ b/plugins/faucet/params.go @@ -5,7 +5,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/plugins/faucet/plugin.go b/plugins/faucet/plugin.go index ef148799c..5b3bfb202 100644 --- a/plugins/faucet/plugin.go +++ b/plugins/faucet/plugin.go @@ -14,23 +14,24 @@ import ( "go.uber.org/dig" "golang.org/x/time/rate" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/faucet" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/pkg/tipselect" - "github.com/gohornet/hornet/pkg/utils" - "github.com/gohornet/hornet/pkg/whiteflag" - restapiv1 "github.com/gohornet/hornet/plugins/restapi/v1" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/faucet" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + restapipkg "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/pkg/utils" + "github.com/iotaledger/hornet/pkg/whiteflag" + "github.com/iotaledger/hornet/plugins/restapi" + restapiv1 "github.com/iotaledger/hornet/plugins/restapi/v1" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" ) @@ -72,10 +73,10 @@ type dependencies struct { dig.In NodeConfig *configuration.Configuration `name:"nodeConfig"` RestAPIBindAddress string `name:"restAPIBindAddress"` - FaucetAllowedAPIRoute restapi.AllowedRoute `name:"faucetAllowedAPIRoute"` + FaucetAllowedAPIRoute restapipkg.AllowedRoute `name:"faucetAllowedAPIRoute"` Faucet *faucet.Faucet Tangle *tangle.Tangle - Echo *echo.Echo + RestRouteManager *restapi.RestRouteManager `optional:"true"` ShutdownHandler *shutdown.ShutdownHandler } @@ -147,7 +148,7 @@ func provide(c *dig.Container) { func configure() { restapiv1.AddFeature(Plugin.Name) - routeGroup := deps.Echo.Group("/api/plugins/faucet") + routeGroup := deps.RestRouteManager.AddRoute("plugins/faucet") allowedRoutes := map[string][]string{ http.MethodGet: { @@ -200,7 +201,7 @@ func configure() { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.POST(RouteFaucetEnqueue, func(c echo.Context) error { @@ -213,7 +214,7 @@ func configure() { var e *echo.HTTPError if errors.As(err, &e) { statusCode = e.Code - if errors.Is(err, restapi.ErrInvalidParameter) { + if errors.Is(err, restapipkg.ErrInvalidParameter) { message = strings.Replace(err.Error(), ": "+errors.Unwrap(err).Error(), "", 1) } else { message = err.Error() @@ -223,10 +224,10 @@ func configure() { message = fmt.Sprintf("internal server error. error: %s", err.Error()) } - return c.JSON(statusCode, restapi.HTTPErrorResponseEnvelope{Error: restapi.HTTPErrorResponse{Code: strconv.Itoa(statusCode), Message: message}}) + return c.JSON(statusCode, restapipkg.HTTPErrorResponseEnvelope{Error: restapipkg.HTTPErrorResponse{Code: strconv.Itoa(statusCode), Message: message}}) } - return restapi.JSONResponse(c, http.StatusAccepted, resp) + return restapipkg.JSONResponse(c, http.StatusAccepted, resp) }) configureEvents() @@ -274,7 +275,7 @@ func configureEvents() { } func attachEvents() { - deps.Tangle.Events.MilestoneConfirmed.Attach(onMilestoneConfirmed) + deps.Tangle.Events.MilestoneConfirmed.Hook(onMilestoneConfirmed) } func detachEvents() { diff --git a/plugins/migrator/params.go b/plugins/migrator/params.go index 2b06c36c5..b0dbc668c 100644 --- a/plugins/migrator/params.go +++ b/plugins/migrator/params.go @@ -5,9 +5,9 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/migrator" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/migrator/plugin.go b/plugins/migrator/plugin.go index 93b09f595..cd2209fe5 100644 --- a/plugins/migrator/plugin.go +++ b/plugins/migrator/plugin.go @@ -11,12 +11,12 @@ import ( "github.com/iotaledger/hive.go/timeutil" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/migrator" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/shutdown" "github.com/iotaledger/hive.go/configuration" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/shutdown" ) const ( diff --git a/plugins/mqtt/params.go b/plugins/mqtt/params.go index 9f884116b..1311d9e04 100644 --- a/plugins/mqtt/params.go +++ b/plugins/mqtt/params.go @@ -3,7 +3,7 @@ package mqtt import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/mqtt/plugin.go b/plugins/mqtt/plugin.go index 21089c082..d83212477 100644 --- a/plugins/mqtt/plugin.go +++ b/plugins/mqtt/plugin.go @@ -9,18 +9,18 @@ import ( "github.com/labstack/echo/v4/middleware" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - mqttpkg "github.com/gohornet/hornet/pkg/mqtt" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/plugins/restapi" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/workerpool" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + mqttpkg "github.com/iotaledger/hornet/pkg/mqtt" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/plugins/restapi" iotago "github.com/iotaledger/iota.go/v2" ) @@ -331,17 +331,17 @@ func run() { if err := Plugin.Daemon().BackgroundWorker("MQTT Events", func(ctx context.Context) { Plugin.LogInfo("Starting MQTT Events ... done") - deps.Tangle.Events.LatestMilestoneChanged.Attach(onLatestMilestoneChanged) - deps.Tangle.Events.ConfirmedMilestoneChanged.Attach(onConfirmedMilestoneChanged) + deps.Tangle.Events.LatestMilestoneChanged.Hook(onLatestMilestoneChanged) + deps.Tangle.Events.ConfirmedMilestoneChanged.Hook(onConfirmedMilestoneChanged) - deps.Tangle.Events.ReceivedNewMessage.Attach(onReceivedNewMessage) - deps.Tangle.Events.MessageSolid.Attach(onMessageSolid) - deps.Tangle.Events.MessageReferenced.Attach(onMessageReferenced) + deps.Tangle.Events.ReceivedNewMessage.Hook(onReceivedNewMessage) + deps.Tangle.Events.MessageSolid.Hook(onMessageSolid) + deps.Tangle.Events.MessageReferenced.Hook(onMessageReferenced) - deps.Tangle.Events.NewUTXOOutput.Attach(onUTXOOutput) - deps.Tangle.Events.NewUTXOSpent.Attach(onUTXOSpent) + deps.Tangle.Events.NewUTXOOutput.Hook(onUTXOOutput) + deps.Tangle.Events.NewUTXOSpent.Hook(onUTXOSpent) - deps.Tangle.Events.NewReceipt.Attach(onReceipt) + deps.Tangle.Events.NewReceipt.Hook(onReceipt) messagesWorkerPool.Start() newLatestMilestoneWorkerPool.Start() diff --git a/plugins/mqtt/types.go b/plugins/mqtt/types.go index d8541661b..c780e4c0f 100644 --- a/plugins/mqtt/types.go +++ b/plugins/mqtt/types.go @@ -3,8 +3,8 @@ package mqtt import ( "encoding/json" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" ) // milestonePayload defines the payload of the milestone latest and confirmed topics diff --git a/plugins/mqtt/utils.go b/plugins/mqtt/utils.go index 833091718..b7605320c 100644 --- a/plugins/mqtt/utils.go +++ b/plugins/mqtt/utils.go @@ -8,13 +8,13 @@ import ( "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/plugins/participation/participation.go b/plugins/participation/participation.go index 2f56c0dcb..210deba58 100644 --- a/plugins/participation/participation.go +++ b/plugins/participation/participation.go @@ -12,10 +12,10 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/participation" - "github.com/gohornet/hornet/pkg/restapi" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/participation" + "github.com/iotaledger/hornet/pkg/restapi" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/plugins/participation/plugin.go b/plugins/participation/plugin.go index 21cacbc44..03affca93 100644 --- a/plugins/participation/plugin.go +++ b/plugins/participation/plugin.go @@ -9,19 +9,20 @@ import ( "github.com/labstack/echo/v4" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/participation" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tangle" - restapiv1 "github.com/gohornet/hornet/plugins/restapi/v1" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/participation" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/node" + restapipkg "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/plugins/restapi" + restapiv1 "github.com/iotaledger/hornet/plugins/restapi/v1" iotago "github.com/iotaledger/iota.go/v2" ) @@ -46,19 +47,19 @@ const ( // RouteOutputStatus is the route to get the vote status for a given outputID. // GET returns the messageID the participation was included, the starting and ending milestone index this participation was tracked. - RouteOutputStatus = "/outputs/:" + restapi.ParameterOutputID + RouteOutputStatus = "/outputs/:" + restapipkg.ParameterOutputID // RouteAddressBech32Status is the route to get the staking rewards for the given bech32 address. - RouteAddressBech32Status = "/addresses/:" + restapi.ParameterAddress + RouteAddressBech32Status = "/addresses/:" + restapipkg.ParameterAddress // RouteAddressBech32Outputs is the route to get the outputs for the given bech32 address. - RouteAddressBech32Outputs = "/addresses/:" + restapi.ParameterAddress + "/outputs" + RouteAddressBech32Outputs = "/addresses/:" + restapipkg.ParameterAddress + "/outputs" // RouteAddressEd25519Status is the route to get the staking rewards for the given ed25519 address. - RouteAddressEd25519Status = "/addresses/ed25519/:" + restapi.ParameterAddress + RouteAddressEd25519Status = "/addresses/ed25519/:" + restapipkg.ParameterAddress // RouteAddressEd25519Outputs is the route to get the outputs for the given ed25519 address. - RouteAddressEd25519Outputs = "/addresses/ed25519/:" + restapi.ParameterAddress + "/outputs" + RouteAddressEd25519Outputs = "/addresses/ed25519/:" + restapipkg.ParameterAddress + "/outputs" // RouteAdminCreateEvent is the route the node operator can use to add events. // POST creates a new event to track @@ -108,8 +109,8 @@ type dependencies struct { UTXOManager *utxo.Manager SyncManager *syncmanager.SyncManager Tangle *tangle.Tangle - Echo *echo.Echo - Bech32HRP iotago.NetworkPrefix `name:"bech32HRP"` + RestRouteManager *restapi.RestRouteManager `optional:"true"` + Bech32HRP iotago.NetworkPrefix `name:"bech32HRP"` ShutdownHandler *shutdown.ShutdownHandler } @@ -148,7 +149,7 @@ func provide(c *dig.Container) { func configure() { restapiv1.AddFeature(Plugin.Name) - routeGroup := deps.Echo.Group("/api/plugins/participation") + routeGroup := deps.RestRouteManager.AddRoute("plugins/participation") routeGroup.GET(RouteParticipationEvents, func(c echo.Context) error { resp, err := getEvents(c) @@ -156,7 +157,7 @@ func configure() { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.POST(RouteAdminCreateEvent, func(c echo.Context) error { @@ -167,7 +168,7 @@ func configure() { } c.Response().Header().Set(echo.HeaderLocation, resp.EventID) - return restapi.JSONResponse(c, http.StatusCreated, resp) + return restapipkg.JSONResponse(c, http.StatusCreated, resp) }) routeGroup.GET(RouteParticipationEvent, func(c echo.Context) error { @@ -176,7 +177,7 @@ func configure() { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.DELETE(RouteAdminDeleteEvent, func(c echo.Context) error { @@ -192,7 +193,7 @@ func configure() { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.GET(RouteOutputStatus, func(c echo.Context) error { @@ -200,7 +201,7 @@ func configure() { if err != nil { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.GET(RouteAddressBech32Status, func(c echo.Context) error { @@ -208,7 +209,7 @@ func configure() { if err != nil { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.GET(RouteAddressBech32Outputs, func(c echo.Context) error { @@ -216,7 +217,7 @@ func configure() { if err != nil { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.GET(RouteAddressEd25519Status, func(c echo.Context) error { @@ -224,7 +225,7 @@ func configure() { if err != nil { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.GET(RouteAddressEd25519Outputs, func(c echo.Context) error { @@ -232,7 +233,7 @@ func configure() { if err != nil { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.GET(RouteAdminActiveParticipations, func(c echo.Context) error { @@ -240,7 +241,7 @@ func configure() { if err != nil { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.GET(RouteAdminPastParticipations, func(c echo.Context) error { @@ -248,7 +249,7 @@ func configure() { if err != nil { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.GET(RouteAdminRewards, func(c echo.Context) error { @@ -256,7 +257,7 @@ func configure() { if err != nil { return err } - return restapi.JSONResponse(c, http.StatusOK, resp) + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) if err := Plugin.Node.Daemon().BackgroundWorker("Close Participation database", func(ctx context.Context) { @@ -297,7 +298,7 @@ func configureEvents() { } func attachEvents() { - deps.Tangle.Events.LedgerUpdated.Attach(onLedgerUpdated) + deps.Tangle.Events.LedgerUpdated.Hook(onLedgerUpdated) } func detachEvents() { diff --git a/plugins/participation/types.go b/plugins/participation/types.go index ef53d48ab..3c9753d71 100644 --- a/plugins/participation/types.go +++ b/plugins/participation/types.go @@ -1,6 +1,6 @@ package participation -import "github.com/gohornet/hornet/pkg/model/milestone" +import "github.com/iotaledger/hornet/pkg/model/milestone" // EventsResponse defines the response of a GET RouteParticipationEvents REST API call. type EventsResponse struct { diff --git a/plugins/profiling/params.go b/plugins/profiling/params.go index e31a241ea..61fc01b63 100644 --- a/plugins/profiling/params.go +++ b/plugins/profiling/params.go @@ -3,7 +3,7 @@ package profiling import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/profiling/plugin.go b/plugins/profiling/plugin.go index b5dfdfa48..a908c1b2c 100644 --- a/plugins/profiling/plugin.go +++ b/plugins/profiling/plugin.go @@ -9,8 +9,8 @@ import ( "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/node" "github.com/iotaledger/hive.go/configuration" + "github.com/iotaledger/hornet/pkg/node" ) func init() { diff --git a/plugins/prometheus/coordinator.go b/plugins/prometheus/coordinator.go index 813bd5471..19c3b6356 100644 --- a/plugins/prometheus/coordinator.go +++ b/plugins/prometheus/coordinator.go @@ -3,7 +3,7 @@ package prometheus import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gohornet/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/model/coordinator" "github.com/iotaledger/hive.go/events" ) @@ -71,7 +71,7 @@ func configureCoordinator() { registry.MustRegister(coordinatorQuorumNodesErrorCounters) registry.MustRegister(coordinatorSoftErrEncountered) - deps.Coordinator.Events.QuorumFinished.Attach(events.NewClosure(func(result *coordinator.QuorumFinishedResult) { + deps.Coordinator.Events.QuorumFinished.Hook(events.NewClosure(func(result *coordinator.QuorumFinishedResult) { coordinatorQuorumResponseTime.Observe(result.Duration.Seconds()) if result.Err != nil { @@ -99,7 +99,7 @@ func configureCoordinator() { } })) - deps.Coordinator.Events.SoftError.Attach(events.NewClosure(func(_ error) { + deps.Coordinator.Events.SoftError.Hook(events.NewClosure(func(_ error) { coordinatorSoftErrEncountered.Inc() })) } diff --git a/plugins/prometheus/database.go b/plugins/prometheus/database.go index d733d6e59..937e23975 100644 --- a/plugins/prometheus/database.go +++ b/plugins/prometheus/database.go @@ -5,10 +5,10 @@ import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/storage" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/storage" ) type storageMetrics struct { @@ -44,7 +44,7 @@ func configureStorage(storage *storage.Storage, metrics *metrics.StorageMetrics) }, ) - storage.Events.PruningStateChanged.Attach(events.NewClosure(func(running bool) { + storage.Events.PruningStateChanged.Hook(events.NewClosure(func(running bool) { if running { m.pruningCount.Inc() } @@ -95,7 +95,7 @@ func configureDatabase(name string, db *database.Database) { }, ) - db.Events().DatabaseCompaction.Attach(events.NewClosure(func(running bool) { + db.Events().DatabaseCompaction.Hook(events.NewClosure(func(running bool) { if running { m.compactionCount.Inc() } diff --git a/plugins/prometheus/debug.go b/plugins/prometheus/debug.go index 5e227704a..e1e411e5b 100644 --- a/plugins/prometheus/debug.go +++ b/plugins/prometheus/debug.go @@ -3,10 +3,10 @@ package prometheus import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gohornet/hornet/pkg/snapshot" - "github.com/gohornet/hornet/pkg/whiteflag" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/syncutils" + "github.com/iotaledger/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/whiteflag" ) var ( @@ -86,21 +86,21 @@ func configureDebug() { []string{"type"}, ) - deps.SnapshotManager.Events.SnapshotMetricsUpdated.Attach(events.NewClosure(func(metrics *snapshot.SnapshotMetrics) { + deps.SnapshotManager.Events.SnapshotMetricsUpdated.Hook(events.NewClosure(func(metrics *snapshot.SnapshotMetrics) { snapshotTotalDuration.Observe(metrics.DurationTotal.Seconds()) metricsLock.Lock() defer metricsLock.Unlock() lastSnapshotMetrics = metrics })) - deps.SnapshotManager.Events.PruningMetricsUpdated.Attach(events.NewClosure(func(metrics *snapshot.PruningMetrics) { + deps.SnapshotManager.Events.PruningMetricsUpdated.Hook(events.NewClosure(func(metrics *snapshot.PruningMetrics) { databasePruningTotalDuration.Observe(metrics.DurationTotal.Seconds()) metricsLock.Lock() defer metricsLock.Unlock() lastDatabasePruningMetrics = metrics })) - deps.Tangle.Events.ConfirmationMetricsUpdated.Attach(events.NewClosure(func(metrics *whiteflag.ConfirmationMetrics) { + deps.Tangle.Events.ConfirmationMetricsUpdated.Hook(events.NewClosure(func(metrics *whiteflag.ConfirmationMetrics) { milestoneConfirmationTotalDuration.Observe(metrics.DurationTotal.Seconds()) metricsLock.Lock() defer metricsLock.Unlock() diff --git a/plugins/prometheus/migrator.go b/plugins/prometheus/migrator.go index cb01ad6d9..b26d11c1e 100644 --- a/plugins/prometheus/migrator.go +++ b/plugins/prometheus/migrator.go @@ -25,7 +25,7 @@ func configureMigrator() { registry.MustRegister(migratorSoftErrEncountered) - deps.MigratorService.Events.SoftError.Attach(events.NewClosure(func(_ error) { + deps.MigratorService.Events.SoftError.Hook(events.NewClosure(func(_ error) { migratorSoftErrEncountered.Inc() })) } @@ -52,7 +52,7 @@ func configureReceipts() { registry.MustRegister(receiptCount) registry.MustRegister(receiptMigrationEntriesApplied) - deps.Tangle.Events.NewReceipt.Attach(events.NewClosure(func(r *iotago.Receipt) { + deps.Tangle.Events.NewReceipt.Hook(events.NewClosure(func(r *iotago.Receipt) { receiptCount.Inc() receiptMigrationEntriesApplied.Add(float64(len(r.Funds))) })) diff --git a/plugins/prometheus/node.go b/plugins/prometheus/node.go index e8913c5ac..9af92c1ec 100644 --- a/plugins/prometheus/node.go +++ b/plugins/prometheus/node.go @@ -108,8 +108,13 @@ func configureNode() { } func collectInfo() { + + syncState := deps.SyncManager.SyncState() + milestones.WithLabelValues("latest").Set(float64(syncState.LatestMilestoneIndex)) + milestones.WithLabelValues("confirmed").Set(float64(syncState.ConfirmedMilestoneIndex)) + health.Set(0) - if deps.Tangle.IsNodeHealthy() { + if deps.Tangle.IsNodeHealthy(syncState) { health.Set(1) } @@ -124,9 +129,6 @@ func collectInfo() { referencedRate.Set(lastConfirmedMilestoneMetric.ReferencedRate) } - milestones.WithLabelValues("latest").Set(float64(deps.SyncManager.LatestMilestoneIndex())) - milestones.WithLabelValues("confirmed").Set(float64(deps.SyncManager.ConfirmedMilestoneIndex())) - snapshotInfo := deps.Storage.SnapshotInfo() milestones.WithLabelValues("snapshot").Set(0) milestones.WithLabelValues("pruning").Set(0) diff --git a/plugins/prometheus/params.go b/plugins/prometheus/params.go index 081493c93..a3bf65683 100644 --- a/plugins/prometheus/params.go +++ b/plugins/prometheus/params.go @@ -3,7 +3,7 @@ package prometheus import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/prometheus/plugin.go b/plugins/prometheus/plugin.go index 554feb598..0ac9b6b4b 100644 --- a/plugins/prometheus/plugin.go +++ b/plugins/prometheus/plugin.go @@ -3,11 +3,11 @@ package prometheus import ( "context" "encoding/json" - "io/ioutil" "net/http" + "os" "time" - coreDatabase "github.com/gohornet/hornet/core/database" + coreDatabase "github.com/iotaledger/hornet/core/database" "github.com/pkg/errors" @@ -18,22 +18,22 @@ import ( "github.com/prometheus/client_golang/prometheus/promhttp" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/app" - "github.com/gohornet/hornet/pkg/database" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/coordinator" - "github.com/gohornet/hornet/pkg/model/migrator" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/mqtt" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/snapshot" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/pkg/tipselect" "github.com/iotaledger/hive.go/configuration" + "github.com/iotaledger/hornet/pkg/app" + "github.com/iotaledger/hornet/pkg/database" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/coordinator" + "github.com/iotaledger/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/mqtt" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/pkg/tipselect" ) // RouteMetrics is the route for getting the prometheus metrics. @@ -86,6 +86,7 @@ type dependencies struct { SnapshotManager *snapshot.SnapshotManager Coordinator *coordinator.Coordinator `optional:"true"` MQTTBroker *mqtt.Broker `optional:"true"` + Echo *echo.Echo `optional:"true"` } func configure() { @@ -154,7 +155,7 @@ func writeFileServiceDiscoveryFile() { } // this truncates an existing file - if err := ioutil.WriteFile(path, j, 0666); err != nil { + if err := os.WriteFile(path, j, 0666); err != nil { Plugin.LogPanic("unable to write file service discovery file:", err) } diff --git a/plugins/prometheus/rest_api.go b/plugins/prometheus/rest_api.go index 87c133395..d25481888 100644 --- a/plugins/prometheus/rest_api.go +++ b/plugins/prometheus/rest_api.go @@ -3,6 +3,7 @@ package prometheus import ( "time" + echoprometheus "github.com/labstack/echo-contrib/prometheus" "github.com/prometheus/client_golang/prometheus" "github.com/iotaledger/hive.go/events" @@ -81,12 +82,20 @@ func configureRestAPI() { registry.MustRegister(restapiPoWMessageSizes) registry.MustRegister(restapiPoWDurations) - deps.RestAPIMetrics.Events.PoWCompleted.Attach(events.NewClosure(func(messageSize int, duration time.Duration) { + deps.RestAPIMetrics.Events.PoWCompleted.Hook(events.NewClosure(func(messageSize int, duration time.Duration) { restapiPoWMessageSizes.Observe(float64(messageSize)) restapiPoWDurations.Observe(duration.Seconds()) })) addCollect(collectRestAPI) + + if deps.Echo != nil { + p := echoprometheus.NewPrometheus("iota_restapi", nil) + for _, m := range p.MetricsList { + registry.MustRegister(m.MetricCollector) + } + deps.Echo.Use(p.HandlerFunc) + } } func collectRestAPI() { diff --git a/plugins/receipt/param.go b/plugins/receipt/param.go index 4a960d02c..f5135a665 100644 --- a/plugins/receipt/param.go +++ b/plugins/receipt/param.go @@ -5,7 +5,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/receipt/plugin.go b/plugins/receipt/plugin.go index 4a91f03b6..6724b4251 100644 --- a/plugins/receipt/plugin.go +++ b/plugins/receipt/plugin.go @@ -5,12 +5,12 @@ import ( "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/model/migrator" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/tangle" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/model/migrator" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/tangle" "github.com/iotaledger/iota.go/api" iotago "github.com/iotaledger/iota.go/v2" ) @@ -89,7 +89,7 @@ func provide(c *dig.Container) { func configure() { - deps.Tangle.Events.NewReceipt.Attach(events.NewClosure(func(r *iotago.Receipt) { + deps.Tangle.Events.NewReceipt.Hook(events.NewClosure(func(r *iotago.Receipt) { if deps.ReceiptService.ValidationEnabled { Plugin.LogInfof("receipt passed validation against %s", deps.NodeConfig.String(CfgReceiptsValidatorAPIAddress)) } diff --git a/plugins/restapi/api.go b/plugins/restapi/api.go index aa8c8a6c2..0d3b7ab5c 100644 --- a/plugins/restapi/api.go +++ b/plugins/restapi/api.go @@ -7,7 +7,7 @@ import ( "github.com/labstack/echo/v4" - "github.com/gohornet/hornet/pkg/jwt" + "github.com/iotaledger/hornet/pkg/jwt" ) func compileRouteAsRegex(route string) *regexp.Regexp { @@ -20,42 +20,50 @@ func compileRouteAsRegex(route string) *regexp.Regexp { if err != nil { return nil } + return reg } func compileRoutesAsRegexes(routes []string) []*regexp.Regexp { - var regexes []*regexp.Regexp - for _, route := range routes { + regexes := make([]*regexp.Regexp, len(routes)) + for i, route := range routes { reg := compileRouteAsRegex(route) if reg == nil { Plugin.LogFatalf("Invalid route in config: %s", route) continue } - regexes = append(regexes, reg) + regexes[i] = reg } + return regexes } func apiMiddleware() echo.MiddlewareFunc { - publicRoutes := compileRoutesAsRegexes(deps.NodeConfig.Strings(CfgRestAPIPublicRoutes)) - protectedRoutes := compileRoutesAsRegexes(deps.NodeConfig.Strings(CfgRestAPIProtectedRoutes)) + publicRoutesRegEx := compileRoutesAsRegexes(deps.NodeConfig.Strings(CfgRestAPIPublicRoutes)) + protectedRoutesRegEx := compileRoutesAsRegexes(deps.NodeConfig.Strings(CfgRestAPIProtectedRoutes)) matchPublic := func(c echo.Context) bool { - for _, reg := range publicRoutes { - if reg.MatchString(strings.ToLower(c.Path())) { + loweredPath := strings.ToLower(c.Request().RequestURI) + + for _, reg := range publicRoutesRegEx { + if reg.MatchString(loweredPath) { return true } } + return false } matchExposed := func(c echo.Context) bool { - for _, reg := range append(publicRoutes, protectedRoutes...) { - if reg.MatchString(strings.ToLower(c.Path())) { + loweredPath := strings.ToLower(c.Request().RequestURI) + + for _, reg := range append(publicRoutesRegEx, protectedRoutesRegEx...) { + if reg.MatchString(loweredPath) { return true } } + return false } @@ -63,6 +71,7 @@ func apiMiddleware() echo.MiddlewareFunc { salt := deps.NodeConfig.String(CfgRestAPIJWTAuthSalt) if len(salt) == 0 { Plugin.LogFatalf("'%s' should not be empty", CfgRestAPIJWTAuthSalt) + return nil } // API tokens do not expire. diff --git a/plugins/restapi/health.go b/plugins/restapi/health.go deleted file mode 100644 index a53c8834b..000000000 --- a/plugins/restapi/health.go +++ /dev/null @@ -1,19 +0,0 @@ -package restapi - -import ( - "net/http" - - "github.com/labstack/echo/v4" -) - -func setupHealthRoute() { - deps.Echo.GET(nodeAPIHealthRoute, func(c echo.Context) error { - - // node mode - if deps.Tangle != nil && !deps.Tangle.IsNodeHealthy() { - return c.NoContent(http.StatusServiceUnavailable) - } - - return c.NoContent(http.StatusOK) - }) -} diff --git a/plugins/restapi/params.go b/plugins/restapi/params.go index 2ee0c280d..b7923611d 100644 --- a/plugins/restapi/params.go +++ b/plugins/restapi/params.go @@ -3,7 +3,7 @@ package restapi import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( @@ -34,6 +34,7 @@ var params = &node.PluginParams{ []string{ "/health", "/mqtt", + "/api/routes", "/api/v1/info", "/api/v1/tips", "/api/v1/messages*", diff --git a/plugins/restapi/plugin.go b/plugins/restapi/plugin.go index 01b2006fb..7df44cd4b 100644 --- a/plugins/restapi/plugin.go +++ b/plugins/restapi/plugin.go @@ -9,19 +9,19 @@ import ( "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/host" "github.com/pkg/errors" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/jwt" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tangle" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/jwt" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tangle" ) func init() { @@ -40,9 +40,8 @@ func init() { } var ( - Plugin *node.Plugin - deps dependencies - nodeAPIHealthRoute = "/health" + Plugin *node.Plugin + deps dependencies jwtAuth *jwt.JWTAuth ) @@ -52,11 +51,11 @@ type dependencies struct { NodeConfig *configuration.Configuration `name:"nodeConfig"` Tangle *tangle.Tangle `optional:"true"` Echo *echo.Echo - RestAPIMetrics *metrics.RestAPIMetrics Host host.Host RestAPIBindAddress string `name:"restAPIBindAddress"` NodePrivateKey crypto.PrivKey `name:"nodePrivateKey"` DashboardAuthUsername string `name:"dashboardAuthUsername" optional:"true"` + RestRouteManager *RestRouteManager } func initConfigPars(c *dig.Container) { @@ -96,7 +95,8 @@ func provide(c *dig.Container) { type echoDeps struct { dig.In - NodeConfig *configuration.Configuration `name:"nodeConfig"` + NodeConfig *configuration.Configuration `name:"nodeConfig"` + RestAPIMetrics *metrics.RestAPIMetrics } type echoResult struct { @@ -114,6 +114,25 @@ func provide(c *dig.Container) { e.Use(middleware.Gzip()) e.Use(middleware.BodyLimit(deps.NodeConfig.String(CfgRestAPILimitsMaxBodyLength))) + e.HTTPErrorHandler = func(err error, c echo.Context) { + Plugin.LogDebugf("HTTP request failed: %s", err) + deps.RestAPIMetrics.HTTPRequestErrorCounter.Inc() + + var statusCode int + var message string + + var e *echo.HTTPError + if errors.As(err, &e) { + statusCode = e.Code + message = fmt.Sprintf("%s, error: %s", e.Message, err) + } else { + statusCode = http.StatusInternalServerError + message = fmt.Sprintf("internal server error. error: %s", err) + } + + _ = c.JSON(statusCode, restapi.HTTPErrorResponseEnvelope{Error: restapi.HTTPErrorResponse{Code: strconv.Itoa(statusCode), Message: message}}) + } + return echoResult{ Echo: e, DashboardAllowedAPIRoute: dashboardAllowedAPIRoute, @@ -122,6 +141,17 @@ func provide(c *dig.Container) { }); err != nil { Plugin.LogPanic(err) } + + type proxyDeps struct { + dig.In + Echo *echo.Echo + } + + if err := c.Provide(func(deps proxyDeps) *RestRouteManager { + return newRestRouteManager(deps.Echo) + }); err != nil { + Plugin.LogPanic(err) + } } func configure() { @@ -137,11 +167,10 @@ func run() { Plugin.LogInfo("Starting REST-API server ... done") bindAddr := deps.RestAPIBindAddress - server := &http.Server{Addr: bindAddr, Handler: deps.Echo} go func() { Plugin.LogInfof("You can now access the API using: http://%s", bindAddr) - if err := server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { + if err := deps.Echo.Start(bindAddr); err != nil && !errors.Is(err, http.ErrServerClosed) { Plugin.LogWarnf("Stopped REST-API server due to an error (%s)", err) } }() @@ -149,39 +178,17 @@ func run() { <-ctx.Done() Plugin.LogInfo("Stopping REST-API server ...") - if server != nil { - shutdownCtx, shutdownCtxCancel := context.WithTimeout(context.Background(), 5*time.Second) - if err := server.Shutdown(shutdownCtx); err != nil { - Plugin.LogWarn(err) - } - shutdownCtxCancel() + shutdownCtx, shutdownCtxCancel := context.WithTimeout(context.Background(), 5*time.Second) + defer shutdownCtxCancel() + + //nolint:contextcheck // false positive + if err := deps.Echo.Shutdown(shutdownCtx); err != nil { + Plugin.LogWarn(err) } + Plugin.LogInfo("Stopping REST-API server ... done") }, shutdown.PriorityRestAPI); err != nil { Plugin.LogPanicf("failed to start worker: %s", err) } -} - -func setupRoutes() { - - deps.Echo.HTTPErrorHandler = func(err error, c echo.Context) { - Plugin.LogDebugf("HTTP request failed: %s", err) - deps.RestAPIMetrics.HTTPRequestErrorCounter.Inc() - - var statusCode int - var message string - - var e *echo.HTTPError - if errors.As(err, &e) { - statusCode = e.Code - message = fmt.Sprintf("%s, error: %s", e.Message, err) - } else { - statusCode = http.StatusInternalServerError - message = fmt.Sprintf("internal server error. error: %s", err) - } - - _ = c.JSON(statusCode, restapi.HTTPErrorResponseEnvelope{Error: restapi.HTTPErrorResponse{Code: strconv.Itoa(statusCode), Message: message}}) - } - setupHealthRoute() } diff --git a/plugins/restapi/route_manager.go b/plugins/restapi/route_manager.go new file mode 100644 index 000000000..80a7ee249 --- /dev/null +++ b/plugins/restapi/route_manager.go @@ -0,0 +1,85 @@ +package restapi + +import ( + "sync" + + "github.com/labstack/echo/v4" + + restapipkg "github.com/iotaledger/hornet/pkg/restapi" +) + +type RestRouteManager struct { + sync.RWMutex + routes []string + proxy *restapipkg.DynamicProxy +} + +func newRestRouteManager(e *echo.Echo) *RestRouteManager { + return &RestRouteManager{ + routes: []string{}, + proxy: restapipkg.NewDynamicProxy(e, "/api"), + } +} +func (p *RestRouteManager) Routes() []string { + p.RLock() + defer p.RUnlock() + + return p.routes +} + +// AddRoute adds a route to the Routes endpoint and returns group to be used to register endpoints. +func (p *RestRouteManager) AddRoute(route string) *echo.Group { + p.Lock() + defer p.Unlock() + + found := false + for _, r := range p.routes { + if r == route { + found = true + + break + } + } + if !found { + p.routes = append(p.routes, route) + } + + // existing groups get overwritten (necessary if last plugin was not cleaned up properly) + return p.proxy.AddGroup(route) +} + +// AddProxyRoute adds a proxy route to the Routes endpoint and configures a remote proxy for this route. +func (p *RestRouteManager) AddProxyRoute(route string, host string, port uint32) error { + p.Lock() + defer p.Unlock() + + found := false + for _, r := range p.routes { + if r == route { + found = true + + break + } + } + if !found { + p.routes = append(p.routes, route) + } + + // existing proxies get overwritten (necessary if last plugin was not cleaned up properly) + return p.proxy.AddReverseProxy(route, host, port) +} + +// RemoveRoute removes a route from the Routes endpoint. +func (p *RestRouteManager) RemoveRoute(route string) { + p.Lock() + defer p.Unlock() + + newRoutes := make([]string, 0) + for _, r := range p.routes { + if r != route { + newRoutes = append(newRoutes, r) + } + } + p.routes = newRoutes + p.proxy.RemoveReverseProxy(route) +} diff --git a/plugins/restapi/routes.go b/plugins/restapi/routes.go new file mode 100644 index 000000000..0553ec442 --- /dev/null +++ b/plugins/restapi/routes.go @@ -0,0 +1,42 @@ +package restapi + +import ( + "net/http" + + "github.com/labstack/echo/v4" + + "github.com/iotaledger/hornet/pkg/restapi" +) + +const ( + nodeAPIHealthRoute = "/health" + + nodeAPIRoutesRoute = "/api/routes" +) + +type RoutesResponse struct { + Routes []string `json:"routes"` +} + +func setupRoutes() { + + deps.Echo.GET(nodeAPIHealthRoute, func(c echo.Context) error { + // node mode + if deps.Tangle != nil && !deps.Tangle.IsNodeHealthy() { + return c.NoContent(http.StatusServiceUnavailable) + } + + return c.NoContent(http.StatusOK) + }) + + // node mode + if deps.Tangle != nil { + deps.Echo.GET(nodeAPIRoutesRoute, func(c echo.Context) error { + resp := &RoutesResponse{ + Routes: deps.RestRouteManager.Routes(), + } + + return restapi.JSONResponse(c, http.StatusOK, resp) + }) + } +} diff --git a/plugins/restapi/v1/control.go b/plugins/restapi/v1/control.go index 78fc87ae5..ca7e198ff 100644 --- a/plugins/restapi/v1/control.go +++ b/plugins/restapi/v1/control.go @@ -8,8 +8,8 @@ import ( "github.com/labstack/gommon/bytes" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/restapi" ) func pruneDatabase(c echo.Context) (*pruneDatabaseResponse, error) { diff --git a/plugins/restapi/v1/messages.go b/plugins/restapi/v1/messages.go index 4302f2b6e..ecd25b53a 100644 --- a/plugins/restapi/v1/messages.go +++ b/plugins/restapi/v1/messages.go @@ -4,22 +4,23 @@ import ( "context" "encoding/hex" "fmt" - "io/ioutil" + "io" "strings" "time" "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/dag" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/tipselect" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/dag" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/pkg/utils" iotago "github.com/iotaledger/iota.go/v2" ) @@ -27,17 +28,12 @@ var ( messageProcessedTimeout = 1 * time.Second ) -func messageMetadataByID(c echo.Context) (*messageMetadataResponse, error) { +func messageMetadataByMessageID(messageID hornet.MessageID) (*messageMetadataResponse, error) { if !deps.SyncManager.IsNodeAlmostSynced() { return nil, errors.WithMessage(echo.ErrServiceUnavailable, "node is not synced") } - messageID, err := restapi.ParseMessageIDParam(c) - if err != nil { - return nil, err - } - cachedMsgMeta := deps.Storage.CachedMessageMetadataOrNil(messageID) if cachedMsgMeta == nil { return nil, errors.WithMessagef(echo.ErrNotFound, "message not found: %s", messageID.ToHex()) @@ -112,12 +108,7 @@ func messageMetadataByID(c echo.Context) (*messageMetadataResponse, error) { return messageMetadataResponse, nil } -func messageByID(c echo.Context) (*iotago.Message, error) { - messageID, err := restapi.ParseMessageIDParam(c) - if err != nil { - return nil, err - } - +func messageByMessageID(messageID hornet.MessageID) (*iotago.Message, error) { cachedMsg := deps.Storage.CachedMessageOrNil(messageID) // message +1 if cachedMsg == nil { return nil, errors.WithMessagef(echo.ErrNotFound, "message not found: %s", messageID.ToHex()) @@ -127,12 +118,7 @@ func messageByID(c echo.Context) (*iotago.Message, error) { return cachedMsg.Message().Message(), nil } -func messageBytesByID(c echo.Context) ([]byte, error) { - messageID, err := restapi.ParseMessageIDParam(c) - if err != nil { - return nil, err - } - +func messageBytesByMessageID(messageID hornet.MessageID) ([]byte, error) { cachedMsg := deps.Storage.CachedMessageOrNil(messageID) // message +1 if cachedMsg == nil { return nil, errors.WithMessagef(echo.ErrNotFound, "message not found: %s", messageID.ToHex()) @@ -142,13 +128,7 @@ func messageBytesByID(c echo.Context) ([]byte, error) { return cachedMsg.Message().Data(), nil } -func childrenIDsByID(c echo.Context) (*childrenResponse, error) { - - messageID, err := restapi.ParseMessageIDParam(c) - if err != nil { - return nil, err - } - +func childrenIDsByMessageID(messageID hornet.MessageID) (*childrenResponse, error) { maxResults := deps.RestAPILimitsMaxResults childrenMessageIDs, err := deps.Storage.ChildrenMessageIDs(messageID, storage.WithIteratorMaxIterations(maxResults)) if err != nil { @@ -210,7 +190,7 @@ func sendMessage(c echo.Context) (*messageCreatedResponse, error) { // bad request } - bytes, err := ioutil.ReadAll(c.Request().Body) + bytes, err := io.ReadAll(c.Request().Body) if err != nil { return nil, errors.WithMessagef(restapi.ErrInvalidParameter, "invalid message, error: %s", err) } @@ -236,17 +216,22 @@ func sendMessage(c echo.Context) (*messageCreatedResponse, error) { return nil, errors.WithMessage(restapi.ErrInvalidParameter, "invalid message, error: no parents given and node tipselection disabled") } + if !powEnabled { + return nil, errors.WithMessage(restapi.ErrInvalidParameter, "invalid message, error: no parents given and node PoW is disabled") + } + tips, err := deps.TipSelector.SelectNonLazyTips() if err != nil { if errors.Is(err, common.ErrNodeNotSynced) || errors.Is(err, tipselect.ErrNoTipsAvailable) { - return nil, errors.WithMessage(echo.ErrServiceUnavailable, err.Error()) + return nil, errors.WithMessagef(echo.ErrServiceUnavailable, "tipselection failed, error: %s", err.Error()) } - return nil, errors.WithMessage(echo.ErrInternalServerError, err.Error()) + return nil, errors.WithMessagef(echo.ErrInternalServerError, "tipselection failed, error: %s", err.Error()) } msg.Parents = tips.ToSliceOfArrays() // this function pointer is used to refresh the tips of a message // if no parents were given and the PoW takes longer than a configured duration. + // only allow to update tips during proof of work if no parents were given refreshTipsFunc = deps.TipSelector.SelectNonLazyTips } diff --git a/plugins/restapi/v1/milestones.go b/plugins/restapi/v1/milestones.go index 0c2f01907..3eff7b23b 100644 --- a/plugins/restapi/v1/milestones.go +++ b/plugins/restapi/v1/milestones.go @@ -4,7 +4,7 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/restapi" "github.com/iotaledger/hive.go/kvstore" ) diff --git a/plugins/restapi/v1/node.go b/plugins/restapi/v1/node.go index 229af367b..771195c34 100644 --- a/plugins/restapi/v1/node.go +++ b/plugins/restapi/v1/node.go @@ -6,10 +6,10 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/tipselect" ) //nolint:unparam // even if the error is never used, the structure of all routes should be the same @@ -23,19 +23,19 @@ func info() (*infoResponse, error) { referencedRate = lastConfirmedMilestoneMetric.ReferencedRate } + syncState := deps.SyncManager.SyncState() + // latest milestone index - latestMilestoneIndex := deps.SyncManager.LatestMilestoneIndex() + latestMilestoneIndex := syncState.LatestMilestoneIndex // latest milestone timestamp var latestMilestoneTimestamp int64 = 0 - cachedMilestoneLatest := deps.Storage.CachedMilestoneOrNil(latestMilestoneIndex) // milestone +1 - if cachedMilestoneLatest != nil { - latestMilestoneTimestamp = cachedMilestoneLatest.Milestone().Timestamp.Unix() - cachedMilestoneLatest.Release(true) // milestone -1 + if timestamp, err := deps.Storage.MilestoneTimestampUnixByIndex(latestMilestoneIndex); err == nil { + latestMilestoneTimestamp = timestamp } // confirmed milestone index - confirmedMilestoneIndex := deps.SyncManager.ConfirmedMilestoneIndex() + confirmedMilestoneIndex := syncState.ConfirmedMilestoneIndex // pruning index var pruningIndex milestone.Index @@ -47,7 +47,7 @@ func info() (*infoResponse, error) { return &infoResponse{ Name: deps.AppInfo.Name, Version: deps.AppInfo.Version, - IsHealthy: deps.Tangle.IsNodeHealthy(), + IsHealthy: deps.Tangle.IsNodeHealthy(syncState), NetworkID: deps.NetworkIDName, Bech32HRP: string(deps.Bech32HRP), MinPoWScore: deps.MinPoWScore, diff --git a/plugins/restapi/v1/peers.go b/plugins/restapi/v1/peers.go index cf30ed95f..2e16a8c7c 100644 --- a/plugins/restapi/v1/peers.go +++ b/plugins/restapi/v1/peers.go @@ -2,13 +2,13 @@ package v1 import ( "github.com/labstack/echo/v4" - "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p/core/peer" "github.com/multiformats/go-multiaddr" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/restapi" ) // WrapInfoSnapshot wraps the given peer info snapshot with additional metadata, such as gossip protocol information. diff --git a/plugins/restapi/v1/plugin.go b/plugins/restapi/v1/plugin.go index d61fad48a..3a438555a 100644 --- a/plugins/restapi/v1/plugin.go +++ b/plugins/restapi/v1/plugin.go @@ -8,21 +8,21 @@ import ( "github.com/pkg/errors" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/app" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/protocol/gossip" - restapipkg "github.com/gohornet/hornet/pkg/restapi" - "github.com/gohornet/hornet/pkg/snapshot" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/pkg/tipselect" - "github.com/gohornet/hornet/plugins/restapi" "github.com/iotaledger/hive.go/configuration" + "github.com/iotaledger/hornet/pkg/app" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + restapipkg "github.com/iotaledger/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/plugins/restapi" iotago "github.com/iotaledger/iota.go/v2" ) @@ -45,24 +45,36 @@ const ( // RouteMessageMetadata is the route for getting message metadata by its messageID. // GET returns message metadata (including info about "promotion/reattachment needed"). - RouteMessageMetadata = "/messages/:" + restapipkg.ParameterMessageID + "/metadata" + RouteMessageMetadata = RouteMessageData + "/metadata" // RouteMessageBytes is the route for getting message raw data by it's messageID. // GET returns raw message data (bytes). - RouteMessageBytes = "/messages/:" + restapipkg.ParameterMessageID + "/raw" + RouteMessageBytes = RouteMessageData + "/raw" // RouteMessageChildren is the route for getting message IDs of the children of a message, identified by its messageID. // GET returns the message IDs of all children. - RouteMessageChildren = "/messages/:" + restapipkg.ParameterMessageID + "/children" + RouteMessageChildren = RouteMessageData + "/children" // RouteMessages is the route for getting message IDs or creating new messages. // GET with query parameter (mandatory) returns all message IDs that fit these filter criteria (query parameters: "index"). // POST creates a single new message and returns the new message ID. RouteMessages = "/messages" - // RouteTransactionsIncludedMessage is the route for getting the message that was included in the ledger for a given transaction ID. + // RouteTransactionsIncludedMessageData is the route for getting the message that was included in the ledger for a given transaction ID. // GET returns message data (json). - RouteTransactionsIncludedMessage = "/transactions/:" + restapipkg.ParameterTransactionID + "/included-message" + RouteTransactionsIncludedMessageData = "/transactions/:" + restapipkg.ParameterTransactionID + "/included-message" + + // RouteTransactionsIncludedMessageMetadata is the route for getting the message metadata that was included in the ledger for a given transaction ID. + // GET returns message metadata (including info about "promotion/reattachment needed"). + RouteTransactionsIncludedMessageMetadata = RouteTransactionsIncludedMessageData + "/metadata" + + // RouteTransactionsIncludedMessageBytes is the route for getting the message raw data that was included in the ledger for a given transaction ID. + // GET returns raw message data (bytes). + RouteTransactionsIncludedMessageBytes = RouteTransactionsIncludedMessageData + "/raw" + + // RouteTransactionsIncludedMessageChildren is the route for getting the message IDs of the children of the message that was included in the ledger for a given transaction ID. + // GET returns the message IDs of all children. + RouteTransactionsIncludedMessageChildren = RouteTransactionsIncludedMessageData + "/children" // RouteMilestone is the route for getting a milestone by it's milestoneIndex. // GET returns the milestone. @@ -70,7 +82,7 @@ const ( // RouteMilestoneUTXOChanges is the route for getting all UTXO changes of a milestone by its milestoneIndex. // GET returns the output IDs of all UTXO changes. - RouteMilestoneUTXOChanges = "/milestones/:" + restapipkg.ParameterMilestoneIndex + "/utxo-changes" + RouteMilestoneUTXOChanges = RouteMilestone + "/utxo-changes" // RouteOutput is the route for getting outputs by their outputID (transactionHash + outputIndex). // GET returns the output. @@ -170,10 +182,10 @@ type dependencies struct { Bech32HRP iotago.NetworkPrefix `name:"bech32HRP"` RestAPILimitsMaxResults int `name:"restAPILimitsMaxResults"` RestAPIMetrics *metrics.RestAPIMetrics - SnapshotsFullPath string `name:"snapshotsFullPath"` - SnapshotsDeltaPath string `name:"snapshotsDeltaPath"` - TipSelector *tipselect.TipSelector `optional:"true"` - Echo *echo.Echo `optional:"true"` + SnapshotsFullPath string `name:"snapshotsFullPath"` + SnapshotsDeltaPath string `name:"snapshotsDeltaPath"` + TipSelector *tipselect.TipSelector `optional:"true"` + RestRouteManager *restapi.RestRouteManager `optional:"true"` } func configure() { @@ -182,7 +194,7 @@ func configure() { Plugin.LogPanic("RestAPI plugin needs to be enabled to use the RestAPIV1 plugin") } - routeGroup := deps.Echo.Group("/api/v1") + routeGroup := deps.RestRouteManager.AddRoute("v1") powEnabled = deps.NodeConfig.Bool(restapi.CfgRestAPIPoWEnabled) powWorkerCount = deps.NodeConfig.Int(restapi.CfgRestAPIPoWWorkerCount) @@ -198,6 +210,7 @@ func configure() { if err != nil { return err } + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) @@ -208,28 +221,46 @@ func configure() { if err != nil { return err } + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) } - routeGroup.GET(RouteMessageMetadata, func(c echo.Context) error { - resp, err := messageMetadataByID(c) + routeGroup.GET(RouteMessageData, func(c echo.Context) error { + messageID, err := restapipkg.ParseMessageIDParam(c) + if err != nil { + return err + } + + resp, err := messageByMessageID(messageID) if err != nil { return err } + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) - routeGroup.GET(RouteMessageData, func(c echo.Context) error { - resp, err := messageByID(c) + routeGroup.GET(RouteMessageMetadata, func(c echo.Context) error { + messageID, err := restapipkg.ParseMessageIDParam(c) if err != nil { return err } + + resp, err := messageMetadataByMessageID(messageID) + if err != nil { + return err + } + return restapipkg.JSONResponse(c, http.StatusOK, resp) }) routeGroup.GET(RouteMessageBytes, func(c echo.Context) error { - resp, err := messageBytesByID(c) + messageID, err := restapipkg.ParseMessageIDParam(c) + if err != nil { + return err + } + + resp, err := messageBytesByMessageID(messageID) if err != nil { return err } @@ -238,7 +269,12 @@ func configure() { }) routeGroup.GET(RouteMessageChildren, func(c echo.Context) error { - resp, err := childrenIDsByID(c) + messageID, err := restapipkg.ParseMessageIDParam(c) + if err != nil { + return err + } + + resp, err := childrenIDsByMessageID(messageID) if err != nil { return err } @@ -260,12 +296,60 @@ func configure() { if err != nil { return err } + c.Response().Header().Set(echo.HeaderLocation, resp.MessageID) return restapipkg.JSONResponse(c, http.StatusCreated, resp) }) - routeGroup.GET(RouteTransactionsIncludedMessage, func(c echo.Context) error { - resp, err := messageByTransactionID(c) + routeGroup.GET(RouteTransactionsIncludedMessageData, func(c echo.Context) error { + messageID, err := messageIDByTransactionID(c) + if err != nil { + return err + } + + resp, err := messageByMessageID(messageID) + if err != nil { + return err + } + + return restapipkg.JSONResponse(c, http.StatusOK, resp) + }) + + routeGroup.GET(RouteTransactionsIncludedMessageMetadata, func(c echo.Context) error { + messageID, err := messageIDByTransactionID(c) + if err != nil { + return err + } + + resp, err := messageMetadataByMessageID(messageID) + if err != nil { + return err + } + + return restapipkg.JSONResponse(c, http.StatusOK, resp) + }) + + routeGroup.GET(RouteTransactionsIncludedMessageBytes, func(c echo.Context) error { + messageID, err := messageIDByTransactionID(c) + if err != nil { + return err + } + + resp, err := messageBytesByMessageID(messageID) + if err != nil { + return err + } + + return c.Blob(http.StatusOK, echo.MIMEOctetStream, resp) + }) + + routeGroup.GET(RouteTransactionsIncludedMessageChildren, func(c echo.Context) error { + messageID, err := messageIDByTransactionID(c) + if err != nil { + return err + } + + resp, err := childrenIDsByMessageID(messageID) if err != nil { return err } diff --git a/plugins/restapi/v1/receipts.go b/plugins/restapi/v1/receipts.go index b4115522d..ade1b3a4a 100644 --- a/plugins/restapi/v1/receipts.go +++ b/plugins/restapi/v1/receipts.go @@ -4,8 +4,8 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/restapi" ) func receipts(_ echo.Context) (*receiptsResponse, error) { diff --git a/plugins/restapi/v1/transactions.go b/plugins/restapi/v1/transactions.go index 0f0edd72f..4532e471f 100644 --- a/plugins/restapi/v1/transactions.go +++ b/plugins/restapi/v1/transactions.go @@ -6,12 +6,13 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/restapi" "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/restapi" iotago "github.com/iotaledger/iota.go/v2" ) -func messageByTransactionID(c echo.Context) (*iotago.Message, error) { +func messageIDByTransactionID(c echo.Context) (hornet.MessageID, error) { transactionID, err := restapi.ParseTransactionIDParam(c) if err != nil { return nil, err @@ -29,11 +30,5 @@ func messageByTransactionID(c echo.Context) (*iotago.Message, error) { return nil, errors.WithMessagef(echo.ErrInternalServerError, "failed to load output for transaction: %s", hex.EncodeToString(transactionID[:])) } - cachedMsg := deps.Storage.CachedMessageOrNil(output.MessageID()) // message +1 - if cachedMsg == nil { - return nil, errors.WithMessagef(echo.ErrNotFound, "transaction not found: %s", hex.EncodeToString(transactionID[:])) - } - defer cachedMsg.Release(true) // message -1 - - return cachedMsg.Message().Message(), nil + return output.MessageID(), nil } diff --git a/plugins/restapi/v1/types.go b/plugins/restapi/v1/types.go index f26da31d6..90acd083d 100644 --- a/plugins/restapi/v1/types.go +++ b/plugins/restapi/v1/types.go @@ -3,10 +3,10 @@ package v1 import ( "encoding/json" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/protocol/gossip" ) // infoResponse defines the response of a GET info REST API call. diff --git a/plugins/restapi/v1/utxo.go b/plugins/restapi/v1/utxo.go index ced3ce14f..4450cd81d 100644 --- a/plugins/restapi/v1/utxo.go +++ b/plugins/restapi/v1/utxo.go @@ -10,11 +10,11 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/errors" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/restapi" "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/restapi" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/plugins/spammer/cpu_usage.go b/plugins/spammer/cpu_usage.go index c1072e1c3..63b04eb3b 100644 --- a/plugins/spammer/cpu_usage.go +++ b/plugins/spammer/cpu_usage.go @@ -9,7 +9,7 @@ import ( "github.com/pkg/errors" "github.com/shirou/gopsutil/cpu" - "github.com/gohornet/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/common" ) const ( diff --git a/plugins/spammer/http.go b/plugins/spammer/http.go index fdae936b7..548572647 100644 --- a/plugins/spammer/http.go +++ b/plugins/spammer/http.go @@ -6,12 +6,12 @@ import ( "github.com/labstack/echo/v4" - "github.com/gohornet/hornet/pkg/restapi" + "github.com/iotaledger/hornet/pkg/restapi" ) const ( // RouteSpammer is the route for controlling the integrated spammer. - RouteSpammer = "/api/plugins/spammer" + RouteSpammer = "plugins/spammer" // RouteSpammerStatus is the route to get the status of the spammer. // GET the current status of the spammer. diff --git a/plugins/spammer/params.go b/plugins/spammer/params.go index 45ea1b823..8483e3790 100644 --- a/plugins/spammer/params.go +++ b/plugins/spammer/params.go @@ -3,7 +3,7 @@ package spammer import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/spammer/plugin.go b/plugins/spammer/plugin.go index 31634dbbb..907413a95 100644 --- a/plugins/spammer/plugin.go +++ b/plugins/spammer/plugin.go @@ -7,30 +7,29 @@ import ( "sync" "time" - "github.com/labstack/echo/v4" "github.com/pkg/errors" "go.uber.org/atomic" "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/p2p" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/spammer" - "github.com/gohornet/hornet/pkg/tipselect" - "github.com/gohornet/hornet/pkg/utils" - "github.com/gohornet/hornet/plugins/coordinator" - "github.com/gohornet/hornet/plugins/restapi" - "github.com/gohornet/hornet/plugins/urts" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/syncutils" "github.com/iotaledger/hive.go/timeutil" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/p2p" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/spammer" + "github.com/iotaledger/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/pkg/utils" + "github.com/iotaledger/hornet/plugins/coordinator" + "github.com/iotaledger/hornet/plugins/restapi" + "github.com/iotaledger/hornet/plugins/urts" ) func init() { @@ -89,7 +88,7 @@ type dependencies struct { TipSelector *tipselect.TipSelector `optional:"true"` NodeConfig *configuration.Configuration `name:"nodeConfig"` NetworkID uint64 `name:"networkId"` - Echo *echo.Echo `optional:"true"` + RestRouteManager *restapi.RestRouteManager `optional:"true"` } func configure() { @@ -103,7 +102,7 @@ func configure() { Plugin.LogPanic("URTS plugin needs to be enabled to use the Spammer plugin") } - setupRoutes(deps.Echo.Group(RouteSpammer)) + setupRoutes(deps.RestRouteManager.AddRoute(RouteSpammer)) spammerAvgHeap = utils.NewTimeHeap() diff --git a/plugins/urts/params.go b/plugins/urts/params.go index 065347bcb..60aa06a37 100644 --- a/plugins/urts/params.go +++ b/plugins/urts/params.go @@ -5,7 +5,7 @@ import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/urts/plugin.go b/plugins/urts/plugin.go index 96246afa7..84fbad51b 100644 --- a/plugins/urts/plugin.go +++ b/plugins/urts/plugin.go @@ -7,17 +7,17 @@ import ( "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/common" - "github.com/gohornet/hornet/pkg/metrics" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/pkg/tipselect" - "github.com/gohornet/hornet/pkg/whiteflag" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/common" + "github.com/iotaledger/hornet/pkg/metrics" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/pkg/tipselect" + "github.com/iotaledger/hornet/pkg/whiteflag" ) func init() { @@ -174,8 +174,8 @@ func configureEvents() { } func attachEvents() { - deps.Tangle.Events.MessageSolid.Attach(onMessageSolid) - deps.Tangle.Events.MilestoneConfirmed.Attach(onMilestoneConfirmed) + deps.Tangle.Events.MessageSolid.Hook(onMessageSolid) + deps.Tangle.Events.MilestoneConfirmed.Hook(onMilestoneConfirmed) } func detachEvents() { diff --git a/plugins/versioncheck/plugin.go b/plugins/versioncheck/plugin.go index 26e8930b8..a90d719d5 100644 --- a/plugins/versioncheck/plugin.go +++ b/plugins/versioncheck/plugin.go @@ -6,11 +6,11 @@ import ( "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/app" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/version" "github.com/iotaledger/hive.go/timeutil" + "github.com/iotaledger/hornet/pkg/app" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/version" ) func init() { @@ -39,7 +39,7 @@ type dependencies struct { func provide(c *dig.Container) { if err := c.Provide(func(appInfo *app.AppInfo) *version.VersionChecker { - return version.NewVersionChecker("gohornet", "hornet", appInfo.Version) + return version.NewVersionChecker("iotaledger", "hornet", appInfo.Version) }); err != nil { Plugin.LogPanic(err) } @@ -67,7 +67,7 @@ func checkLatestVersion() { } if res.Outdated { - Plugin.LogInfof("Update to %s available on https://github.com/gohornet/hornet/releases/latest", res.Current) + Plugin.LogInfof("Update to %s available on https://github.com/iotaledger/hornet/releases/latest", res.Current) deps.AppInfo.LatestGitHubVersion = res.Current } } diff --git a/plugins/warpsync/params.go b/plugins/warpsync/params.go index bbc0149a2..33d4dd8ff 100644 --- a/plugins/warpsync/params.go +++ b/plugins/warpsync/params.go @@ -3,7 +3,7 @@ package warpsync import ( flag "github.com/spf13/pflag" - "github.com/gohornet/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/node" ) const ( diff --git a/plugins/warpsync/plugin.go b/plugins/warpsync/plugin.go index 427e035dc..f79ad617a 100644 --- a/plugins/warpsync/plugin.go +++ b/plugins/warpsync/plugin.go @@ -6,16 +6,16 @@ import ( "go.uber.org/dig" - "github.com/gohornet/hornet/pkg/model/milestone" - "github.com/gohornet/hornet/pkg/model/storage" - "github.com/gohornet/hornet/pkg/model/syncmanager" - "github.com/gohornet/hornet/pkg/node" - "github.com/gohornet/hornet/pkg/protocol/gossip" - "github.com/gohornet/hornet/pkg/shutdown" - "github.com/gohornet/hornet/pkg/tangle" - "github.com/gohornet/hornet/pkg/whiteflag" "github.com/iotaledger/hive.go/configuration" "github.com/iotaledger/hive.go/events" + "github.com/iotaledger/hornet/pkg/model/milestone" + "github.com/iotaledger/hornet/pkg/model/storage" + "github.com/iotaledger/hornet/pkg/model/syncmanager" + "github.com/iotaledger/hornet/pkg/node" + "github.com/iotaledger/hornet/pkg/protocol/gossip" + "github.com/iotaledger/hornet/pkg/shutdown" + "github.com/iotaledger/hornet/pkg/tangle" + "github.com/iotaledger/hornet/pkg/whiteflag" ) func init() { @@ -61,7 +61,7 @@ type dependencies struct { func configure() { warpSync = gossip.NewWarpSync(deps.NodeConfig.Int(CfgWarpSyncAdvancementRange)) - warpSyncMilestoneRequester = gossip.NewWarpSyncMilestoneRequester(deps.Storage, deps.SyncManager, deps.Requester, true) + warpSyncMilestoneRequester = gossip.NewWarpSyncMilestoneRequester(Plugin.Daemon().ContextStopped(), deps.Storage, deps.SyncManager, deps.Requester, true) configureEvents() } @@ -83,7 +83,7 @@ func configureEvents() { }) onGossipServiceProtocolStarted = events.NewClosure(func(p *gossip.Protocol) { - p.Events.HeartbeatUpdated.Attach(onHeartbeatUpdated) + p.Events.HeartbeatUpdated.Hook(onHeartbeatUpdated) }) onGossipServiceProtocolTerminated = events.NewClosure(func(p *gossip.Protocol) { @@ -98,8 +98,8 @@ func configureEvents() { onMilestoneSolidificationFailed = events.NewClosure(func(msIndex milestone.Index) { if warpSync.CurrentCheckpoint != 0 && warpSync.CurrentCheckpoint < msIndex { // rerequest since milestone requests could have been lost - Plugin.LogInfof("Requesting missing milestones %d - %d", msIndex, msIndex+milestone.Index(warpSync.AdvancementRange)) - warpSyncMilestoneRequester.RequestMilestoneRange(Plugin.Daemon().ContextStopped(), warpSync.AdvancementRange, nil) + _, msIndexStart, msIndexEnd := warpSyncMilestoneRequester.RequestMilestoneRange(warpSync.AdvancementRange) + Plugin.LogInfof("Requesting missing milestones %d - %d", msIndexStart, msIndexEnd) } }) @@ -109,7 +109,7 @@ func configureEvents() { deps.RequestQueue.Filter(func(r *gossip.Request) bool { return r.MilestoneIndex <= nextCheckpoint }) - warpSyncMilestoneRequester.RequestMilestoneRange(Plugin.Daemon().ContextStopped(), int(advRange), warpSyncMilestoneRequester.RequestMissingMilestoneParents, oldCheckpoint) + _, _, _ = warpSyncMilestoneRequester.RequestMilestoneRange(int(advRange), oldCheckpoint) }) onWarpSyncTargetUpdated = events.NewClosure(func(checkpoint milestone.Index, newTarget milestone.Index) { @@ -122,7 +122,7 @@ func configureEvents() { return r.MilestoneIndex <= nextCheckpoint }) - msRequested := warpSyncMilestoneRequester.RequestMilestoneRange(Plugin.Daemon().ContextStopped(), int(advRange), warpSyncMilestoneRequester.RequestMissingMilestoneParents) + msRequested, _, _ := warpSyncMilestoneRequester.RequestMilestoneRange(int(advRange)) // if the amount of requested milestones doesn't correspond to the range, // it means we already had the milestones in the database, which suggests // that we should manually kick start the milestone solidifier. @@ -144,14 +144,14 @@ func configureEvents() { } func attachEvents() { - deps.GossipService.Events.ProtocolStarted.Attach(onGossipServiceProtocolStarted) - deps.GossipService.Events.ProtocolTerminated.Attach(onGossipServiceProtocolTerminated) - deps.Tangle.Events.MilestoneConfirmed.Attach(onMilestoneConfirmed) - deps.Tangle.Events.MilestoneSolidificationFailed.Attach(onMilestoneSolidificationFailed) - warpSync.Events.CheckpointUpdated.Attach(onWarpSyncCheckpointUpdated) - warpSync.Events.TargetUpdated.Attach(onWarpSyncTargetUpdated) - warpSync.Events.Start.Attach(onWarpSyncStart) - warpSync.Events.Done.Attach(onWarpSyncDone) + deps.GossipService.Events.ProtocolStarted.Hook(onGossipServiceProtocolStarted) + deps.GossipService.Events.ProtocolTerminated.Hook(onGossipServiceProtocolTerminated) + deps.Tangle.Events.MilestoneConfirmed.Hook(onMilestoneConfirmed) + deps.Tangle.Events.MilestoneSolidificationFailed.Hook(onMilestoneSolidificationFailed) + warpSync.Events.CheckpointUpdated.Hook(onWarpSyncCheckpointUpdated) + warpSync.Events.TargetUpdated.Hook(onWarpSyncTargetUpdated) + warpSync.Events.Start.Hook(onWarpSyncStart) + warpSync.Events.Done.Hook(onWarpSyncDone) } func detachEvents() { diff --git a/private_tangle/config_private_tangle.json b/private_tangle/config_private_tangle.json index 4c0166883..60ecc8eb1 100644 --- a/private_tangle/config_private_tangle.json +++ b/private_tangle/config_private_tangle.json @@ -7,6 +7,7 @@ "publicRoutes": [ "/health", "/mqtt", + "/api/routes", "/api/v1/*", "/api/plugins/*" ], @@ -32,9 +33,11 @@ "db": { "engine": "pebble", "path": "privatedb", - "autoRevalidation": false + "autoRevalidation": false, + "checkLedgerStateOnStartup": false }, "snapshots": { + "enabled": false, "depth": 50, "interval": 200, "fullPath": "snapshots/private_tangle/full_snapshot.bin", diff --git a/scripts/build_goreleaser_snapshot.sh b/scripts/build_goreleaser_snapshot.sh index 88e2ebecb..e06173416 100755 --- a/scripts/build_goreleaser_snapshot.sh +++ b/scripts/build_goreleaser_snapshot.sh @@ -6,7 +6,7 @@ # make script executable independent of path cd $(dirname "$0")/../ -GORELEASER_IMAGE=gohornet/goreleaser-cgo-cross-compiler:1.17.3 +GORELEASER_IMAGE=iotaledger/goreleaser-cgo-cross-compiler:1.19.4 REPO_PATH="/build" docker pull "${GORELEASER_IMAGE}" diff --git a/scripts/build_hornet.sh b/scripts/build_hornet.sh index c446fb0db..d27e5f12b 100755 --- a/scripts/build_hornet.sh +++ b/scripts/build_hornet.sh @@ -3,6 +3,7 @@ # Builds HORNET with the latest commit hash (short) # E.g.: ./hornet -v --> HORNET 75316fe -commit_hash=$(git rev-parse --short HEAD) +DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" -go build -ldflags="-s -w -X github.com/gohornet/hornet/core/app.Version=$commit_hash" +commit_hash=$(git rev-parse --short HEAD) +go build -ldflags="-s -w -X github.com/iotaledger/hornet/core/app.Version=$commit_hash" diff --git a/scripts/build_hornet_rocksdb.sh b/scripts/build_hornet_rocksdb.sh index dde39746f..7979f8711 100755 --- a/scripts/build_hornet_rocksdb.sh +++ b/scripts/build_hornet_rocksdb.sh @@ -3,6 +3,7 @@ # Builds HORNET with the latest commit hash (short) # E.g.: ./hornet -v --> HORNET 75316fe -commit_hash=$(git rev-parse --short HEAD) +DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" -go build -ldflags="-s -w -X github.com/gohornet/hornet/core/app.Version=$commit_hash" -tags rocksdb +commit_hash=$(git rev-parse --short HEAD) +go build -ldflags="-s -w -X github.com/iotaledger/hornet/core/app.Version=$commit_hash" -tags rocksdb diff --git a/scripts/build_hornet_rocksdb_builtin.sh b/scripts/build_hornet_rocksdb_builtin.sh deleted file mode 100755 index 0af13b529..000000000 --- a/scripts/build_hornet_rocksdb_builtin.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -# -# Builds HORNET with the latest commit hash (short) -# E.g.: ./hornet -v --> HORNET 75316fe - -commit_hash=$(git rev-parse --short HEAD) - -CGO_ENABLED=1 go build -ldflags="-s -w -X github.com/gohornet/hornet/core/app.Version=$commit_hash" -tags rocksdb,builtin_static diff --git a/scripts/build_hornet_rocksdb_external_libs.sh b/scripts/build_hornet_rocksdb_external_libs.sh new file mode 100755 index 000000000..bcb6129d0 --- /dev/null +++ b/scripts/build_hornet_rocksdb_external_libs.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# +# Builds HORNET with the latest commit hash (short) +# E.g.: ./hornet -v --> HORNET 75316fe + +DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +commit_hash=$(git rev-parse --short HEAD) +CGO_ENABLED=1 go build -ldflags="-s -w -X github.com/iotaledger/hornet/core/app.Version=$commit_hash" -tags rocksdb,external_libs diff --git a/tools/intsnap/main.go b/tools/intsnap/main.go index 40c547ea2..655abd79d 100644 --- a/tools/intsnap/main.go +++ b/tools/intsnap/main.go @@ -5,9 +5,9 @@ import ( "os" "time" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/utxo" - "github.com/gohornet/hornet/pkg/snapshot" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/utxo" + "github.com/iotaledger/hornet/pkg/snapshot" iotago "github.com/iotaledger/iota.go/v2" ) diff --git a/tools/participation-cli/go.mod b/tools/participation-cli/go.mod index 8f9f754b7..104a48b78 100644 --- a/tools/participation-cli/go.mod +++ b/tools/participation-cli/go.mod @@ -3,7 +3,7 @@ module participation-cli go 1.16 require ( - github.com/gohornet/hornet v1.0.6-rc1.0.20211115234820-2272371936d3 + github.com/iotaledger/hornet v1.0.6-rc1.0.20211115234820-2272371936d3 github.com/iotaledger/hive.go v0.0.0-20211025103336-00824706557d github.com/iotaledger/iota.go/v2 v2.0.1-0.20211018071144-edf83a5ab704 ) diff --git a/tools/participation-cli/go.sum b/tools/participation-cli/go.sum index 438492c20..abad8f789 100644 --- a/tools/participation-cli/go.sum +++ b/tools/participation-cli/go.sum @@ -486,8 +486,8 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/gohornet/hornet v1.0.6-rc1.0.20211115234820-2272371936d3 h1:7R+9F63jzk2exJaV1d9PkQ8nZ+4+Gihfp/Yyhhytuw8= -github.com/gohornet/hornet v1.0.6-rc1.0.20211115234820-2272371936d3/go.mod h1:MA6/nhmwitOgc/t7Wy0FA+wvVhW63I2XyddINvp9amc= +github.com/iotaledger/hornet v1.0.6-rc1.0.20211115234820-2272371936d3 h1:7R+9F63jzk2exJaV1d9PkQ8nZ+4+Gihfp/Yyhhytuw8= +github.com/iotaledger/hornet v1.0.6-rc1.0.20211115234820-2272371936d3/go.mod h1:MA6/nhmwitOgc/t7Wy0FA+wvVhW63I2XyddINvp9amc= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= diff --git a/tools/participation-cli/main.go b/tools/participation-cli/main.go index 561b4532b..938920275 100644 --- a/tools/participation-cli/main.go +++ b/tools/participation-cli/main.go @@ -7,11 +7,11 @@ import ( "os" "time" - "github.com/gohornet/hornet/pkg/model/hornet" - "github.com/gohornet/hornet/pkg/model/participation" - "github.com/gohornet/hornet/pkg/pow" - "github.com/gohornet/hornet/pkg/utils" "github.com/iotaledger/hive.go/serializer" + "github.com/iotaledger/hornet/pkg/model/hornet" + "github.com/iotaledger/hornet/pkg/model/participation" + "github.com/iotaledger/hornet/pkg/pow" + "github.com/iotaledger/hornet/pkg/utils" iotago "github.com/iotaledger/iota.go/v2" "github.com/iotaledger/iota.go/v2/ed25519" )