diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 1c62265a80..219dc89e49 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -46,7 +46,7 @@ jobs:
if: steps.changed-files.outputs.any_changed == 'true'
- uses: actions/upload-artifact@v3
with:
- name: "cronosd-tarball-${{ matrix.os }}"
+ name: "tgenesisd-tarball-${{ matrix.os }}"
path: "*.tar.gz"
if-no-files-found: ignore
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 8c8f2b5dcb..8c3935f082 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -21,7 +21,7 @@ jobs:
steps:
- uses: actions/setup-go@v3
with:
- go-version: '^1.20.0'
+ go-version: "^1.20.0"
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v22
with:
@@ -48,7 +48,7 @@ jobs:
BUILD_TAGS=rocksdb,grocksdb_clean_link
echo "go build"
- go build -tags $BUILD_TAGS ./cmd/cronosd
+ go build -tags $BUILD_TAGS ./cmd/tgenesisd
echo "golangci-lint ."
golangci-lint run --out-format=github-actions --path-prefix=./ --timeout 10m --build-tags $BUILD_TAGS
# Check only if there are differences in the source code
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 2065b90206..d7eb3a15f5 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -16,6 +16,11 @@ jobs:
integration_tests:
runs-on: ubuntu-latest
timeout-minutes: 240
+ strategy:
+ matrix:
+ tests: [unmarked, ibc, ibc_timeout, ibc_update_client, upgrade, slow]
+ env:
+ TESTS_TO_RUN: ${{ matrix.tests }}
steps:
- uses: actions/checkout@v3
with:
diff --git a/.gitignore b/.gitignore
index ca9239758e..bf012a3e63 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,9 @@ go.work.sum
# yaml for test
integration_tests/configs/*.yaml
+
+# Utils
+setup-local/_local-variables.sh
+utils/tools/quick-shift.sh
+utils/tools/shift-wizard.sh
+utils/tools/_restate-sync.sh
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1953608445..f8eaf1bb82 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,28 @@
# Changelog
+*Jan 05, 2024*
+
+## v1.0.15
+
+- [#1265](https://github.com/crypto-org-chain/cronos/pull/1265) Fix nil pointer panic when filter timeout
+- [#1270](https://github.com/crypto-org-chain/cronos/pull/1270) Avoid out of bound panic from error message
+
+*Dec 15, 2023*
+
+## v1.0.14
+
+- [#1259](https://github.com/crypto-org-chain/cronos/pull/1259) Use a hard-fork style upgrade to adjust feemarket parameters.
+
+*Nov 20, 2023*
+
+## v1.0.13
+
+- [#1197](https://github.com/crypto-org-chain/cronos/pull/1197) tune rocksdb options to control memory consumption.
+- [#1207](https://github.com/crypto-org-chain/cronos/pull/1207) Update rocksdb to `v8.6.7`.
+- [#1240](https://github.com/crypto-org-chain/cronos/pull/1240) Revert rocksdb upgrade.
+- [#1239](https://github.com/crypto-org-chain/cronos/pull/1239) Refactor websocket/subscription system to improve performance and stability.
+- [#1246](https://github.com/crypto-org-chain/cronos/pull/1246) Update memiavl deps to include bug fixes and state sync restore performance improvement.
+
*Aug 11, 2023*
## v1.0.12
diff --git a/Makefile b/Makefile
index 372e878f2d..b9da42774d 100644
--- a/Makefile
+++ b/Makefile
@@ -4,8 +4,8 @@ COVERAGE ?= coverage.txt
GOPATH ?= $(shell $(GO) env GOPATH)
BINDIR ?= ~/go/bin
-BINARY_NAME = genesisd
-NETWORK ?= mainnet
+BINARY_NAME = tgenesisd
+NETWORK ?= testnet
LEDGER_ENABLED ?= true
PROJECT_NAME = $(shell git remote get-url origin | xargs basename -s .git)
@@ -78,7 +78,7 @@ comma := ,
build_tags_comma_sep := $(subst $(whitespace),$(comma),$(build_tags))
# process linker flags
-ldflags += -X github.com/cosmos/cosmos-sdk/version.Name=cronos \
+ldflags += -X github.com/cosmos/cosmos-sdk/version.Name=tgenesis \
-X github.com/cosmos/cosmos-sdk/version.AppName=$(BINARY_NAME) \
-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION) \
-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT) \
@@ -92,12 +92,10 @@ endif
all: build
build: check-network print-ledger go.sum
- @go build -mod=readonly $(BUILD_FLAGS) -o $(BUILDDIR)/$(BINARY_NAME) ./cmd/cronosd
+ @go build -mod=readonly $(BUILD_FLAGS) -o $(BUILDDIR)/$(BINARY_NAME) ./cmd/$(BINARY_NAME)
install: check-network print-ledger go.sum
- @go build -mod=readonly $(BUILD_FLAGS) -o $(BUILDDIR)/$(BINARY_NAME) ./cmd/cronosd
- @mkdir -p $(BINDIR)
- @mv $(BUILDDIR)/$(BINARY_NAME) $(BINDIR)/$(BINARY_NAME)
+ @go install -mod=readonly $(BUILD_FLAGS) ./cmd/$(BINARY_NAME)
test:
@go test -v -mod=readonly $(PACKAGES) -coverprofile=$(COVERAGE) -covermode=atomic
@@ -219,6 +217,12 @@ test-sim-profile:
### Integration Test ###
###############################################################################
+# possible values:
+# - all: run all integration tests
+# - unmarked: run integration tests that are not marked
+# - marker1,marker2: markers separated by comma, run integration tests that are marked with any of the markers
+TESTS_TO_RUN ?= all
+
run-integration-tests:
@nix-shell ./integration_tests/shell.nix --run ./scripts/run-integration-tests
diff --git a/README.md b/README.md
index d62ce6089f..6534ae0039 100644
--- a/README.md
+++ b/README.md
@@ -1,91 +1,137 @@
-# GenesisL1 blockchain
+
+ GenesisL1 Testnet (Cronos fork)
+
-
+ Release v1.0.0 ~ Cronos v1.0.15
- Cosmos SDK v0.46.15
+
- Source code fork of cronos and ethermint.
+ Chain ID tgenesis_290-1
+
+ A source code fork of Cronos and Ethermint
+
+
+
+ Cosmos SDK v0.46.15
+
+
+---
+
+> [!IMPORTANT]
+> **For full-node syncing**
+>
+> We were an Evmos-fork before we made the decision to hard fork to Cronos. Therefore if you do not want to **state sync**, but wish to sync a **full node**, follow the instructions in the [`genesis-ethermint`](https://github.com/alpha-omega-labs/genesis-ethermint) repository first before continuing.
+
## Node requirements
- 300GB+ good hard drive disk
-- 8GB+ RAM (if necessary it will use at max 150GB from hard drive as swap, see below)
+- 8GB+ RAM
- 4 CPU Threads
- Good Internet Connection
-## **Script**
+## Instructions
+
+The instructions provided here will only be suitable for those who would like to join the **public** testnet: `tgenesis_290-1` by **setting up a new node** _or_ **upgrading an existing (full) node**. If you instead want to _test_ **locally**, see the [README](/setup-local/README.md) in the [/setup-local](/setup-local)-folder.
-### Overview
+> [!NOTE]
+> More details for every script mentioned in this README can be found in the folders where they are respectively stored: [/setup](/setup), [/setup-local](/setup-local) or [/utils](/utils).
-`genesisd.sh` is available in the root folder of the repository. Running `sh genesisd.sh` gives an overview of what the script is capable of.
+### 1. Cloning the repository
```
-Usage: genesisd.sh [moniker]
- should be either 'upgrade' or 'init'
+git clone https://github.com/alpha-omega-labs/genesis-crypto.git
+```
+
+### 2. Checkout the right tag/branch
- Options:
- --crisis-skip Makes sure that genesisd starts with the --x-crisis-skip-assert-invariants flag (default: false)
- --skip-state-download Skips downloading the genesis.json file, only do this if you're certain to have the correct state file already (default: false)
- --reset-priv-val-state Resets data/priv_validator_state.json file [UNSAFE] (default: false)
- --no-service This prevents the genesisd service from being made (default: false)
- --no-start This prevents the genesisd service from starting at the end of the script (default: false)
+```
+git checkout v1.0.0-t
```
-### Usage
+### 3. Node setup
-- **Initialization (new validators; generates a new key)**
+Depending on your circumstances, you'll either have to **Setup a node _(using state sync)_** or **Upgrade a node**.
- `sh genesisd.sh init $YOUR_NEW_NODE_NAME`
+#### 3.1 Setup a node _(using state sync)_
-- **Upgrading (existing validators; you already have an existing .genesisd folder and configuration)**
+This script takes care of the needed steps to join the network via _state sync_.
- `sh genesisd.sh upgrade`
+> [!WARNING]
+> Running this will **wipe the entire database** (the _/data_-folder **excluding** the priv_validator_state.json file). Therefore if you already have a node set up and you prefer not to have your GenesisL1 database lost, create a backup.
+>
+> You could use [utils/backup/create.sh](/utils/backup/create.sh) for this.
- _--if you want a different node name you could use `sh genesisd.sh upgrade $YOUR_NEW_NODE_NAME`_
-
- _--more detailed guides for specific upgrades could be found in the [\/genesisd_docs](genesisd_docs/)-folder_
-
+```
+sh setup/state-sync.sh
+```
-
- ☕ node init/upgrade time is 30-60min or a few tea cups...
-
+#### 3.2 Upgrade a node
----
+This script assumes that you are currently operating on the Evmos fork of GenesisL1 (repo: [`genesis-ethermint`](https://github.com/alpha-omega-labs/genesis-ethermint)) and the node synced till height: `insert_height_here` which caused it to panic.
-### Information
+> [!IMPORTANT]
+> This should only be used if you run a **full-node** and have to perform the **"plan_crypto"**-upgrade.
-#### Swap
+```
+sh setup/upgrade.sh
+```
+
+### 4. Daemon check
+
+If you can't access the `tgenesisd` command at this point, then you may need to execute:
-Initializing a node uses quite a bit of memory. The script therefore automatically creates virtual memory (swap) to compensate for the amount it requires to start the node. Currently the script is set to automatically calculate how much RAM + Swap is available. Then, whether the user has enough disk space, creates additional swap to have a total of 150GB available RAM + Swap (Example: if 32GB RAM is unused and 30GB of swap is free, an additional swap of 88GB will be created). These swapfiles are formatted as `genesisd_swapfile_{number}` and are made persistent across reboots by adding a line to the `etc/fstab` file. See the bonus scripts for more info on how to properly add or remove them.
+```
+. ~/.bashrc
+```
+> Or the equivalent: `source ~/.bashrc`
+
+### 5. Create or import a key (optional)
+
+A key is necessary to interact with the network/node. If you haven't already created one, either import one or generate a new one, using:
+
+```
+sh utils/key/create.sh
+```
-#### Backups
+OR
-If a `.genesisd` folder already exists, the script will back this up to a folder formatted as `.genesisd_backup_{date_time}`. This is a unique name based on the system's current time. Therefore running the script multiple times will continue to create new backup folders.
+```
+sh utils/key/import.sh
+```
-Since our state file is large this would mean that it will be around ~14GB every time a backup is made. Make sure to remove older backup folders if you plan on running the script more often (testing purposes for instance). They're hidden folders in the root folder; use `cd ~` then `ls -a` to see them.
+> __ is the private key for a (wallet) address you already own.
-## **Other (bonus) scripts**
+### 6. Node syncing
-There are some extra scripts in the `genesisd_scripts` folder, which could be useful later down the line.
+If everything went well, you should now be able to run your node using:
-### Swap scripts
+```
+systemctl start tgenesisd
+```
-Since the node requires quite some memory usage, swapfiles are created when you run the genesisd.sh script. To alter these swap files we've included scripts to quickly add or remove genesisd_swapfiles.
+and see its status with:
-- **Adding swap** `sh swap_add.sh `
+```
+journalctl -fu tgenesisd -ocat
+```
- Example: sh swap_add.sh 50 will create a new genesisd_swapfile that is 50GB in size in '/'.
+### 7. Become a validator (optional)
-- **Removing swap** `sh swap_remove.sh `
+Once your node is _up-and-running_, _fully synced_ and you have a _key_ created or imported, you could become a validator using:
- Example: sh swap_remove.sh /genesisd_swapfile_2 turns off swapfile genesisd_swapfile_2, removes the related line in '/etc/fstab' and deletes /genesisd_swapfile_2.
+```
+sh setup/create-validator.sh
+```
+> This is a wizard and shall prompt the user only the required fields to create an on-chain validator.
-- **Removing all swaps** `sh swap_remove_all.sh`
+### 8. Explore utilities (optional)
- This will turn off all genesis swapfiles, removes all related lines in '/etc/fstab' and deletes all /genesisd_swapfiles
+> [!TIP]
+> The [/utils](/utils)-folder contains useful utilities one could use to manage their node (e.g. for fetching latest seeds and peers, fetching the genesis state, quickly shifting your config's ports, recalibrating your state sync etc.). To learn more about these, see the [README](utils/README.md) in the folder.
diff --git a/app/app.go b/app/app.go
index 2322af9e24..1042038b7d 100644
--- a/app/app.go
+++ b/app/app.go
@@ -146,7 +146,7 @@ import (
)
const (
- Name = "genesis"
+ Name = "tgenesis"
// AddrLen is the allowed length (in bytes) for an address.
//
@@ -211,7 +211,7 @@ func init() {
panic(err)
}
- DefaultNodeHome = filepath.Join(userHomeDir, "."+Name+"d")
+ DefaultNodeHome = filepath.Join(userHomeDir, "."+Name)
sdk.DefaultPowerReduction = sdk.NewIntFromUint64(1000000000000000000)
}
diff --git a/app/prefix.go b/app/prefix.go
index 83a8bc1c61..3e54bc3c26 100644
--- a/app/prefix.go
+++ b/app/prefix.go
@@ -2,7 +2,7 @@ package app
import (
sdk "github.com/cosmos/cosmos-sdk/types"
- cmdcfg "github.com/crypto-org-chain/cronos/cmd/cronosd/config"
+ cmdcfg "github.com/crypto-org-chain/cronos/cmd/tgenesisd/config"
ethcfg "github.com/evmos/ethermint/cmd/config"
)
diff --git a/app/upgrades.go b/app/upgrades.go
index a0d7b92e6a..f3dc60cae3 100644
--- a/app/upgrades.go
+++ b/app/upgrades.go
@@ -1,73 +1,101 @@
package app
import (
- "fmt"
+ "fmt"
- sdkmath "cosmossdk.io/math"
- storetypes "github.com/cosmos/cosmos-sdk/store/types"
- sdk "github.com/cosmos/cosmos-sdk/types"
- "github.com/cosmos/cosmos-sdk/types/module"
- upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
- icacontrollertypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types"
- ibcfeetypes "github.com/cosmos/ibc-go/v5/modules/apps/29-fee/types"
+ sdkmath "cosmossdk.io/math"
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ "github.com/cosmos/cosmos-sdk/types/module"
+ feemarketkeeper "github.com/evmos/ethermint/x/feemarket/keeper"
+ evmkeeper "github.com/evmos/ethermint/x/evm/keeper"
+ storetypes "github.com/cosmos/cosmos-sdk/store/types"
+ upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
+ ibcfeetypes "github.com/cosmos/ibc-go/v5/modules/apps/29-fee/types"
+ cronostypes "github.com/crypto-org-chain/cronos/x/cronos/types"
)
-func (app *App) RegisterUpgradeHandlers(experimental bool) {
- upgradeHandlerV1 := func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
- m, err := app.mm.RunMigrations(ctx, app.configurator, fromVM)
- if err != nil {
- return m, err
- }
- // clear extra_eips from evm parameters
- // Ref: https://github.com/crypto-org-chain/cronos/issues/755
- params := app.EvmKeeper.GetParams(ctx)
- params.ExtraEIPs = []int64{}
+type UpgradeInfo struct {
+ Name string
+ Info string
+ Handler func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error)
+}
+
+// This is the fork upgrade to Cronos binaries
+func UpgradeV1(
+ mm *module.Manager,
+ configurator module.Configurator,
+ fm feemarketkeeper.Keeper,
+ evm *evmkeeper.Keeper,
+) UpgradeInfo {
+ return UpgradeInfo{
+ Name: "plan_crypto",
+ Info: `'{"binaries":{"darwin/amd64":"","darwin/x86_64":"","linux/arm64":"","linux/amd64":"","windows/x86_64":""}}'`,
+ Handler: func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
+ m, err := mm.RunMigrations(ctx, configurator, fromVM)
+ if err != nil {
+ return m, err
+ }
+
+ // Override feemarket parameters
+ fmParams := fm.GetParams(ctx)
+ fmParams.BaseFeeChangeDenominator = 8
+ fmParams.ElasticityMultiplier = 2
+ fmParams.BaseFee = sdk.NewInt(50000000000)
+ fmParams.MinGasPrice = sdk.NewDec(50000000000)
+ fm.SetParams(ctx, fmParams)
+
+ // clear extra_eips from evm parameters
+ // Ref: https://github.com/crypto-org-chain/cronos/issues/755
+ evmParams := evm.GetParams(ctx)
+ evmParams.ExtraEIPs = []int64{}
+ zero := sdkmath.ZeroInt()
+ // fix the incorrect value on testnet parameters
+ evmParams.ChainConfig.LondonBlock = &zero
+ evm.SetParams(ctx, evmParams)
- // fix the incorrect value on testnet parameters
- zero := sdkmath.ZeroInt()
- params.ChainConfig.LondonBlock = &zero
+ return m, nil
+ },
+ }
+}
+
+func (app *App) RegisterUpgradeHandlers(experimental bool) {
+ upgradeV1 := UpgradeV1(
+ app.mm,
+ app.configurator,
+ app.FeeMarketKeeper,
+ app.EvmKeeper,
+ )
- app.EvmKeeper.SetParams(ctx, params)
- return m, nil
- }
- // `v1.0.0` upgrade plan will clear the `extra_eips` parameters, and upgrade ibc-go to v5.2.0.
- planName := "v1.0.0"
- app.UpgradeKeeper.SetUpgradeHandler(planName, upgradeHandlerV1)
- // "v1.0.0-testnet3-2" is another coordinated upgrade on testnet3 to upgrade ibc-go to "v5.2.0".
- planNameTestnet3 := "v1.0.0-testnet3-2"
- app.UpgradeKeeper.SetUpgradeHandler(planNameTestnet3, func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
- return app.mm.RunMigrations(ctx, app.configurator, fromVM)
- })
+ app.UpgradeKeeper.SetUpgradeHandler(
+ upgradeV1.Name,
+ upgradeV1.Handler,
+ )
- gravityPlanName := "v0.8.0-gravity-alpha3"
- if experimental {
- app.UpgradeKeeper.SetUpgradeHandler(gravityPlanName, func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
- return app.mm.RunMigrations(ctx, app.configurator, fromVM)
- })
- }
+ // When a planned update height is reached, the old binary will panic
+ // writing on disk the height and name of the update that triggered it
+ // This will read that value, and execute the preparations for the upgrade.
+ upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk()
+ if err != nil {
+ panic(fmt.Errorf("failed to read upgrade info from disk: %w", err))
+ }
- upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk()
- if err != nil {
- panic(fmt.Sprintf("failed to read upgrade info from disk %s", err))
- }
+ if app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
+ return
+ }
- if !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
- if upgradeInfo.Name == planName {
- storeUpgrades := storetypes.StoreUpgrades{
- Added: []string{ibcfeetypes.StoreKey},
- }
+ var storeUpgrades *storetypes.StoreUpgrades
- // configure store loader that checks if version == upgradeHeight and applies store upgrades
- app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades))
- }
- if experimental && upgradeInfo.Name == gravityPlanName {
- storeUpgrades := storetypes.StoreUpgrades{
- Added: []string{ibcfeetypes.StoreKey},
- Deleted: []string{icacontrollertypes.StoreKey},
- }
+ switch upgradeInfo.Name {
+ case upgradeV1.Name:
+ storeUpgrades = &storetypes.StoreUpgrades{
+ Added: []string{ibcfeetypes.StoreKey, cronostypes.StoreKey},
+ }
+ default:
+ // no-op
+ }
- // configure store loader that checks if version == upgradeHeight and applies store upgrades
- app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades))
- }
- }
+ if storeUpgrades != nil {
+ // configure store loader that checks if version == upgradeHeight and applies store upgrades
+ app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, storeUpgrades))
+ }
}
diff --git a/assets/cronos.svg b/assets/cronos.svg
deleted file mode 100644
index 76cf3aab70..0000000000
--- a/assets/cronos.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-
diff --git a/cmd/cronosd/cmd/genaccounts.go b/cmd/tgenesisd/cmd/genaccounts.go
similarity index 100%
rename from cmd/cronosd/cmd/genaccounts.go
rename to cmd/tgenesisd/cmd/genaccounts.go
diff --git a/cmd/cronosd/cmd/root.go b/cmd/tgenesisd/cmd/root.go
similarity index 98%
rename from cmd/cronosd/cmd/root.go
rename to cmd/tgenesisd/cmd/root.go
index b14dcc0303..7d07e4df54 100644
--- a/cmd/cronosd/cmd/root.go
+++ b/cmd/tgenesisd/cmd/root.go
@@ -40,8 +40,8 @@ import (
ethermint "github.com/evmos/ethermint/types"
"github.com/crypto-org-chain/cronos/app"
- "github.com/crypto-org-chain/cronos/cmd/cronosd/experimental"
- "github.com/crypto-org-chain/cronos/cmd/cronosd/opendb"
+ "github.com/crypto-org-chain/cronos/cmd/tgenesisd/experimental"
+ "github.com/crypto-org-chain/cronos/cmd/tgenesisd/opendb"
memiavlcfg "github.com/crypto-org-chain/cronos/store/config"
"github.com/crypto-org-chain/cronos/x/cronos"
// this line is used by starport scaffolding # stargate/root/import
diff --git a/cmd/cronosd/cmd/versiondb.go b/cmd/tgenesisd/cmd/versiondb.go
similarity index 92%
rename from cmd/cronosd/cmd/versiondb.go
rename to cmd/tgenesisd/cmd/versiondb.go
index 6d2a4a9133..127d360b47 100644
--- a/cmd/cronosd/cmd/versiondb.go
+++ b/cmd/tgenesisd/cmd/versiondb.go
@@ -7,7 +7,7 @@ import (
"sort"
"github.com/crypto-org-chain/cronos/app"
- "github.com/crypto-org-chain/cronos/cmd/cronosd/opendb"
+ "github.com/crypto-org-chain/cronos/cmd/tgenesisd/opendb"
versiondbclient "github.com/crypto-org-chain/cronos/versiondb/client"
"github.com/linxGnu/grocksdb"
"github.com/spf13/cobra"
diff --git a/cmd/cronosd/cmd/versiondb_placeholder.go b/cmd/tgenesisd/cmd/versiondb_placeholder.go
similarity index 100%
rename from cmd/cronosd/cmd/versiondb_placeholder.go
rename to cmd/tgenesisd/cmd/versiondb_placeholder.go
diff --git a/cmd/cronosd/config/config.go b/cmd/tgenesisd/config/config.go
similarity index 100%
rename from cmd/cronosd/config/config.go
rename to cmd/tgenesisd/config/config.go
diff --git a/cmd/cronosd/config/prefix_mainnet.go b/cmd/tgenesisd/config/prefix_mainnet.go
similarity index 100%
rename from cmd/cronosd/config/prefix_mainnet.go
rename to cmd/tgenesisd/config/prefix_mainnet.go
diff --git a/cmd/cronosd/config/prefix_testnet.go b/cmd/tgenesisd/config/prefix_testnet.go
similarity index 100%
rename from cmd/cronosd/config/prefix_testnet.go
rename to cmd/tgenesisd/config/prefix_testnet.go
diff --git a/cmd/cronosd/experimental/util.go b/cmd/tgenesisd/experimental/util.go
similarity index 100%
rename from cmd/cronosd/experimental/util.go
rename to cmd/tgenesisd/experimental/util.go
diff --git a/cmd/cronosd/main.go b/cmd/tgenesisd/main.go
similarity index 83%
rename from cmd/cronosd/main.go
rename to cmd/tgenesisd/main.go
index c2fcd0225f..37c38f1e10 100644
--- a/cmd/cronosd/main.go
+++ b/cmd/tgenesisd/main.go
@@ -5,7 +5,7 @@ import (
svrcmd "github.com/cosmos/cosmos-sdk/server/cmd"
"github.com/crypto-org-chain/cronos/app"
- "github.com/crypto-org-chain/cronos/cmd/cronosd/cmd"
+ "github.com/crypto-org-chain/cronos/cmd/tgenesisd/cmd"
)
func main() {
diff --git a/cmd/cronosd/opendb/opendb.go b/cmd/tgenesisd/opendb/opendb.go
similarity index 100%
rename from cmd/cronosd/opendb/opendb.go
rename to cmd/tgenesisd/opendb/opendb.go
diff --git a/cmd/cronosd/opendb/opendb_rocksdb.go b/cmd/tgenesisd/opendb/opendb_rocksdb.go
similarity index 100%
rename from cmd/cronosd/opendb/opendb_rocksdb.go
rename to cmd/tgenesisd/opendb/opendb_rocksdb.go
diff --git a/genesisd_config/default_app.toml b/configs/default_app.toml
similarity index 99%
rename from genesisd_config/default_app.toml
rename to configs/default_app.toml
index a0c1c9f79d..3dd4571830 100644
--- a/genesisd_config/default_app.toml
+++ b/configs/default_app.toml
@@ -175,7 +175,7 @@ gas-to-suggest = 200000
# DenomToSuggest defines the defult denom for fee suggestion.
# Price must be in minimum-gas-prices.
-denom-to-suggest = "uatom"
+denom-to-suggest = "el1"
###############################################################################
### gRPC Configuration ###
diff --git a/configs/default_app_local.toml b/configs/default_app_local.toml
new file mode 100644
index 0000000000..4d26de2cd6
--- /dev/null
+++ b/configs/default_app_local.toml
@@ -0,0 +1,373 @@
+# This is a TOML config file.
+# For more information, see https://github.com/toml-lang/toml
+
+###############################################################################
+### Base Configuration ###
+###############################################################################
+
+# The minimum gas prices a validator is willing to accept for processing a
+# transaction. A transaction's fees must meet the minimum of any denomination
+# specified in this config (e.g. 0.25token1;0.0001token2).
+minimum-gas-prices = "50000000000el1"
+
+# default: the last 362880 states are kept, pruning at 10 block intervals
+# nothing: all historic states will be saved, nothing will be deleted (i.e. archiving node)
+# everything: 2 latest states will be kept; pruning at 10 block intervals.
+# custom: allow pruning options to be manually specified through 'pruning-keep-recent', and 'pruning-interval'
+pruning = "default"
+
+# These are applied if and only if the pruning strategy is custom.
+pruning-keep-recent = "0"
+pruning-interval = "0"
+
+# HaltHeight contains a non-zero block height at which a node will gracefully
+# halt and shutdown that can be used to assist upgrades and testing.
+#
+# Note: Commitment of state will be attempted on the corresponding block.
+halt-height = 0
+
+# HaltTime contains a non-zero minimum block time (in Unix seconds) at which
+# a node will gracefully halt and shutdown that can be used to assist upgrades
+# and testing.
+#
+# Note: Commitment of state will be attempted on the corresponding block.
+halt-time = 0
+
+# MinRetainBlocks defines the minimum block height offset from the current
+# block being committed, such that all blocks past this offset are pruned
+# from Tendermint. It is used as part of the process of determining the
+# ResponseCommit.RetainHeight value during ABCI Commit. A value of 0 indicates
+# that no blocks should be pruned.
+#
+# This configuration value is only responsible for pruning Tendermint blocks.
+# It has no bearing on application state pruning which is determined by the
+# "pruning-*" configurations.
+#
+# Note: Tendermint block pruning is dependant on this parameter in conunction
+# with the unbonding (safety threshold) period, state pruning and state sync
+# snapshot parameters to determine the correct minimum value of
+# ResponseCommit.RetainHeight.
+min-retain-blocks = 0
+
+# InterBlockCache enables inter-block caching.
+inter-block-cache = true
+
+# IndexEvents defines the set of events in the form {eventType}.{attributeKey},
+# which informs Tendermint what to index. If empty, all events will be indexed.
+#
+# Example:
+# ["message.sender", "message.recipient"]
+index-events = []
+
+# IavlCacheSize set the size of the iavl tree cache.
+# Default cache size is 50mb.
+iavl-cache-size = 781250
+
+# IavlDisableFastNode enables or disables the fast node feature of IAVL.
+# Default is false.
+iavl-disable-fastnode = false
+
+# EXPERIMENTAL: IAVLLazyLoading enable/disable the lazy loading of iavl store.
+# Default is false.
+iavl-lazy-loading = false
+
+# AppDBBackend defines the database backend type to use for the application and snapshots DBs.
+# An empty string indicates that a fallback will be used.
+# First fallback is the deprecated compile-time types.DBBackend value.
+# Second fallback (if the types.DBBackend also isn't set), is the db-backend value set in Tendermint's config.toml.
+app-db-backend = ""
+
+###############################################################################
+### Telemetry Configuration ###
+###############################################################################
+
+[telemetry]
+
+# Prefixed with keys to separate services.
+service-name = ""
+
+# Enabled enables the application telemetry functionality. When enabled,
+# an in-memory sink is also enabled by default. Operators may also enabled
+# other sinks such as Prometheus.
+enabled = false
+
+# Enable prefixing gauge values with hostname.
+enable-hostname = false
+
+# Enable adding hostname to labels.
+enable-hostname-label = false
+
+# Enable adding service to labels.
+enable-service-label = false
+
+# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink.
+prometheus-retention-time = 0
+
+# GlobalLabels defines a global set of name/value label tuples applied to all
+# metrics emitted using the wrapper functions defined in telemetry package.
+#
+# Example:
+# [["chain_id", "cosmoshub-1"]]
+global-labels = [
+]
+
+###############################################################################
+### API Configuration ###
+###############################################################################
+
+[api]
+
+# Enable defines if the API server should be enabled.
+enable = true
+
+# Swagger defines if swagger documentation should automatically be registered.
+swagger = false
+
+# Address defines the API server to listen on.
+address = "tcp://0.0.0.0:1317"
+
+# MaxOpenConnections defines the number of maximum open connections.
+max-open-connections = 1000
+
+# RPCReadTimeout defines the Tendermint RPC read timeout (in seconds).
+rpc-read-timeout = 10
+
+# RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds).
+rpc-write-timeout = 0
+
+# RPCMaxBodyBytes defines the Tendermint maximum response body (in bytes).
+rpc-max-body-bytes = 1000000
+
+# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk).
+enabled-unsafe-cors = true
+
+###############################################################################
+### Rosetta Configuration ###
+###############################################################################
+
+[rosetta]
+
+# Enable defines if the Rosetta API server should be enabled.
+enable = false
+
+# Address defines the Rosetta API server to listen on.
+address = ":8080"
+
+# Network defines the name of the blockchain that will be returned by Rosetta.
+blockchain = "app"
+
+# Network defines the name of the network that will be returned by Rosetta.
+network = "network"
+
+# Retries defines the number of retries when connecting to the node before failing.
+retries = 3
+
+# Offline defines if Rosetta server should run in offline mode.
+offline = false
+
+# EnableDefaultSuggestedFee defines if the server should suggest fee by default.
+# If 'construction/medata' is called without gas limit and gas price,
+# suggested fee based on gas-to-suggest and denom-to-suggest will be given.
+enable-fee-suggestion = false
+
+# GasToSuggest defines gas limit when calculating the fee
+gas-to-suggest = 200000
+
+# DenomToSuggest defines the defult denom for fee suggestion.
+# Price must be in minimum-gas-prices.
+denom-to-suggest = "el1"
+
+###############################################################################
+### gRPC Configuration ###
+###############################################################################
+
+[grpc]
+
+# Enable defines if the gRPC server should be enabled.
+enable = true
+
+# Address defines the gRPC server address to bind to.
+address = "0.0.0.0:9090"
+
+# MaxRecvMsgSize defines the max message size in bytes the server can receive.
+# The default value is 10MB.
+max-recv-msg-size = "10485760"
+
+# MaxSendMsgSize defines the max message size in bytes the server can send.
+# The default value is math.MaxInt32.
+max-send-msg-size = "2147483647"
+
+###############################################################################
+### gRPC Web Configuration ###
+###############################################################################
+
+[grpc-web]
+
+# GRPCWebEnable defines if the gRPC-web should be enabled.
+# NOTE: gRPC must also be enabled, otherwise, this configuration is a no-op.
+enable = true
+
+# Address defines the gRPC-web server address to bind to.
+address = "0.0.0.0:9091"
+
+# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk).
+enable-unsafe-cors = false
+
+###############################################################################
+### State Sync Configuration ###
+###############################################################################
+
+# State sync snapshots allow other nodes to rapidly join the network without replaying historical
+# blocks, instead downloading and applying a snapshot of the application state at a given height.
+[state-sync]
+
+# snapshot-interval specifies the block interval at which local state sync snapshots are
+# taken (0 to disable).
+snapshot-interval = 0
+
+# snapshot-keep-recent specifies the number of recent snapshots to keep and serve (0 to keep all).
+snapshot-keep-recent = 2
+
+###############################################################################
+### Store / State Streaming ###
+###############################################################################
+
+[store]
+streamers = []
+
+[streamers]
+[streamers.file]
+keys = ["*", ]
+write_dir = ""
+prefix = ""
+
+# output-metadata specifies if output the metadata file which includes the abci request/responses
+# during processing the block.
+output-metadata = "true"
+
+# stop-node-on-error specifies if propagate the file streamer errors to consensus state machine.
+stop-node-on-error = "true"
+
+# fsync specifies if call fsync after writing the files.
+fsync = "false"
+
+###############################################################################
+### EVM Configuration ###
+###############################################################################
+
+[evm]
+
+# Tracer defines the 'vm.Tracer' type that the EVM will use when the node is run in
+# debug mode. To enable tracing use the '--evm.tracer' flag when starting your node.
+# Valid types are: json|struct|access_list|markdown
+tracer = ""
+
+# MaxTxGasWanted defines the gas wanted for each eth tx returned in ante handler in check tx mode.
+max-tx-gas-wanted = 0
+
+###############################################################################
+### JSON RPC Configuration ###
+###############################################################################
+
+[json-rpc]
+
+# Enable defines if the gRPC server should be enabled.
+enable = false
+
+# Address defines the EVM RPC HTTP server address to bind to.
+address = "127.0.0.1:8545"
+
+# Address defines the EVM WebSocket server address to bind to.
+ws-address = "127.0.0.1:8546"
+
+# API defines a list of JSON-RPC namespaces that should be enabled
+# Example: "eth,txpool,personal,net,debug,web3"
+api = "eth,net,web3"
+
+# GasCap sets a cap on gas that can be used in eth_call/estimateGas (0=infinite). Default: 25,000,000.
+gas-cap = 25000000
+
+# EVMTimeout is the global timeout for eth_call. Default: 5s.
+evm-timeout = "5s"
+
+# TxFeeCap is the global tx-fee cap for send transaction. Default: 1eth.
+txfee-cap = 1
+
+# FilterCap sets the global cap for total number of filters that can be created
+filter-cap = 200
+
+# FeeHistoryCap sets the global cap for total number of blocks that can be fetched
+feehistory-cap = 100
+
+# LogsCap defines the max number of results can be returned from single 'eth_getLogs' query.
+logs-cap = 10000
+
+# BlockRangeCap defines the max block range allowed for 'eth_getLogs' query.
+block-range-cap = 10000
+
+# HTTPTimeout is the read/write timeout of http json-rpc server.
+http-timeout = "30s"
+
+# HTTPIdleTimeout is the idle timeout of http json-rpc server.
+http-idle-timeout = "2m0s"
+
+# AllowUnprotectedTxs restricts unprotected (non EIP155 signed) transactions to be submitted via
+# the node's RPC when the global parameter is disabled.
+allow-unprotected-txs = false
+
+# MaxOpenConnections sets the maximum number of simultaneous connections
+# for the server listener.
+max-open-connections = 0
+
+# EnableIndexer enables the custom transaction indexer for the EVM (ethereum transactions).
+enable-indexer = false
+
+# MetricsAddress defines the EVM Metrics server address to bind to. Pass --metrics in CLI to enable
+# Prometheus metrics path: /debug/metrics/prometheus
+metrics-address = "127.0.0.1:6065"
+
+# Maximum number of bytes returned from eth_call or similar invocations.
+return-data-limit = 100000
+
+# Upgrade height for fix of revert gas refund logic when transaction reverted.
+fix-revert-gas-refund-height = 0
+
+###############################################################################
+### TLS Configuration ###
+###############################################################################
+
+[tls]
+
+# Certificate path defines the cert.pem file path for the TLS configuration.
+certificate-path = ""
+
+# Key path defines the key.pem file path for the TLS configuration.
+key-path = ""
+
+###############################################################################
+### MemIAVL Configuration ###
+###############################################################################
+
+[memiavl]
+
+# Enable defines if the memiavl should be enabled.
+enable = false
+
+# ZeroCopy defines if the memiavl should return slices pointing to mmap-ed buffers directly (zero-copy),
+# the zero-copied slices must not be retained beyond current block's execution.
+# the sdk address cache will be disabled if zero-copy is enabled.
+zero-copy = false
+
+# AsyncCommitBuffer defines the size of asynchronous commit queue, this greatly improve block catching-up
+# performance, -1 means synchronous commit.
+async-commit-buffer = 0
+
+# SnapshotKeepRecent defines what many old snapshots (excluding the latest one) to keep after new snapshots are
+# taken, defaults to 1 to make sure ibc relayers work.
+snapshot-keep-recent = 1
+
+# SnapshotInterval defines the block interval the memiavl snapshot is taken, default to 1000.
+snapshot-interval = 1000
+
+# CacheSize defines the size of the cache for each memiavl store, default to 1000.
+cache-size = 1000
diff --git a/genesisd_config/default_config.toml b/configs/default_config.toml
similarity index 98%
rename from genesisd_config/default_config.toml
rename to configs/default_config.toml
index 1ac2d1ec0c..f8f5100864 100644
--- a/genesisd_config/default_config.toml
+++ b/configs/default_config.toml
@@ -15,7 +15,7 @@
proxy_app = "tcp://127.0.0.1:26658"
# A custom human readable name for this node
-moniker = ""
+moniker = "mygenesismoniker"
# If this node is many blocks behind the tip of the chain, FastSync
# allows them to catchup quickly by downloading blocks in parallel
@@ -209,10 +209,10 @@ laddr = "tcp://0.0.0.0:26656"
external_address = ""
# Comma separated list of seed nodes to connect to
-seeds = "e373348d560877bfa67093070be8cead81ecf10a@135.181.135.29:26656"
+seeds = ""
# Comma separated list of nodes to keep persistent connections to
-persistent_peers = "299ea06a78dd13bc3e075385c7b406d20eac75e4@57.128.22.57:26656,fad4dedc93d3b9200887720d18af0e09b11ec543@51.195.61.14:26656,ebf62cd9be867dec303bf3ea2bc28e37f5b968a5@142.44.143.79:26656"
+persistent_peers = ""
# UPNP port forwarding
upnp = false
@@ -396,7 +396,7 @@ timeout_precommit_delta = "500ms"
# How long we wait after committing a block, before starting on the new
# height (this gives us a chance to receive some more precommits, even
# though we already have +2/3).
-timeout_commit = "10s"
+timeout_commit = "2s"
# How many blocks to look back to check existence of the node's consensus votes before joining consensus
# When non-zero, the node will panic upon restart
diff --git a/configs/default_config_local.toml b/configs/default_config_local.toml
new file mode 100644
index 0000000000..a951f3eec7
--- /dev/null
+++ b/configs/default_config_local.toml
@@ -0,0 +1,471 @@
+# This is a TOML config file.
+# For more information, see https://github.com/toml-lang/toml
+
+# NOTE: Any path below can be absolute (e.g. "/var/myawesomeapp/data") or
+# relative to the home directory (e.g. "data"). The home directory is
+# "$HOME/.cometbft" by default, but could be changed via $CMTHOME env variable
+# or --home cmd flag.
+
+#######################################################################
+### Main Base Config Options ###
+#######################################################################
+
+# TCP or UNIX socket address of the ABCI application,
+# or the name of an ABCI application compiled in with the CometBFT binary
+proxy_app = "tcp://127.0.0.1:26658"
+
+# A custom human readable name for this node
+moniker = "mygenesismoniker"
+
+# If this node is many blocks behind the tip of the chain, FastSync
+# allows them to catchup quickly by downloading blocks in parallel
+# and verifying their commits
+fast_sync = true
+
+# Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb
+# * goleveldb (github.com/syndtr/goleveldb - most popular implementation)
+# - pure go
+# - stable
+# * cleveldb (uses levigo wrapper)
+# - fast
+# - requires gcc
+# - use cleveldb build tag (go build -tags cleveldb)
+# * boltdb (uses etcd's fork of bolt - github.com/etcd-io/bbolt)
+# - EXPERIMENTAL
+# - may be faster is some use-cases (random reads - indexer)
+# - use boltdb build tag (go build -tags boltdb)
+# * rocksdb (uses github.com/tecbot/gorocksdb)
+# - EXPERIMENTAL
+# - requires gcc
+# - use rocksdb build tag (go build -tags rocksdb)
+# * badgerdb (uses github.com/dgraph-io/badger)
+# - EXPERIMENTAL
+# - use badgerdb build tag (go build -tags badgerdb)
+db_backend = "goleveldb"
+
+# Database directory
+db_dir = "data"
+
+# Output level for logging, including package level options
+log_level = "info"
+
+# Output format: 'plain' (colored text) or 'json'
+log_format = "plain"
+
+##### additional base config options #####
+
+# Path to the JSON file containing the initial validator set and other meta data
+genesis_file = "config/genesis.json"
+
+# Path to the JSON file containing the private key to use as a validator in the consensus protocol
+priv_validator_key_file = "config/priv_validator_key.json"
+
+# Path to the JSON file containing the last sign state of a validator
+priv_validator_state_file = "data/priv_validator_state.json"
+
+# TCP or UNIX socket address for CometBFT to listen on for
+# connections from an external PrivValidator process
+priv_validator_laddr = ""
+
+# Path to the JSON file containing the private key to use for node authentication in the p2p protocol
+node_key_file = "config/node_key.json"
+
+# Mechanism to connect to the ABCI application: socket | grpc
+abci = "socket"
+
+# If true, query the ABCI app on connecting to a new peer
+# so the app can decide if we should keep the connection or not
+filter_peers = false
+
+
+#######################################################################
+### Advanced Configuration Options ###
+#######################################################################
+
+#######################################################
+### RPC Server Configuration Options ###
+#######################################################
+[rpc]
+
+# TCP or UNIX socket address for the RPC server to listen on
+laddr = "tcp://127.0.0.1:26657"
+
+# A list of origins a cross-domain request can be executed from
+# Default value '[]' disables cors support
+# Use '["*"]' to allow any origin
+cors_allowed_origins = []
+
+# A list of methods the client is allowed to use with cross-domain requests
+cors_allowed_methods = ["HEAD", "GET", "POST", ]
+
+# A list of non simple headers the client is allowed to use with cross-domain requests
+cors_allowed_headers = ["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time", ]
+
+# TCP or UNIX socket address for the gRPC server to listen on
+# NOTE: This server only supports /broadcast_tx_commit
+grpc_laddr = ""
+
+# Maximum number of simultaneous connections.
+# Does not include RPC (HTTP&WebSocket) connections. See max_open_connections
+# If you want to accept a larger number than the default, make sure
+# you increase your OS limits.
+# 0 - unlimited.
+# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files}
+# 1024 - 40 - 10 - 50 = 924 = ~900
+grpc_max_open_connections = 900
+
+# Activate unsafe RPC commands like /dial_seeds and /unsafe_flush_mempool
+unsafe = false
+
+# Maximum number of simultaneous connections (including WebSocket).
+# Does not include gRPC connections. See grpc_max_open_connections
+# If you want to accept a larger number than the default, make sure
+# you increase your OS limits.
+# 0 - unlimited.
+# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files}
+# 1024 - 40 - 10 - 50 = 924 = ~900
+max_open_connections = 900
+
+# Maximum number of unique clientIDs that can /subscribe
+# If you're using /broadcast_tx_commit, set to the estimated maximum number
+# of broadcast_tx_commit calls per block.
+max_subscription_clients = 100
+
+# Maximum number of unique queries a given client can /subscribe to
+# If you're using GRPC (or Local RPC client) and /broadcast_tx_commit, set to
+# the estimated # maximum number of broadcast_tx_commit calls per block.
+max_subscriptions_per_client = 5
+
+# Experimental parameter to specify the maximum number of events a node will
+# buffer, per subscription, before returning an error and closing the
+# subscription. Must be set to at least 100, but higher values will accommodate
+# higher event throughput rates (and will use more memory).
+experimental_subscription_buffer_size = 200
+
+# Experimental parameter to specify the maximum number of RPC responses that
+# can be buffered per WebSocket client. If clients cannot read from the
+# WebSocket endpoint fast enough, they will be disconnected, so increasing this
+# parameter may reduce the chances of them being disconnected (but will cause
+# the node to use more memory).
+#
+# Must be at least the same as "experimental_subscription_buffer_size",
+# otherwise connections could be dropped unnecessarily. This value should
+# ideally be somewhat higher than "experimental_subscription_buffer_size" to
+# accommodate non-subscription-related RPC responses.
+experimental_websocket_write_buffer_size = 200
+
+# If a WebSocket client cannot read fast enough, at present we may
+# silently drop events instead of generating an error or disconnecting the
+# client.
+#
+# Enabling this experimental parameter will cause the WebSocket connection to
+# be closed instead if it cannot read fast enough, allowing for greater
+# predictability in subscription behaviour.
+experimental_close_on_slow_client = false
+
+# How long to wait for a tx to be committed during /broadcast_tx_commit.
+# WARNING: Using a value larger than 10s will result in increasing the
+# global HTTP write timeout, which applies to all connections and endpoints.
+# See https://github.com/tendermint/tendermint/issues/3435
+timeout_broadcast_tx_commit = "10s"
+
+# Maximum size of request body, in bytes
+max_body_bytes = 1000000
+
+# Maximum size of request header, in bytes
+max_header_bytes = 1048576
+
+# The path to a file containing certificate that is used to create the HTTPS server.
+# Might be either absolute path or path related to CometBFT's config directory.
+# If the certificate is signed by a certificate authority,
+# the certFile should be the concatenation of the server's certificate, any intermediates,
+# and the CA's certificate.
+# NOTE: both tls_cert_file and tls_key_file must be present for CometBFT to create HTTPS server.
+# Otherwise, HTTP server is run.
+tls_cert_file = ""
+
+# The path to a file containing matching private key that is used to create the HTTPS server.
+# Might be either absolute path or path related to CometBFT's config directory.
+# NOTE: both tls-cert-file and tls-key-file must be present for CometBFT to create HTTPS server.
+# Otherwise, HTTP server is run.
+tls_key_file = ""
+
+# pprof listen address (https://golang.org/pkg/net/http/pprof)
+pprof_laddr = "localhost:6060"
+
+#######################################################
+### P2P Configuration Options ###
+#######################################################
+[p2p]
+
+# Address to listen for incoming connections
+laddr = "tcp://0.0.0.0:26656"
+
+# Address to advertise to peers for them to dial
+# If empty, will use the same port as the laddr,
+# and will introspect on the listener or use UPnP
+# to figure out the address. ip and port are required
+# example: 159.89.10.97:26656
+external_address = ""
+
+# Comma separated list of seed nodes to connect to
+seeds = ""
+
+# Comma separated list of nodes to keep persistent connections to
+persistent_peers = ""
+
+# UPNP port forwarding
+upnp = false
+
+# Path to address book
+addr_book_file = "config/addrbook.json"
+
+# Set true for strict address routability rules
+# Set false for private or local networks
+addr_book_strict = false
+
+# Maximum number of inbound peers
+max_num_inbound_peers = 40
+
+# Maximum number of outbound peers to connect to, excluding persistent peers
+max_num_outbound_peers = 10
+
+# List of node IDs, to which a connection will be (re)established ignoring any existing limits
+unconditional_peer_ids = ""
+
+# Maximum pause when redialing a persistent peer (if zero, exponential backoff is used)
+persistent_peers_max_dial_period = "0s"
+
+# Time to wait before flushing messages out on the connection
+flush_throttle_timeout = "100ms"
+
+# Maximum size of a message packet payload, in bytes
+max_packet_msg_payload_size = 1024
+
+# Rate at which packets can be sent, in bytes/second
+send_rate = 5120000
+
+# Rate at which packets can be received, in bytes/second
+recv_rate = 5120000
+
+# Set true to enable the peer-exchange reactor
+pex = true
+
+# Seed mode, in which node constantly crawls the network and looks for
+# peers. If another node asks it for addresses, it responds and disconnects.
+#
+# Does not work if the peer-exchange reactor is disabled.
+seed_mode = false
+
+# Comma separated list of peer IDs to keep private (will not be gossiped to other peers)
+private_peer_ids = ""
+
+# Toggle to disable guard against peers connecting from the same ip.
+allow_duplicate_ip = true
+
+# Peer connection configuration.
+handshake_timeout = "20s"
+dial_timeout = "3s"
+
+#######################################################
+### Mempool Configuration Option ###
+#######################################################
+[mempool]
+
+# Mempool version to use:
+# 1) "v0" - (default) FIFO mempool.
+# 2) "v1" - prioritized mempool.
+version = "v0"
+
+# Recheck (default: true) defines whether CometBFT should recheck the
+# validity for all remaining transaction in the mempool after a block.
+# Since a block affects the application state, some transactions in the
+# mempool may become invalid. If this does not apply to your application,
+# you can disable rechecking.
+recheck = true
+broadcast = true
+wal_dir = ""
+
+# Maximum number of transactions in the mempool
+size = 5000
+
+# Limit the total size of all txs in the mempool.
+# This only accounts for raw transactions (e.g. given 1MB transactions and
+# max_txs_bytes=5MB, mempool will only accept 5 transactions).
+max_txs_bytes = 1073741824
+
+# Size of the cache (used to filter transactions we saw earlier) in transactions
+cache_size = 10000
+
+# Do not remove invalid transactions from the cache (default: false)
+# Set to true if it's not possible for any invalid transaction to become valid
+# again in the future.
+keep-invalid-txs-in-cache = false
+
+# Maximum size of a single transaction.
+# NOTE: the max size of a tx transmitted over the network is {max_tx_bytes}.
+max_tx_bytes = 1048576
+
+# Maximum size of a batch of transactions to send to a peer
+# Including space needed by encoding (one varint per transaction).
+# XXX: Unused due to https://github.com/tendermint/tendermint/issues/5796
+max_batch_bytes = 0
+
+# ttl-duration, if non-zero, defines the maximum amount of time a transaction
+# can exist for in the mempool.
+#
+# Note, if ttl-num-blocks is also defined, a transaction will be removed if it
+# has existed in the mempool at least ttl-num-blocks number of blocks or if it's
+# insertion time into the mempool is beyond ttl-duration.
+ttl-duration = "0s"
+
+# ttl-num-blocks, if non-zero, defines the maximum number of blocks a transaction
+# can exist for in the mempool.
+#
+# Note, if ttl-duration is also defined, a transaction will be removed if it
+# has existed in the mempool at least ttl-num-blocks number of blocks or if
+# it's insertion time into the mempool is beyond ttl-duration.
+ttl-num-blocks = 0
+
+#######################################################
+### State Sync Configuration Options ###
+#######################################################
+[statesync]
+# State sync rapidly bootstraps a new node by discovering, fetching, and restoring a state machine
+# snapshot from peers instead of fetching and replaying historical blocks. Requires some peers in
+# the network to take and serve state machine snapshots. State sync is not attempted if the node
+# has any local state (LastBlockHeight > 0). The node will have a truncated block history,
+# starting from the height of the snapshot.
+enable = false
+
+# RPC servers (comma-separated) for light client verification of the synced state machine and
+# retrieval of state data for node bootstrapping. Also needs a trusted height and corresponding
+# header hash obtained from a trusted source, and a period during which validators can be trusted.
+#
+# For Cosmos SDK-based chains, trust_period should usually be about 2/3 of the unbonding time (~2
+# weeks) during which they can be financially punished (slashed) for misbehavior.
+rpc_servers = ""
+trust_height = 0
+trust_hash = ""
+trust_period = "168h0m0s"
+
+# Time to spend discovering snapshots before initiating a restore.
+discovery_time = "15s"
+
+# Temporary directory for state sync snapshot chunks, defaults to the OS tempdir (typically /tmp).
+# Will create a new, randomly named directory within, and remove it when done.
+temp_dir = ""
+
+# The timeout duration before re-requesting a chunk, possibly from a different
+# peer (default: 1 minute).
+chunk_request_timeout = "10s"
+
+# The number of concurrent chunk fetchers to run (default: 1).
+chunk_fetchers = "4"
+
+#######################################################
+### Fast Sync Configuration Connections ###
+#######################################################
+[fastsync]
+
+# Fast Sync version to use:
+# 1) "v0" (default) - the legacy fast sync implementation
+# 2) "v1" - refactor of v0 version for better testability
+# 2) "v2" - complete redesign of v0, optimized for testability & readability
+version = "v0"
+
+#######################################################
+### Consensus Configuration Options ###
+#######################################################
+[consensus]
+
+wal_file = "data/cs.wal/wal"
+
+# How long we wait for a proposal block before prevoting nil
+timeout_propose = "3s"
+# How much timeout_propose increases with each round
+timeout_propose_delta = "500ms"
+# How long we wait after receiving +2/3 prevotes for “anything” (ie. not a single block or nil)
+timeout_prevote = "1s"
+# How much the timeout_prevote increases with each round
+timeout_prevote_delta = "500ms"
+# How long we wait after receiving +2/3 precommits for “anything” (ie. not a single block or nil)
+timeout_precommit = "1s"
+# How much the timeout_precommit increases with each round
+timeout_precommit_delta = "500ms"
+# How long we wait after committing a block, before starting on the new
+# height (this gives us a chance to receive some more precommits, even
+# though we already have +2/3).
+timeout_commit = "2s"
+
+# How many blocks to look back to check existence of the node's consensus votes before joining consensus
+# When non-zero, the node will panic upon restart
+# if the same consensus key was used to sign {double_sign_check_height} last blocks.
+# So, validators should stop the state machine, wait for some blocks, and then restart the state machine to avoid panic.
+double_sign_check_height = 0
+
+# Make progress as soon as we have all the precommits (as if TimeoutCommit = 0)
+skip_timeout_commit = false
+
+# EmptyBlocks mode and possible interval between empty blocks
+create_empty_blocks = true
+create_empty_blocks_interval = "0s"
+
+# Reactor sleep duration parameters
+peer_gossip_sleep_duration = "100ms"
+peer_query_maj23_sleep_duration = "2s"
+
+#######################################################
+### Storage Configuration Options ###
+#######################################################
+[storage]
+
+# Set to true to discard ABCI responses from the state store, which can save a
+# considerable amount of disk space. Set to false to ensure ABCI responses are
+# persisted. ABCI responses are required for /block_results RPC queries, and to
+# reindex events in the command-line tool.
+discard_abci_responses = false
+
+#######################################################
+### Transaction Indexer Configuration Options ###
+#######################################################
+[tx_index]
+
+# What indexer to use for transactions
+#
+# The application will set which txs to index. In some cases a node operator will be able
+# to decide which txs to index based on configuration set in the application.
+#
+# Options:
+# 1) "null"
+# 2) "kv" (default) - the simplest possible indexer, backed by key-value storage (defaults to levelDB; see DBBackend).
+# - When "kv" is chosen "tx.height" and "tx.hash" will always be indexed.
+# 3) "psql" - the indexer services backed by PostgreSQL.
+# When "kv" or "psql" is chosen "tx.height" and "tx.hash" will always be indexed.
+indexer = "kv"
+
+# The PostgreSQL connection configuration, the connection format:
+# postgresql://:@:/?
+psql-conn = ""
+
+#######################################################
+### Instrumentation Configuration Options ###
+#######################################################
+[instrumentation]
+
+# When true, Prometheus metrics are served under /metrics on
+# PrometheusListenAddr.
+# Check out the documentation for the list of available metrics.
+prometheus = false
+
+# Address to listen for Prometheus collector(s) connections
+prometheus_listen_addr = ":26660"
+
+# Maximum number of simultaneous connections.
+# If you want to accept a larger number than the default, make sure
+# you increase your OS limits.
+# 0 - unlimited.
+max_open_connections = 3
+
+# Instrumentation namespace
+namespace = "cometbft"
diff --git a/default.nix b/default.nix
index cb0e388b57..7375432d19 100644
--- a/default.nix
+++ b/default.nix
@@ -4,18 +4,18 @@
, nix-gitignore
, buildPackages
, rocksdb
-, network ? "mainnet" # mainnet|testnet
+, network ? "testnet" # mainnet|testnet
, rev ? "dirty"
, static ? stdenv.hostPlatform.isStatic
, nativeByteOrder ? true # nativeByteOrder mode will panic on big endian machines
}:
let
- version = "v1.0.12";
- pname = "cronosd";
+ version = "v1.0.0";
+ pname = "tgenesisd";
tags = [ "ledger" "netgo" network "rocksdb" "grocksdb_no_link" ]
++ lib.optionals nativeByteOrder [ "nativebyteorder" ];
ldflags = lib.concatStringsSep "\n" ([
- "-X github.com/cosmos/cosmos-sdk/version.Name=cronos"
+ "-X github.com/cosmos/cosmos-sdk/version.Name=tgenesis"
"-X github.com/cosmos/cosmos-sdk/version.AppName=${pname}"
"-X github.com/cosmos/cosmos-sdk/version.Version=${version}"
"-X github.com/cosmos/cosmos-sdk/version.BuildTags=${lib.concatStringsSep "," tags}"
@@ -37,7 +37,7 @@ buildGoApplication rec {
] ./.);
modules = ./gomod2nix.toml;
pwd = src; # needed to support replace
- subPackages = [ "cmd/cronosd" ];
+ subPackages = [ "cmd/tgenesisd" ];
CGO_ENABLED = "1";
CGO_LDFLAGS =
if static then "-lrocksdb -pthread -lstdc++ -ldl -lzstd -lsnappy -llz4 -lbz2 -lz"
@@ -45,15 +45,15 @@ buildGoApplication rec {
else "-lrocksdb -pthread -lstdc++ -ldl";
postFixup = lib.optionalString stdenv.isDarwin ''
- ${stdenv.cc.targetPrefix}install_name_tool -change "@rpath/librocksdb.7.dylib" "${rocksdb}/lib/librocksdb.dylib" $out/bin/cronosd
+ ${stdenv.cc.targetPrefix}install_name_tool -change "@rpath/librocksdb.8.dylib" "${rocksdb}/lib/librocksdb.dylib" $out/bin/tgenesisd
'';
doCheck = false;
meta = with lib; {
- description = "Official implementation of the Cronos blockchain protocol";
- homepage = "https://cronos.org/";
+ description = "Official implementation of the GenesisL1 Testnet protocol (fork of Cronos)";
+ homepage = "https://genesisl1.com/";
license = licenses.asl20;
- mainProgram = "cronosd" + stdenv.hostPlatform.extensions.executable;
+ mainProgram = "tgenesisd" + stdenv.hostPlatform.extensions.executable;
platforms = platforms.all;
};
}
diff --git a/flake.nix b/flake.nix
index d96309235e..a19464e815 100644
--- a/flake.nix
+++ b/flake.nix
@@ -35,17 +35,17 @@
};
in
rec {
- packages = pkgs.cronos-matrix // {
+ packages = pkgs.tgenesis-matrix // {
inherit (pkgs) rocksdb;
};
apps = {
- cronosd = mkApp packages.cronosd;
- cronosd-testnet = mkApp packages.cronosd-testnet;
+ tgenesisd = mkApp packages.tgenesisd;
+ tgenesisd-testnet = mkApp packages.tgenesisd-testnet;
};
- defaultPackage = packages.cronosd;
- defaultApp = apps.cronosd;
+ defaultPackage = packages.tgenesisd;
+ defaultApp = apps.tgenesisd;
devShells = {
- cronosd = pkgs.mkShell {
+ tgenesisd = pkgs.mkShell {
buildInputs = with pkgs; [
go_1_20
rocksdb
@@ -53,7 +53,7 @@
];
};
};
- devShell = devShells.cronosd;
+ devShell = devShells.tgenesisd;
legacyPackages = pkgs;
}
)
@@ -70,7 +70,7 @@
--owner=0 --group=0 --mode=u+rw,uga+r --hard-dereference . \
| gzip -9 > $out
'';
- bundle-win-exe = drv: final.callPackage ./nix/bundle-win-exe.nix { cronosd = drv; };
+ bundle-win-exe = drv: final.callPackage ./nix/bundle-win-exe.nix { tgenesisd = drv; };
} // (with final;
let
matrix = lib.cartesianProductOfSets {
@@ -84,33 +84,33 @@
binaries = builtins.listToAttrs (builtins.map
({ network, pkgtype }: {
name = builtins.concatStringsSep "-" (
- [ "cronosd" ] ++
+ [ "tgenesisd" ] ++
lib.optional (network != "mainnet") network ++
lib.optional (pkgtype != "nix") pkgtype
);
value =
let
- cronosd = callPackage ./. {
+ tgenesisd = callPackage ./. {
inherit rev network;
};
bundle =
if stdenv.hostPlatform.isWindows then
- bundle-win-exe cronosd
+ bundle-win-exe tgenesisd
else
- bundle-exe cronosd;
+ bundle-exe tgenesisd;
in
if pkgtype == "bundle" then
bundle
else if pkgtype == "tarball" then
make-tarball bundle
else
- cronosd;
+ tgenesisd;
})
matrix
);
in
{
- cronos-matrix = binaries;
+ tgenesis-matrix = binaries;
}
);
};
diff --git a/genesisd-crisis.service b/genesisd-crisis.service
deleted file mode 100644
index dce100b552..0000000000
--- a/genesisd-crisis.service
+++ /dev/null
@@ -1,15 +0,0 @@
-[Unit]
-Description=genesisd daemon
-After=network.target
-
-[Service]
-Type=simple
-User=root
-WorkingDirectory=/root
-ExecStart=/root/go/bin/genesisd start --x-crisis-skip-assert-invariants --log_level info
-Restart=on-failure
-RestartSec=60
-LimitNOFILE=50000
-
-[Install]
-WantedBy=multi-user.target
diff --git a/genesisd.sh b/genesisd.sh
deleted file mode 100644
index 67bbede468..0000000000
--- a/genesisd.sh
+++ /dev/null
@@ -1,339 +0,0 @@
-#!/bin/bash
-cat << "EOF"
-
- /$$$$$$ /$$ /$$ /$$
- /$$__ $$ |__/ | $$ /$$$$
-| $$ \__/ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$$ /$$ /$$$$$$$ | $$ |_ $$
-| $$ /$$$$ /$$__ $$| $$__ $$ /$$__ $$ /$$_____/| $$ /$$_____/ | $$ | $$
-| $$|_ $$| $$$$$$$$| $$ \ $$| $$$$$$$$| $$$$$$ | $$| $$$$$$ | $$ | $$
-| $$ \ $$| $$_____/| $$ | $$| $$_____/ \____ $$| $$ \____ $$ | $$ | $$
-| $$$$$$/| $$$$$$$| $$ | $$| $$$$$$$ /$$$$$$$/| $$ /$$$$$$$/ | $$$$$$$$ /$$$$$$
- \______/ \_______/|__/ |__/ \_______/|_______/ |__/|_______/ |________/|______/
-
-Welcome to the decentralized blockchain Renaissance, above money & beyond cryptocurrency!
-This script upgrades genesis_29-2 (evmos) to genesis_29-2 (cronos) running under root user.
-GENESIS L1 is a highly experimental decentralized project, provided AS IS, with NO WARRANTY.
-GENESIS L1 IS A NON COMMERCIAL OPEN DECENTRALIZED BLOCKCHAIN PROJECT RELATED TO SCIENCE AND ART
-THIS IS AN UPGRADE TO COSMOS SDK V0.46.15 BASED ON CRONOS RELEASE SOURCE CODE, THANK YOU!
-
- Mainnet EVM chain ID: 29
- Cosmos chain ID: genesis_29-2
- Blockchain utilitarian coin: L1
- Min. coin unit: el1
- 1 L1 = 1 000 000 000 000 000 000 el1
- Initial supply: 21 000 000 L1
- genesis_29-2 at the time of upgrade circulation: ~29 000 000 L1
- Mint rate: < 20% annual
- Block target time: ~11s
- Binary name: genesisd
- genesis_29-1 start: Nov 30, 2021
- genesis_29-2 (evmos) start: Apr 16, 2022
- genesis_29-2 (cronos) start: Aug 26, 2023
-
-EOF
-
-# User-configurable variables
-minimum_combined_gb=150
-disk_headroom_gb=50
-backup_dir=".genesisd_backup_$(date +"%Y%m%d%H%M%S")"
-
-# Fixed/default variables (do not modify)
-moniker=""
-repo_dir=$(cd "$(dirname "$0")" && pwd)
-crisis_skip=false
-skip_state_download=false
-reset_priv_val_state=false
-no_service=false
-no_start=false
-
-if [ "$(id -u)" -ne 0 ]; then
- echo "This script must be run as the root user."
- exit 1
-fi
-
-if [ "$#" -lt 1 ]; then
- echo "Usage: $0 [moniker]"
- echo " should be either 'upgrade' or 'init'"
- echo ""
- echo " Options:"
- echo " --crisis-skip Makes sure that genesisd starts with the --x-crisis-skip-assert-invariants flag (default: false)"
- echo " --skip-state-download Skips downloading the genesis.json file, only do this if you're certain to have the correct state file already (default: false)"
- echo " --reset-priv-val-state Resets data/priv_validator_state.json file [UNSAFE] (default: false)"
- echo " --no-service This prevents the genesisd service from being made (default: false)"
- echo " --no-start This prevents the genesisd service from starting at the end of the script (default: false)"
- exit 1
-fi
-
-case "$1" in
- "upgrade")
- if [ "$#" -eq 1 ] || { [ "$#" -ge 2 ] && [ "$(echo "$2" | cut -c 1-2)" = "--" ]; }; then
- moniker=$(grep "moniker" ~/.genesisd/config/config.toml | cut -d'=' -f2 | tr -d '[:space:]"')
-
- if [ -z "$moniker" ]; then
- echo "Error: No moniker found in the current configuration nor has one been provided as an argument."
- exit 1
- fi
-
- echo "Upgrade mode with moniker from previous configuration: $moniker"
- elif [ "$#" -ge 2 ]; then
- moniker="$2"
- echo "Upgrade mode with moniker: $moniker"
- else
- echo "Invalid number of arguments for 'upgrade' mode. Usage: $0 upgrade [moniker]"
- exit 1
- fi
- ;;
- "init")
- if [ "$#" -ge 2 ]; then
- if [ "$(echo "$2" | cut -c 1-2)" = "--" ]; then
- echo "Missing or invalid argument for 'init' mode. Usage: $0 init "
- exit 1
- fi
-
- moniker="$2"
- echo "Init mode with moniker: $moniker"
- else
- echo "Missing or invalid argument for 'init' mode. Usage: $0 init "
- exit 1
- fi
- ;;
- *)
- echo "Invalid command: $1. Please use 'upgrade' or 'init'."
- exit 1
- ;;
-esac
-
-# Process command-line arguments and set corresponding flags
-for arg in "$@"; do
- case "$arg" in
- --crisis-skip)
- crisis_skip=true
- ;;
- --skip-state-download)
- skip_state_download=true
- ;;
- --reset-priv-val-state)
- reset_priv_val_state=true
- ;;
- --no-service)
- no_service=true
- ;;
- --no-start)
- no_start=true
- ;;
- *)
- # Handle other arguments or flags here
- ;;
- esac
-done
-
-$crisis_skip && echo "o Will add the '--x-crisis-skip-assert-invariants'-flag to the genesisd.service (--crisis-skip: $crisis_skip)"
-$skip_state_download && echo "o Will skip downloading the genesis.json file (--skip-state-download: $skip_state_download)"
-$reset_priv_val_state && echo "o Will reset the data/priv_validator_state.json file [UNSAFE] (--reset-priv-val-state: $reset_priv_val_state)"
-! $reset_priv_val_state && echo "o Will preserve the data/priv_validator_state.json (--reset-priv-val-state: $reset_priv_val_state)"
-$no_service && echo "o Will skip installing genesisd as a service (--no-service: $no_service)"
-if ! $no_service && $no_start; then
- echo "o Will skip starting the genesisd service at the end of the script (--no-start: $no_start)"
-fi
-
-echo ""
-echo "Please note that the Genesis daemon will be halted before proceeding. You will have a 20-second window to cancel this action."
-sleep 20s
-
-service genesis stop
-service genesisd stop
-
-sleep 3s
-
-# Function: adds a line to a file if it doesn't already exist (to prevent duplicates)
-add_line_to_file() {
- local line="$1"
- local file="$2"
- local use_sudo="$3"
-
- if ! grep -qF "$line" "$file"; then
- if $use_sudo; then
- echo "$line" | sudo tee -a "$file" > /dev/null
- else
- echo "$line" >> "$file"
- fi
-
- echo "Line '$line' added to $file."
- else
- echo "Line '$line' already exists in $file."
- fi
-}
-
-# ADD ADDITIONAL SWAP (IF NECESSARY)
-total_ram_kb=$(grep MemAvailable /proc/meminfo | awk '{print $2}')
-total_swap_kb=$(grep SwapFree /proc/meminfo | awk '{print $2}')
-total_combined_gb=$((($total_ram_kb + $total_swap_kb) / 1024 / 1024))
-available_disk_gb=$(df -BG --output=avail / | awk 'NR==2 {print $1}' | tr -d 'G')
-
-if [ "$total_combined_gb" -lt "$minimum_combined_gb" ]; then
- # Calculate additional swap space needed in gigabytes
- additional_swap_gb=$((minimum_combined_gb - total_combined_gb + 1))
-
- if [ "$available_disk_gb" -lt "$((additional_swap_gb + disk_headroom_gb))" ]; then
- echo ""
- echo "Sorry, your node is too tiny in disk for genesisL1 :)."
- echo "Available disk space: ${available_disk_gb}GB."
- echo "Required disk space (bare minimum): $((additional_swap_gb + disk_headroom_gb))GB"
- exit 1
- fi
-
- echo "Adding ${additional_swap_gb}GB of swap space..."
-
- # Find a suitable name for the new swap file
- index=2
- new_swapfile="/genesisd_swapfile"
- while [ -e $new_swapfile ]; do
- new_swapfile="/genesisd_swapfile_$index"
- index=$((index + 1))
- done
-
- # Create new swap file
- fallocate -l ${additional_swap_gb}G $new_swapfile
- chmod 600 $new_swapfile
- mkswap $new_swapfile
- swapon $new_swapfile
-
- echo "Additional ${additional_swap_gb}GB of swap space added in $new_swapfile."
-
- # Add entry to /etc/fstab to make swapfile persistent
- add_line_to_file "$new_swapfile none swap sw 0 0" /etc/fstab true
-else
- echo "No additional swap space needed."
-fi
-
-sleep 3s
-
-# SYSTEM UPDATE, INSTALLATION OF THE FOLLOWING PACKAGES: jq git wget make gcc build-essential snapd wget ponysay, INSTALLATION OF GO 1.20 via snap
-
-sudo apt-get update -y
-sudo apt-get install jq git wget make gcc build-essential snapd wget -y
-snap install go --channel=1.20/stable --classic
-snap refresh go --channel=1.20/stable --classic
-
-export PATH=$PATH:$(go env GOPATH)/bin
-add_line_to_file 'export PATH=$PATH:$(go env GOPATH)/bin' ~/.bashrc false
-
-# GLOBAL CHANGE OF OPEN FILE LIMITS
-add_line_to_file "* - nofile 50000" /etc/security/limits.conf false
-add_line_to_file "root - nofile 50000" /etc/security/limits.conf false
-add_line_to_file "fs.file-max = 50000" /etc/sysctl.conf false
-ulimit -n 50000
-
-#PONYSAY
-snap install ponysay
-ponysay "Installing genesisd from source code with updated genesis_29-2 mainnet!"
-sleep 5s
-ponysay "WARNING: cosmosvisor, evmosd processes will be killed and evmos, evmosd system services will be stopped with this script on the next step. If you have other blockchains running, you might want to delete those parts of the script!"
-sleep 20s
-
-#STOPPING EVMOSD DAEMON AND COSMOVISOR IF IT WAS NOT STOPPED
-pkill evmosd
-pkill cosmovisor
-service evmos stop
-service evmosd stop
-
-# BACKUP genesis_29-2 (evmos version) .genesisd
-cd
-rsync -r --verbose --exclude 'data' ./.genesisd/ ./"$backup_dir"/
-mkdir -p ./"$backup_dir"/data
-if cp ./.genesisd/data/priv_validator_state.json ./"$backup_dir"/data/priv_validator_state.json; then
- echo "Backed up priv_validator_state.json file"
-fi
-
-# DELETING OF .genesisd FOLDER (PREVIOUS INSTALLATIONS)
-cd
-rm -rf .genesisd
-
-# BUILDING genesisd BINARIES
-cd $repo_dir
-go mod tidy
-make install
-
-# COPY .genesisd_backup FOLDER to .genesisd FOLDER, EXCLUDE data
-cd
-rsync -r --verbose --exclude 'data' ./"$backup_dir"/ ./.genesisd/
-
-# SETTING UP THE NEW chain-id in CONFIG
-genesisd config chain-id genesis_29-2
-
-# INIT MODE WILL CREATE A NEW KEY
-if [ "$1" = "init" ]; then
- genesisd config keyring-backend os
-
- ponysay "IN A FEW MOMENTS GET READY TO WRITE YOUR SECRET SEED PHRASE FOR YOUR NEW KEY NAMED *mygenesiskey*, YOU WILL HAVE 2 MINUTES FOR THIS!!!"
- sleep 20s
- genesisd keys add mygenesiskey --keyring-backend os --algo eth_secp256k1
-
- # Check if the exit status of the previous command is equal to zero (zero means it succeeded, anything else means it failed)
- if [ $? -eq 0 ]; then
- sleep 120s
- fi
-
- genesisd init $moniker --chain-id genesis_29-2
-fi
-
-#IMPORTING GENESIS STATE
-if ! $skip_state_download; then
- cd
- cd .genesisd/config
- rm -r genesis.json
- wget http://135.181.135.29/genesisd/genesis.json
-fi
-cd
-
-# RESET TO IMPORTED genesis.json
-genesisd tendermint unsafe-reset-all
-
-if ! $reset_priv_val_state; then
- if cp ./"$backup_dir"/data/priv_validator_state.json ./.genesisd/data/priv_validator_state.json; then
- echo "Restored backed up priv_validator_state.json file"
- fi
-fi
-
-# CONFIG FILES
-cd ~/.genesisd/config
-
-# these default toml files already have genesis specific configurations set (i.e. timeout_commit 10s, min gas price 50gel etc.).
-cp "$repo_dir/genesisd_config/default_app.toml" ./app.toml
-cp "$repo_dir/genesisd_config/default_config.toml" ./config.toml
-
-# set moniker
-sed -i "s/moniker = \"\"/moniker = \"$moniker\"/" config.toml
-echo "Moniker value set to: $moniker"
-
-# SETTING genesisd AS A SYSTEMD SERVICE
-if ! $no_service; then
- if $crisis_skip; then
- sudo cp "$repo_dir/genesisd-crisis.service" /etc/systemd/system/genesisd.service
- else
- sudo cp "$repo_dir/genesisd.service" /etc/systemd/system/genesisd.service
- fi
-
- systemctl daemon-reload
- systemctl enable genesisd
- sleep 3s
-
- # STARTING NODE
- if ! $no_start; then
-cat << "EOF"
- \\
- \\_
- .---(')
- o( )_-\_
- Node start
-EOF
-
- sleep 5s
- systemctl start genesisd
- ponysay "genesisd node service started, you may try *journalctl -fu genesisd -ocat* or *service genesisd status* command to see it! Welcome to GenesisL1 blockchain!"
- else
- ponysay "genesisd node service installed, use *service genesisd start* to start it! Welcome to GenesisL1 blockchain!"
- fi
-else
- ponysay "genesisd node is ready, use *service genesisd start* to start it! Welcome to GenesisL1 blockchain!"
-fi
\ No newline at end of file
diff --git a/genesisd_docs/UPGRADE_29-2_CRONOS.md b/genesisd_docs/UPGRADE_29-2_CRONOS.md
deleted file mode 100644
index 9101acca56..0000000000
--- a/genesisd_docs/UPGRADE_29-2_CRONOS.md
+++ /dev/null
@@ -1,102 +0,0 @@
-# Chain upgrade: genesis_29-2 (Cronos)
-
-This readme is a guide on how to upgrade your node from genesis_29-2 (evmos) to genesis_29-2 (cronos) and what you should be paying attention to.
-
-**IMPORTANT:** Make sure you backup your keys before running the `genesisd.sh` script. Even if it is configured to make a backup of everything, manually doing one yourself is always wise in case anything goes wrong.
-
-Also, for those who come from genesis_29-2 (evmos), do note that this is a different repository than we used before. The old one was named `genesisd`, this one `genesisL1`. Thus don't skip the first steps if you haven't already git cloned the new repository.
-
----
-
-###
1. I am new, I am not a validator yet, but would like to join 🎉
-
-#### Oneliner:
-
-Make sure to replace in the oneliner below with a name of your choice.
-
-```
-cd ~ && git clone https://github.com/alpha-omega-labs/genesisL1.git && cd genesisL1 && sh genesisd.sh init --reset-priv-val-state
-```
-
-#### Or, step-by-step:
-
-1. `cd ~`
-2. `git clone https://github.com/alpha-omega-labs/genesisL1.git`
-3. `cd genesisL1`
-4. `sh genesisd.sh init --reset-priv-val-state`
-
- _replace with a name of your choice_
-
- _the --reset-priv-val-state flag is an extra pre-caution to prevent old values to be used in your new node (if you already had a .genesisd folder)._
-
----
-
-###
2. I am a validator and I NEVER upgraded to the 'cronos' version of GenesisL1 🥱
-
-This means that you still use the `genesisd` repository and not the `genesisL1` repository. If this is the case, then:
-
-#### Oneliner:
-
-```
-cd ~ && git clone https://github.com/alpha-omega-labs/genesisL1.git && cd genesisL1 && sh genesisd.sh upgrade --reset-priv-val-state
-```
-
-#### Or, step-by-step:
-
-1. `cd ~`
-2. `git clone https://github.com/alpha-omega-labs/genesisL1.git`
-3. `cd genesisL1`
-4. `sh genesisd.sh upgrade --reset-priv-val-state`
-
- _in case you want to change your node's name, you could also run sh genesisd.sh upgrade --reset-priv-val-state and replace with a name of your choice._
-
----
-
-###
3. I am a validator and I HAVE upgraded to the 'cronos' version of GenesisL1 😎
-
-#### Oneliner:
-
-```
-cd ~ && rm -r genesisL1 && git clone https://github.com/alpha-omega-labs/genesisL1.git && cd genesisL1 && sh genesisd.sh upgrade --skip-state-download
-```
-
-#### Or, step-by-step:
-
-1. `cd ~`
-2. `rm -r genesisL1`
-3. `git clone https://github.com/alpha-omega-labs/genesisL1.git`
-4. `cd genesisL1`
-5. `sh genesisd.sh upgrade --skip-state-download`
-
- _in case you want to change your node's name, you could also run sh genesisd.sh upgrade --skip-state-download and replace with a name of your choice._
-
- _--skip-state-download is not necessary but, as you already upgraded, you probably already have the 14GB genesis.json state file thus speeding up the process._
-
----
-
-###
4. I am a validator and I HAVE upgraded to the 'cronos' version of GenesisL1, but prefer to upgrade manually 🤓
-
-For advanced users only. You know who you are. Take note of what exactly happens in the oneliner or step-by-step guide. Important to know is that the `priv_validator_state.json` shouldn't date back to when we were at 29-2 (evmos), else you will not be able to participate properly in the consensus. Your `priv_validator_state.json`-file would then point to a block height that's, at the time of writing, in the future (probably to 6751398 or 6751399). If you're one of these people then you should skip the backup and restore of the `priv_validator_state.json`-file in the commands below.
-
-_The commands below don't take care of this for it's too user-specific, but make sure that your config.toml and app.toml are up-to-date. If you participated in the cronos upgrade and already copied over the config files in the `/genesisd_config/` folder or used the `genesisd.sh` script back then, then you're good, else you should check the folder to see what the config files are supposed to look like. Do not forget to restore your moniker and any other settings you had if you end up using these pre-configured files._
-
-#### Oneliner:
-
-```
-cd ~ && rm -r genesisL1 && git clone https://github.com/alpha-omega-labs/genesisL1.git && service genesisd stop && cd genesisL1 && go mod tidy && make install && cd ~/.genesisd && cp ./data/priv_validator_state.json ./priv_validator_state.json && genesisd tendermint unsafe-reset-all && mv ./priv_validator_state.json ./data/priv_validator_state.json && service genesisd start
-```
-
-#### Or, step-by-step:
-
-1. `cd ~`
-2. `rm -r genesisL1`
-3. `git clone https://github.com/alpha-omega-labs/genesisL1.git`
-4. `service genesisd stop`
-5. `cd genesisL1`
-6. `go mod tidy`
-7. `make install`
-8. `cd ~/.genesisd`
-9. `cp ./data/priv_validator_state.json ./priv_validator_state.json`
-10. `genesisd tendermint unsafe-reset-all`
-12. `mv ./priv_validator_state.json ./data/priv_validator_state.json`
-13. `service genesisd start`
diff --git a/genesisd_scripts/swap_add.sh b/genesisd_scripts/swap_add.sh
deleted file mode 100644
index ec0ee57ebf..0000000000
--- a/genesisd_scripts/swap_add.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/bash
-
-if [ "$#" -ne 1 ]; then
- echo "Usage: $0 "
- echo " should be the desired size of the swap file in gigabytes (GB)."
- exit 1
-fi
-
-swap_size_in_gb="$1"
-
-# Validate that the argument is a positive integer
-if ! expr "$swap_size_in_gb" : '^[0-9]\+$' > /dev/null; then
- echo "Error: must be a positive integer."
- exit 1
-fi
-
-available_disk_gb=$(df -BG --output=avail / | awk 'NR==2 {print $1}' | tr -d 'G')
-if [ "$available_disk_gb" -lt "$((swap_size_in_gb))" ]; then
- echo "Sorry, you don't have enough space."
- exit 1
-fi
-
-echo "Adding ${swap_size_in_gb}GB of swap space..."
-
-# Find a suitable name for the new swap file
-index=2
-new_swapfile="/genesisd_swapfile"
-while [ -e $new_swapfile ]; do
- new_swapfile="/genesisd_swapfile_$index"
- index=$((index + 1))
-done
-
-# Create new swap file
-fallocate -l ${swap_size_in_gb}G $new_swapfile
-chmod 600 $new_swapfile
-mkswap $new_swapfile
-swapon $new_swapfile
-
-echo "Additional ${swap_size_in_gb}GB of swap space added in $new_swapfile."
-
-# Add entry to /etc/fstab to make swapfile persistent
-line="$new_swapfile none swap sw 0 0"
-file=/etc/fstab
-if ! grep -qF "$line" "$file"; then
- echo "$line" | sudo tee -a "$file" > /dev/null
- echo "Line '$line' added to $file."
-else
- echo "Line '$line' already exists in $file."
-fi
diff --git a/genesisd_scripts/swap_remove.sh b/genesisd_scripts/swap_remove.sh
deleted file mode 100644
index 1294b8bcca..0000000000
--- a/genesisd_scripts/swap_remove.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-# Check if an argument is provided
-if [ "$#" -ne 1 ]; then
- echo "Usage: $0 "
- echo " is the full path to the swap file you wish to remove."
- exit 1
-fi
-
-# Get the provided swap file as an argument
-swapfile_to_remove="$1"
-
-# Check if the swap file starts with '/genesisd_swapfile'
-if [ "$(echo "$swapfile_to_remove" | cut -c 1-18)" != "/genesisd_swapfile" ]; then
- echo "Error: The specified swap file does not start with '/genesisd_swapfile'."
- exit 1
-fi
-
-# Remove the corresponding entry from /etc/fstab
-swapfile_name=$(basename "$swapfile_to_remove")
-sed -i "/^\/$swapfile_name /d" /etc/fstab
-echo "Removed entry for $swapfile_name from /etc/fstab"
-
-# Attempt to disable the swap file
-swapoff -v "$swapfile_to_remove"
-
-# Check if the swap file is still listed as active
-if swapon --show | grep -q "^$swapfile_to_remove "; then
- echo "Swap file $swapfile_to_remove was not removed because it is still in use."
-else
- # Check if the provided swap file exists
- if [ ! -f "$swapfile_to_remove" ]; then
- echo "Error: The specified swap file does not exist."
- exit 1
- fi
-
- # Remove the swap file
- rm -f "$swapfile_to_remove"
- echo "Removed swap file: $swapfile_to_remove"
-fi
\ No newline at end of file
diff --git a/genesisd_scripts/swap_remove_all.sh b/genesisd_scripts/swap_remove_all.sh
deleted file mode 100644
index 78f136984c..0000000000
--- a/genesisd_scripts/swap_remove_all.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/bash
-
-# List all files in the root directory starting with "/genesisd_swapfile"
-files_to_remove=$(find / -maxdepth 1 -type f -name 'genesisd_swapfile*')
-
-# Check if there are any files to remove
-if [ -z "$files_to_remove" ]; then
- echo "No swap files starting with '/genesisd_swapfile' found in the root directory."
-else
- # Iterate through each swap file, disable it, and then remove it
- for file in $files_to_remove; do
- # Attempt to disable the swap file
- swapoff -v "$file"
-
- # Check if the swap file is still listed as active
- if swapon --show | grep -q "^$file "; then
- echo "Swap file $file was not removed because it is still in use."
- else
- # Remove the swap file
- rm -f "$file"
- echo "Removed swap file: $file"
- fi
- done
-fi
-
- # Remove entries related to these swap files from /etc/fstab
-for file in $files_to_remove; do
- # Extract the swap file's name (e.g., genesisd_swapfile)
- swapfile_name=$(basename "$file")
-
- # Remove the corresponding line from /etc/fstab
- sed -i "/^\/$swapfile_name /d" /etc/fstab
- echo "Removed entry for $swapfile_name from /etc/fstab"
-done
\ No newline at end of file
diff --git a/go.mod b/go.mod
index e8d096966d..16d53c6295 100644
--- a/go.mod
+++ b/go.mod
@@ -8,36 +8,36 @@ require (
github.com/armon/go-metrics v0.4.1
github.com/cosmos/cosmos-sdk v0.46.15-0.20230807104542-537257060180
github.com/cosmos/ibc-go/v5 v5.2.1
- github.com/crypto-org-chain/cronos/store v0.0.4
- github.com/crypto-org-chain/cronos/versiondb v0.0.0-20230809065519-af389f66015a
+ github.com/crypto-org-chain/cronos/store v0.0.5
+ github.com/crypto-org-chain/cronos/versiondb v0.0.0-20231115070216-b0af3db7b932
github.com/ethereum/go-ethereum v1.10.26
github.com/evmos/ethermint v0.0.0-00010101000000-000000000000
github.com/gogo/protobuf v1.3.3
github.com/golang/protobuf v1.5.3
github.com/gorilla/mux v1.8.0
github.com/grpc-ecosystem/grpc-gateway v1.16.0
- github.com/linxGnu/grocksdb v1.8.0
+ github.com/linxGnu/grocksdb v1.8.4
github.com/peggyjv/gravity-bridge/module/v2 v2.0.0-00010101000000-000000000000
github.com/rakyll/statik v0.1.7
github.com/spf13/cast v1.5.0
github.com/spf13/cobra v1.6.1
github.com/spf13/pflag v1.0.5
- github.com/stretchr/testify v1.8.3
+ github.com/stretchr/testify v1.8.4
github.com/tendermint/tendermint v0.34.29
github.com/tendermint/tm-db v0.6.7
golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0
- google.golang.org/genproto v0.0.0-20230323212658-478b75c54725
- google.golang.org/grpc v1.54.0
+ google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9
+ google.golang.org/grpc v1.57.0
google.golang.org/protobuf v1.30.0
gopkg.in/yaml.v2 v2.4.0
)
require (
cloud.google.com/go v0.110.0 // indirect
- cloud.google.com/go/compute v1.19.0 // indirect
+ cloud.google.com/go/compute v1.19.1 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
cloud.google.com/go/iam v0.13.0 // indirect
- cloud.google.com/go/storage v1.28.1 // indirect
+ cloud.google.com/go/storage v1.29.0 // indirect
filippo.io/edwards25519 v1.0.0-rc.1 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
github.com/99designs/keyring v1.2.1 // indirect
@@ -64,7 +64,7 @@ require (
github.com/cockroachdb/apd/v2 v2.0.2 // indirect
github.com/cockroachdb/errors v1.8.1 // indirect
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect
- github.com/cockroachdb/pebble v0.0.0-20230315005856-dcb60b9212f9 // indirect
+ github.com/cockroachdb/pebble v0.0.0-20230807182518-7bcdd55ef1e3 // indirect
github.com/cockroachdb/redact v1.0.8 // indirect
github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect
github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect
@@ -77,7 +77,7 @@ require (
github.com/cosmos/iavl v0.19.6 // indirect
github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect
github.com/creachadair/taskgroup v0.3.2 // indirect
- github.com/crypto-org-chain/cronos/memiavl v0.0.4 // indirect
+ github.com/crypto-org-chain/cronos/memiavl v0.0.5 // indirect
github.com/danieljoos/wincred v1.1.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/deckarep/golang-set v1.8.0 // indirect
@@ -102,7 +102,7 @@ require (
github.com/go-stack/stack v1.8.1 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/gogo/gateway v1.1.0 // indirect
- github.com/golang/glog v1.0.0 // indirect
+ github.com/golang/glog v1.1.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/btree v1.1.2 // indirect
@@ -196,7 +196,7 @@ require (
go.opencensus.io v0.24.0 // indirect
golang.org/x/crypto v0.9.0 // indirect
golang.org/x/net v0.10.0 // indirect
- golang.org/x/oauth2 v0.6.0 // indirect
+ golang.org/x/oauth2 v0.7.0 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/term v0.8.0 // indirect
@@ -204,6 +204,8 @@ require (
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
google.golang.org/api v0.114.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
+ google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
@@ -216,18 +218,20 @@ replace (
github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0
// the version used by cockroach v22.2.7 release
github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20230206180212-744ea7cc8f90
- github.com/cometbft/cometbft-db => github.com/alpha-omega-labs/cometbft-db v0.1-genesis
+ github.com/cometbft/cometbft-db => github.com/crypto-org-chain/cometbft-db v0.0.0-20231011055109-57922ac52a63
// dgrijalva/jwt-go is deprecated and doesn't receive security updates.
// TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134
github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2
github.com/ethereum/go-ethereum => github.com/crypto-org-chain/go-ethereum v1.10.19-deepcopy-jumptable
- github.com/evmos/ethermint => github.com/crypto-org-chain/ethermint v0.20.11-cronos.0.20230809091211-3fdb18b1c2d9
+ github.com/evmos/ethermint => github.com/crypto-org-chain/ethermint v0.20.11-cronos.0.20231220064956-a85daedc6ffc
// Fix upstream GHSA-h395-qcrw-5vmq and GHSA-3vp4-m3rf-835h vulnerabilities.
// TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409
github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.0
github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
github.com/jhump/protoreflect => github.com/jhump/protoreflect v1.9.0
+ github.com/linxGnu/grocksdb => github.com/linxGnu/grocksdb v1.8.0
+
github.com/miguelmota/go-ethereum-hdwallet => github.com/crypto-org-chain/go-ethereum-hdwallet v0.1.2
// TODO: remove when gravity update dependencies
@@ -238,4 +242,4 @@ replace (
github.com/tendermint/tendermint => github.com/cometbft/cometbft v0.34.30-0.20230622094628-60e431e4eef0
// https://github.com/crypto-org-chain/tm-db/tree/release/v0.6.x
github.com/tendermint/tm-db => github.com/crypto-org-chain/tm-db v0.6.8-0.20230424032152-87c7e7f4fb61
-)
+)
\ No newline at end of file
diff --git a/go.sum b/go.sum
index c27147deeb..63d6bb665e 100644
--- a/go.sum
+++ b/go.sum
@@ -52,45 +52,80 @@ cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys=
cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4=
cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw=
+cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E=
cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o=
cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE=
+cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM=
+cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ=
cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=
cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=
cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg=
+cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ=
+cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k=
+cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw=
cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=
cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4=
+cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M=
+cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE=
+cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE=
cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk=
cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc=
+cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8=
cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc=
cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04=
+cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8=
+cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY=
+cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM=
+cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc=
+cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU=
+cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI=
+cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8=
cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno=
cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak=
+cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84=
+cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A=
+cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E=
cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4=
cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0=
+cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY=
+cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k=
cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ=
cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk=
cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0=
cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc=
+cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI=
+cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ=
+cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI=
+cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08=
cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o=
cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s=
cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0=
cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ=
cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY=
+cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo=
+cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg=
+cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw=
cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY=
cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw=
cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI=
cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo=
cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0=
+cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E=
cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=
cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8=
cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8=
cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM=
+cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU=
cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc=
cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI=
+cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss=
cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE=
cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE=
+cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g=
cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4=
cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8=
+cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM=
+cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
@@ -100,27 +135,43 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7
cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA=
cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw=
cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc=
+cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E=
+cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac=
+cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q=
+cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU=
cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o=
cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY=
cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s=
cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI=
cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y=
+cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss=
+cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc=
cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM=
cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI=
cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0=
cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk=
+cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q=
cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg=
cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590=
+cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8=
cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk=
cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk=
+cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE=
+cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU=
cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U=
cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA=
+cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M=
+cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg=
+cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s=
cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM=
cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk=
+cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA=
cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY=
cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI=
cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4=
cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI=
+cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y=
+cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs=
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
@@ -133,8 +184,10 @@ cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x
cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE=
cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo=
cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA=
-cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ=
+cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs=
cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU=
+cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY=
+cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE=
cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU=
cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM=
@@ -142,61 +195,98 @@ cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGB
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY=
cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck=
+cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w=
cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg=
cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo=
+cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4=
+cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM=
+cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA=
cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=
cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4=
+cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI=
+cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s=
cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0=
cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs=
cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc=
cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE=
cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM=
+cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M=
+cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0=
+cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8=
cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM=
cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ=
+cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE=
cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo=
cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE=
cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0=
+cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA=
+cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE=
cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38=
cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w=
+cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8=
cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I=
cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ=
+cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM=
cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA=
cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A=
+cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ=
+cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs=
cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s=
cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI=
+cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4=
cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo=
cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA=
+cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM=
+cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c=
cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo=
cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ=
cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g=
cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4=
+cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs=
+cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww=
cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c=
cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s=
+cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI=
+cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ=
cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4=
cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0=
cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8=
cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek=
cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0=
+cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM=
+cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4=
+cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE=
cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM=
cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q=
+cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4=
cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU=
cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU=
cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k=
cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4=
+cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM=
+cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs=
cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y=
cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg=
+cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE=
cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk=
cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w=
+cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc=
+cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY=
cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU=
cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI=
cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8=
+cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M=
cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc=
cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw=
+cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw=
+cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY=
cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w=
cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI=
+cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs=
+cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY=
cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE=
@@ -204,95 +294,146 @@ cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJ
cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg=
cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY=
cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08=
+cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw=
+cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA=
+cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c=
cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM=
cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA=
cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w=
cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM=
+cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0=
cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60=
cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo=
+cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg=
cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o=
cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A=
+cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw=
cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0=
cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0=
+cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E=
+cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw=
cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA=
cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI=
+cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y=
cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=
cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM=
cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o=
+cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo=
cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c=
cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=
cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc=
cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg=
cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE=
+cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY=
+cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY=
cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k=
cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0=
cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc=
cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A=
+cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk=
+cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo=
+cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74=
cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM=
cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY=
+cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4=
cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs=
cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g=
+cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o=
+cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE=
cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA=
cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg=
cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0=
+cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg=
+cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w=
+cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24=
+cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI=
cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=
cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=
cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE=
cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8=
+cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY=
cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=
cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08=
+cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo=
cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw=
+cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M=
cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE=
cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc=
cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM=
+cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo=
cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE=
cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM=
+cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA=
cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI=
+cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw=
+cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY=
cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4=
cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w=
+cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I=
cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE=
cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM=
cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA=
cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY=
+cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM=
cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY=
cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s=
cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8=
cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI=
+cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo=
cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk=
cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4=
+cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w=
+cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw=
cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA=
cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o=
cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM=
cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8=
+cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E=
+cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM=
cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8=
cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4=
+cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY=
cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ=
cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU=
+cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k=
+cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU=
cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY=
cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34=
cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA=
cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0=
+cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE=
+cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ=
cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4=
cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs=
+cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI=
cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA=
cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk=
+cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ=
cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE=
cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc=
+cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc=
cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs=
cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg=
cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo=
cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw=
+cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw=
cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E=
cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU=
cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70=
cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo=
+cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs=
cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0=
cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA=
+cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk=
cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg=
cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE=
+cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw=
+cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc=
cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0=
cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI=
+cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg=
+cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
@@ -300,67 +441,104 @@ cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjp
cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w=
cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI=
cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0=
+cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8=
+cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4=
cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg=
+cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k=
+cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM=
cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4=
cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o=
cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk=
cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo=
cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE=
cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U=
+cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA=
+cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c=
cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg=
cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4=
+cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac=
cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg=
cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c=
cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs=
cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70=
+cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ=
cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y=
cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A=
cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA=
cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM=
+cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ=
cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA=
cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0=
+cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots=
+cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo=
+cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI=
cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU=
cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg=
+cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA=
cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4=
cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY=
cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc=
cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y=
+cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14=
cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do=
cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo=
+cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM=
+cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg=
cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s=
cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI=
cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk=
cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44=
+cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc=
+cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc=
cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA=
cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4=
cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4=
+cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU=
cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4=
cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0=
cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU=
cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q=
cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA=
+cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8=
+cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0=
cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU=
cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc=
cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk=
cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk=
+cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0=
+cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag=
cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU=
cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s=
+cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA=
+cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc=
+cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk=
cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs=
cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg=
cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4=
cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U=
+cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY=
+cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s=
cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco=
cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo=
+cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc=
+cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4=
cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E=
cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU=
+cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec=
+cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA=
cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4=
cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw=
+cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A=
cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk=
cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos=
+cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk=
+cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M=
cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM=
cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ=
cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0=
cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco=
+cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0=
+cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
@@ -370,48 +548,74 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=
cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s=
-cloud.google.com/go/storage v1.28.1 h1:F5QDG5ChchaAVQhINh24U99OWHURqrW8OmQcGKXcbgI=
cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y=
+cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI=
+cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4=
cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w=
cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I=
+cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4=
+cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw=
cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw=
cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g=
cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM=
cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA=
+cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c=
cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8=
cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4=
+cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc=
cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ=
cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg=
+cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM=
cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28=
cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y=
+cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA=
+cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk=
cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs=
cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg=
+cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0=
+cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos=
+cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos=
cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk=
cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw=
+cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg=
+cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk=
+cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ=
+cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ=
cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU=
cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4=
cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M=
cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU=
+cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU=
cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0=
cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo=
cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo=
cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY=
cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E=
+cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY=
+cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0=
cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE=
cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g=
+cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc=
+cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY=
cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208=
+cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8=
+cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY=
cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w=
cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8=
+cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes=
cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE=
cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=
cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc=
cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A=
+cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg=
cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo=
cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ=
+cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng=
cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=
cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=
cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M=
cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA=
+cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw=
code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY=
collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE=
contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA=
@@ -428,8 +632,10 @@ cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuy
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU=
filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
+gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
+git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw=
git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA=
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=
@@ -526,6 +732,7 @@ github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced3
github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
+github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
@@ -601,7 +808,10 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBA
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
+github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY=
+github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
+github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM=
github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE=
github.com/alecthomas/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=
@@ -620,14 +830,18 @@ github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2uc
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
+github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ=
github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0=
+github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0=
+github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
+github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU=
github.com/apex/log v1.1.4/go.mod h1:AlpoD9aScyQfJDVHmLMEcx4oU6LqzkWp4Mg9GdAcEvQ=
github.com/apex/log v1.3.0/go.mod h1:jd8Vpsr46WAe3EZSQ/IUMs2qQD/GOycT5rPWCO1yGcs=
github.com/apex/logs v0.0.4/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo=
@@ -713,6 +927,8 @@ github.com/bombsimon/wsl/v2 v2.2.0/go.mod h1:Azh8c3XGEJl9LyX0/sFC+CKMc7Ssgua0g+6
github.com/bombsimon/wsl/v3 v3.0.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc=
github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc=
github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc=
+github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A=
github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU=
@@ -835,6 +1051,7 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH
github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E=
github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw=
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
@@ -1043,16 +1260,16 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ=
-github.com/crypto-org-chain/cometbft-db v0.0.0-20230412133340-ac70df4b45f6 h1:d4h4Ki1UE/LF6CKwYEm3OZ+HIBCrzSmOokG1vce0O98=
-github.com/crypto-org-chain/cometbft-db v0.0.0-20230412133340-ac70df4b45f6/go.mod h1:hF5aclS++7WrW8USOA3zPeKI0CuzwUD2TPYug25ANlQ=
-github.com/crypto-org-chain/cronos/memiavl v0.0.4 h1:ywuSjZhUjsenM3k0VD58ersWVgKTYBcUo6yK6/+Yfjs=
-github.com/crypto-org-chain/cronos/memiavl v0.0.4/go.mod h1:sCbJoEppeM3/7+Ox1heGlbVt+eWBcTmLb9UEjuotXIc=
-github.com/crypto-org-chain/cronos/store v0.0.4 h1:w3pv5XVLiHQ3f0Ir8MpFjZy8rrBOG5NG5JYBmO9/sL4=
-github.com/crypto-org-chain/cronos/store v0.0.4/go.mod h1:LVocDb5u3bTS1c5IWvjp0Mgn9iQ66Jt5N4osvizpkpY=
-github.com/crypto-org-chain/cronos/versiondb v0.0.0-20230809065519-af389f66015a h1:NUlWNavUQrx5V2YW2bwV64utaDrCf5eoK45vIgW2kWc=
-github.com/crypto-org-chain/cronos/versiondb v0.0.0-20230809065519-af389f66015a/go.mod h1:i9e8vrU54C/JvSM+rX/jUidFRBcyXZ8FgNX+EvrasQc=
-github.com/crypto-org-chain/ethermint v0.20.11-cronos.0.20230809091211-3fdb18b1c2d9 h1:c1KS8c8epruyUAonKBYHDCrCSCsSmGIIPXA/49505dE=
-github.com/crypto-org-chain/ethermint v0.20.11-cronos.0.20230809091211-3fdb18b1c2d9/go.mod h1:EDjmywAw/EMpMufJA2Q+E9pNHAB00Dt5siQanMOZC88=
+github.com/crypto-org-chain/cometbft-db v0.0.0-20231011055109-57922ac52a63 h1:R1QJ9a3XdYMSKo+1RdFifxb/g3lNypC52L/rpYrWoKo=
+github.com/crypto-org-chain/cometbft-db v0.0.0-20231011055109-57922ac52a63/go.mod h1:rocwIfnS+kA060x64gkSIRvWB9StSppIkJuo5MWzL24=
+github.com/crypto-org-chain/cronos/memiavl v0.0.5 h1:Uwt1+7LGYuAem2Jrg2IQM7IqOmHbkgnia24a61joeA4=
+github.com/crypto-org-chain/cronos/memiavl v0.0.5/go.mod h1:sPIAu3w4KkWWTlN92GyLaB/qeMdszSYd6fF3r+p0C+A=
+github.com/crypto-org-chain/cronos/store v0.0.5 h1:Ll9FxohR4I3mJlng+w2m6X7iIqYejJ1jqLWww1VT8Qk=
+github.com/crypto-org-chain/cronos/store v0.0.5/go.mod h1:KC9cV7VK8BNIJySzztw2nWSqPqVGcffsumMl3sORPCM=
+github.com/crypto-org-chain/cronos/versiondb v0.0.0-20231115070216-b0af3db7b932 h1:t4TisWGxHLtmDeugl4KApCuxCplj/avwmlms7GFsJMk=
+github.com/crypto-org-chain/cronos/versiondb v0.0.0-20231115070216-b0af3db7b932/go.mod h1:i9e8vrU54C/JvSM+rX/jUidFRBcyXZ8FgNX+EvrasQc=
+github.com/crypto-org-chain/ethermint v0.20.11-cronos.0.20231220064956-a85daedc6ffc h1:1sdpqaZTdUJtq8N35yVVOhYT/5SzQnA/jI7UYAWXsjw=
+github.com/crypto-org-chain/ethermint v0.20.11-cronos.0.20231220064956-a85daedc6ffc/go.mod h1:EDjmywAw/EMpMufJA2Q+E9pNHAB00Dt5siQanMOZC88=
github.com/crypto-org-chain/go-ethereum v1.10.19-deepcopy-jumptable h1:VQLW0R8t9DcC/HvQZO1i0mIWjJfAezhI8lLUCholP0M=
github.com/crypto-org-chain/go-ethereum v1.10.19-deepcopy-jumptable/go.mod h1:IJBNMtzKcNHPtllYihy6BL2IgK1u+32JriaTbdt4v+w=
github.com/crypto-org-chain/go-ethereum-hdwallet v0.1.2 h1:Qu2GMavGHCcomdVWmZej76JpOO6uvII6IpPDdJUG+Qo=
@@ -1187,11 +1404,13 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.
github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34=
+github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q=
github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws=
github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo=
github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w=
+github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss=
github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0=
github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY=
@@ -1220,6 +1439,7 @@ github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+
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/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
+github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
@@ -1268,6 +1488,11 @@ github.com/go-critic/go-critic v0.4.3/go.mod h1:j4O3D4RoIwRqlZw5jJpx0BNfXWWbpcJo
github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY=
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-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g=
+github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks=
+github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
+github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
+github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY=
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo=
@@ -1285,6 +1510,8 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb
github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
+github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
+github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk=
github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
@@ -1320,6 +1547,8 @@ github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dp
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
+github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
+github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
@@ -1365,6 +1594,7 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
+github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
@@ -1399,8 +1629,9 @@ github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
+github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
+github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -1483,6 +1714,7 @@ github.com/google/crfs v0.0.0-20191108021818-71d77da419c9/go.mod h1:etGhoOqfwPko
github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
+github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -1521,6 +1753,7 @@ github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
+github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us=
github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -1557,6 +1790,7 @@ github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1
github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg=
+github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k=
github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY=
@@ -1842,6 +2076,7 @@ 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/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0=
+github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0=
github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
@@ -1850,12 +2085,14 @@ github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4
github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U=
github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw=
github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0=
+github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
+github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE=
github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
@@ -1870,6 +2107,7 @@ github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4=
github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4=
@@ -1936,8 +2174,6 @@ github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QT
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo=
-github.com/linxGnu/grocksdb v1.7.15/go.mod h1:pY55D0o+r8yUYLq70QmhdudxYvoDb9F+9puf4m3/W+U=
-github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4=
github.com/linxGnu/grocksdb v1.8.0 h1:H4L/LhP7GOMf1j17oQAElHgVlbEje2h14A8Tz9cM2BE=
github.com/linxGnu/grocksdb v1.8.0/go.mod h1:09CeBborffXhXdNpEcOeZrLKEnRtrZFEpFdPNI9Zjjg=
github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
@@ -1947,6 +2183,7 @@ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2
github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w=
github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
+github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
@@ -2010,6 +2247,7 @@ github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lL
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
+github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo=
github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
@@ -2036,6 +2274,8 @@ github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WT
github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM=
github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94=
github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM=
+github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
+github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
@@ -2290,8 +2530,12 @@ github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7c
github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
+github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
+github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
+github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M=
@@ -2406,6 +2650,7 @@ github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNw
github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4=
github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI=
github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
+github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls=
github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls=
github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI=
@@ -2437,6 +2682,8 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR
github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
+github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk=
github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE=
github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM=
github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M=
@@ -2591,8 +2838,9 @@ github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs=
github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo=
@@ -2761,6 +3009,8 @@ github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPS
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
github.com/zbiljic/go-filelock v0.0.0-20170914061330-1dbf7103ab7d h1:XQyeLr7N9iY9mi+TGgsBFkj54+j3fdoo8e2u6zrGP5A=
github.com/zbiljic/go-filelock v0.0.0-20170914061330-1dbf7103ab7d/go.mod h1:hoMeDjlNXTNqVwrCk8YDyaBS2g5vFfEX2ezMi4vb6CY=
+github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
+github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo=
@@ -2852,6 +3102,7 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe
go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ=
go.opentelemetry.io/proto/otlp v0.12.0/go.mod h1:TsIjwGWIx5VFYv9KGVlOpxoBl5Dy+63SUguV7GGvlSQ=
go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
+go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
@@ -2942,6 +3193,7 @@ golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
@@ -2952,6 +3204,7 @@ golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8H
golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA=
+golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw=
golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
@@ -2961,6 +3214,16 @@ golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
+golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
+golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
+golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -2993,7 +3256,9 @@ golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
+golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -3095,7 +3360,10 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
+golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -3131,8 +3399,10 @@ golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=
golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec=
-golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw=
+golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I=
golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
+golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g=
+golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
golang.org/x/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=
@@ -3254,6 +3524,7 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210313202042-bd2e13477e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -3332,6 +3603,7 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
@@ -3347,6 +3619,8 @@ golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
+golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -3364,6 +3638,7 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -3378,6 +3653,7 @@ golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
+golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -3419,6 +3695,7 @@ golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -3488,6 +3765,7 @@ golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -3516,7 +3794,9 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
-golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
+golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
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=
@@ -3530,12 +3810,16 @@ gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJ
gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
-gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM=
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
+gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0=
+gonum.org/v1/gonum v0.11.0 h1:f1IJhK4Km5tBJmaiJXtk/PkL4cdVX6J+tGiM187uT5E=
+gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA=
gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
+gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY=
+gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo=
google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
@@ -3602,6 +3886,11 @@ google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91
google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=
google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo=
google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0=
+google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
+google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
+google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
+google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI=
+google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0=
google.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE=
google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
@@ -3750,14 +4039,40 @@ google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnp
google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo=
+google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
+google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE=
+google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230323212658-478b75c54725 h1:VmCWItVXcKboEMCwZaWge+1JLiTCQSngZeINF+wzO+g=
+google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA=
+google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw=
+google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw=
+google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA=
+google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
+google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
+google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
+google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
+google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY=
+google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54 h1:9NWlQfY2ePejTmfwUH1OWwmznFa+0kKcHGPDvcPza9M=
+google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk=
+google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8=
+google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9 h1:m8v1xLLLzMe1m5P+gCTF8nJB9epwZQUBERm20Oy1poQ=
+google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 h1:0nDDozoAU19Qb2HwhXadU8OcsiO/09cnTqhUtq2MEOM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
@@ -3810,9 +4125,11 @@ google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
+google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
-google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag=
google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
+google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw=
+google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -3831,6 +4148,7 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
@@ -3984,11 +4302,45 @@ k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
+lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
+modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
+modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
+modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
+modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc=
+modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw=
+modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=
+modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=
+modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws=
+modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo=
+modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
+modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
+modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA=
+modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A=
+modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU=
+modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU=
+modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA=
+modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0=
+modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s=
modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k=
+modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
+modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
+modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
+modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw=
+modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw=
+modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
+modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
+modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
+modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4=
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
+modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
+modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
+modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw=
+modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I=
+modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8=
mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ=
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
diff --git a/gomod2nix.toml b/gomod2nix.toml
index 57d62072eb..7b68161aee 100644
--- a/gomod2nix.toml
+++ b/gomod2nix.toml
@@ -5,8 +5,8 @@ schema = 3
version = "v0.110.0"
hash = "sha256-56s9lxMqlQ2sFZOteDv9n0zCC0MTwoczCqSQY2+bT+c="
[mod."cloud.google.com/go/compute"]
- version = "v1.19.0"
- hash = "sha256-zYLTa8JyaZ5UdPwl1YqXSkhTThRBjp7bDDtjmdmPmfA="
+ version = "v1.19.1"
+ hash = "sha256-yVJPN6YFcDPA5fLTEa9Yj5Gsqv2jD+V5uYBi385FeY0="
[mod."cloud.google.com/go/compute/metadata"]
version = "v0.2.3"
hash = "sha256-kYB1FTQRdTDqCqJzSU/jJYbVUGyxbkASUKbEs36FUyU="
@@ -14,8 +14,8 @@ schema = 3
version = "v0.13.0"
hash = "sha256-ZdpvP9zPcuG7MPZ9fbAEnjI4zIDRbNSPmOaHyTEZ914="
[mod."cloud.google.com/go/storage"]
- version = "v1.28.1"
- hash = "sha256-bYy0ul5EB6xSpOnj60zfZRCM28zvF2oK0USurF6j5kI="
+ version = "v1.29.0"
+ hash = "sha256-SPiPdr53zByHMVF30Z7l/b3+8Ih4cC64glJ7wodvfcY="
[mod."cosmossdk.io/errors"]
version = "v1.0.0-beta.7"
hash = "sha256-XblGvIx6Wvvq6wggXjp+KbeJGXoe7AZH7hXEdauCezU="
@@ -118,8 +118,8 @@ schema = 3
version = "v0.7.9"
hash = "sha256-ZWIXIXcHGjeCNgMrpXymry8/8esDDauGFfF/+gEoO1Y="
[mod."github.com/cometbft/cometbft-db"]
- version = "v0.0.0-20230412133340-ac70df4b45f6"
- hash = "sha256-WOubYACTuk6OeHMSbcKIYbQWarWIljQUEvyX3hiXmq8="
+ version = "v0.0.0-20231011055109-57922ac52a63"
+ hash = "sha256-iLs/FN1be3AcoyhKj2+b5Msqeat9j2ja4acyOs+w+Uk="
replaced = "github.com/crypto-org-chain/cometbft-db"
[mod."github.com/confio/ics23/go"]
version = "v0.9.0"
@@ -152,14 +152,14 @@ schema = 3
version = "v0.3.2"
hash = "sha256-Y261IO/d9xjV0UScqHvo31broxvnKn4IQQC9Mu6jNkE="
[mod."github.com/crypto-org-chain/cronos/memiavl"]
- version = "v0.0.4"
- hash = "sha256-8hcapDUsTy4pvmTL7SMUGFlW7S2oGgWN1rXjJfEVq/I="
+ version = "v0.0.5"
+ hash = "sha256-4chV7TmG5Kw4Nac1s0kAcBk5UtyucP5HU5flijas3eg="
[mod."github.com/crypto-org-chain/cronos/store"]
- version = "v0.0.4"
- hash = "sha256-wM7Ye8gMnAXsQTdOdg/x0Hu118U4dY6kvQ15dzPGu9A="
+ version = "v0.0.5"
+ hash = "sha256-L1g4acxQq0V/d6oY3GTixW5nSh+fKsapSbT/nXI4GJI="
[mod."github.com/crypto-org-chain/cronos/versiondb"]
- version = "v0.0.0-20230809065519-af389f66015a"
- hash = "sha256-GFaIoluOc2TFZlLOwwYy7oKHX1dWk0QhvvP7iXsl2aw="
+ version = "v0.0.0-20231115070216-b0af3db7b932"
+ hash = "sha256-9bPXHiTF8+RZ75INmfXj1OyAGQykmYuFq3AC8L+Wb1s="
[mod."github.com/danieljoos/wincred"]
version = "v1.1.2"
hash = "sha256-Nnklfg12vmWCOhELGyoRqEF4w4srp0WbPwreaChYLKs="
@@ -204,8 +204,8 @@ schema = 3
hash = "sha256-QKuYnEXXrnHPPHk/Xc9ocez2Jheo/0IOOa1IQaMH61c="
replaced = "github.com/crypto-org-chain/go-ethereum"
[mod."github.com/evmos/ethermint"]
- version = "v0.20.11-cronos.0.20230809091211-3fdb18b1c2d9"
- hash = "sha256-cm3AZsL45+jnOH5+XCUSVzhAN0cuav0gn+dm+1nxJow="
+ version = "v0.20.11-cronos.0.20231220064956-a85daedc6ffc"
+ hash = "sha256-y15t+Vso0MO2yKmqncqOw0UIvM+9gx6nrcwjcwxCo28="
replaced = "github.com/crypto-org-chain/ethermint"
[mod."github.com/felixge/httpsnoop"]
version = "v1.0.2"
@@ -245,8 +245,8 @@ schema = 3
hash = "sha256-TKa//aFXpWH+yK/cN1oaaqhipZpPUovekP6oA9vLIHY="
replaced = "github.com/regen-network/protobuf"
[mod."github.com/golang/glog"]
- version = "v1.0.0"
- hash = "sha256-bglITqRgzi52zc6FoYYnfCvrjFWV4RVOacPCnbEBom4="
+ version = "v1.1.0"
+ hash = "sha256-FgkBzn32nsq5Fpz0KKOrOqKap6pa2A1P3N2C0/Qp820="
[mod."github.com/golang/groupcache"]
version = "v0.0.0-20210331224755-41bb18bfe9da"
hash = "sha256-7Gs7CS9gEYZkbu5P4hqPGBpeGZWC64VDwraSKFF+VR0="
@@ -370,6 +370,7 @@ schema = 3
[mod."github.com/linxGnu/grocksdb"]
version = "v1.8.0"
hash = "sha256-o6zj18at4oN6pqSioFqd1AXduR/cx0xDgtL1rPPw+1M="
+ replaced = "github.com/linxGnu/grocksdb"
[mod."github.com/magiconair/properties"]
version = "v1.8.6"
hash = "sha256-xToSfpuePctkTdhJtsuKIEkXwfMZbnkFT98ahIfd4wY="
@@ -492,8 +493,8 @@ schema = 3
version = "v0.0.0-20200402102358-957c09536969"
hash = "sha256-yddXXuu6mEFEO2/K6c1tWymeBKzOcvLQnNsFGRjtfXk="
[mod."github.com/stretchr/testify"]
- version = "v1.8.3"
- hash = "sha256-7U008LCuOyALE/T2mw4Ag7CVoAE2xUe/DNYzgbWfMtM="
+ version = "v1.8.4"
+ hash = "sha256-MoOmRzbz9QgiJ+OOBo5h5/LbilhJfRUryvzHJmXAWjo="
[mod."github.com/subosito/gotenv"]
version = "v1.4.1"
hash = "sha256-aHAUs8Gh+BREUulljWr7vBZQg1BLu/M/8UfNK8CWSn8="
@@ -570,8 +571,8 @@ schema = 3
version = "v0.10.0"
hash = "sha256-HkGiUYBZOBdOtt7mYo3N3swFjjAXzW++pG2JeWGJR9Q="
[mod."golang.org/x/oauth2"]
- version = "v0.6.0"
- hash = "sha256-M6yqSRqMcgp4bOCa4ey8/13z/0BrjQgyUQXJZU1hmnw="
+ version = "v0.7.0"
+ hash = "sha256-KQU6ZlzWMvBjBdCAdyZbdwXkyqIskKFWmJIM11m1shY="
[mod."golang.org/x/sync"]
version = "v0.1.0"
hash = "sha256-Hygjq9euZ0qz6TvHYQwOZEjNiTbTh1nSLRAWZ6KFGR8="
@@ -594,11 +595,17 @@ schema = 3
version = "v1.6.7"
hash = "sha256-zIxGRHiq4QBvRqkrhMGMGCaVL4iM4TtlYpAi/hrivS4="
[mod."google.golang.org/genproto"]
- version = "v0.0.0-20230323212658-478b75c54725"
- hash = "sha256-Hm+Ispdf+T56F0kUpKRo4XtS+Kycn+D0aS+83Eg6PYg="
+ version = "v0.0.0-20230526161137-0005af68ea54"
+ hash = "sha256-9jkwcDPYxY3Big0okJMOXdi3mO1MO/uKkXMMRVuzYk8="
+ [mod."google.golang.org/genproto/googleapis/api"]
+ version = "v0.0.0-20230525234035-dd9d682886f9"
+ hash = "sha256-+kYH4re+0Rk2Y68Wnmx5LYgZW3ipWXLKd0NLmsshliQ="
+ [mod."google.golang.org/genproto/googleapis/rpc"]
+ version = "v0.0.0-20230525234030-28d5490b6b19"
+ hash = "sha256-udSELGkrQbc6rCAXol7l7wyi23hJ97tUIxyVizFHya0="
[mod."google.golang.org/grpc"]
- version = "v1.54.0"
- hash = "sha256-2HzpK4s9zAGUv/26wChxbfkX3t4WB1bLM96O5gkQmro="
+ version = "v1.57.0"
+ hash = "sha256-hP6alxFu+pcLI4gT3idzEMYNp+DbU3P4xhkpIqGCPXg="
[mod."google.golang.org/protobuf"]
version = "v1.30.0"
hash = "sha256-Y07NKhSuJQ2w7F7MAINQyBf+/hdMHOrxwA3B4ljQQKs="
diff --git a/integration_tests/conftest.py b/integration_tests/conftest.py
index 980d4a9627..9b3f2ed053 100644
--- a/integration_tests/conftest.py
+++ b/integration_tests/conftest.py
@@ -11,8 +11,19 @@
def pytest_configure(config):
+ config.addinivalue_line("markers", "unmarked: fallback mark for unmarked tests")
config.addinivalue_line("markers", "slow: marks tests as slow")
config.addinivalue_line("markers", "gravity: gravity bridge test cases")
+ config.addinivalue_line("markers", "upgrade: marks upgrade tests")
+ config.addinivalue_line("markers", "ibc: marks default ibc tests")
+ config.addinivalue_line("markers", "ibc_timeout: marks ibc timeout tests")
+ config.addinivalue_line("markers", "ibc_update_client: marks ibc updateclient test")
+
+
+def pytest_collection_modifyitems(items, config):
+ for item in items:
+ if not any(item.iter_markers()):
+ item.add_marker("unmarked")
@pytest.fixture(scope="session")
diff --git a/integration_tests/test_exported_genesis.py b/integration_tests/test_exported_genesis.py
index 64ab52f626..6be07e59d2 100644
--- a/integration_tests/test_exported_genesis.py
+++ b/integration_tests/test_exported_genesis.py
@@ -6,6 +6,8 @@
from .network import setup_custom_cronos
from .utils import ADDRS, CONTRACTS
+pytestmark = pytest.mark.slow
+
@pytest.fixture(scope="module")
def custom_cronos(tmp_path_factory):
diff --git a/integration_tests/test_ibc.py b/integration_tests/test_ibc.py
index 1affeb98af..7319faab07 100644
--- a/integration_tests/test_ibc.py
+++ b/integration_tests/test_ibc.py
@@ -19,6 +19,8 @@
wait_for_new_blocks,
)
+pytestmark = pytest.mark.ibc
+
@pytest.fixture(scope="module", params=[True, False])
def ibc(request, tmp_path_factory):
diff --git a/integration_tests/test_ibc_timeout.py b/integration_tests/test_ibc_timeout.py
index 938a9e443e..ff33f7cb23 100644
--- a/integration_tests/test_ibc_timeout.py
+++ b/integration_tests/test_ibc_timeout.py
@@ -9,6 +9,8 @@
)
from .utils import ADDRS, eth_to_bech32, wait_for_fn
+pytestmark = pytest.mark.ibc_timeout
+
@pytest.fixture(scope="module")
def ibc(request, tmp_path_factory):
diff --git a/integration_tests/test_ibc_update_client.py b/integration_tests/test_ibc_update_client.py
index 25288f8d3a..e9133a6821 100644
--- a/integration_tests/test_ibc_update_client.py
+++ b/integration_tests/test_ibc_update_client.py
@@ -5,6 +5,8 @@
from .ibc_utils import prepare_network
+pytestmark = pytest.mark.ibc_update_client
+
@pytest.fixture(scope="module")
def ibc(request, tmp_path_factory):
diff --git a/integration_tests/test_mempool.py b/integration_tests/test_mempool.py
index 65e25ee55b..a50a513081 100644
--- a/integration_tests/test_mempool.py
+++ b/integration_tests/test_mempool.py
@@ -14,6 +14,8 @@
wait_for_new_blocks,
)
+pytestmark = pytest.mark.slow
+
@pytest.fixture(scope="module")
def cronos_mempool(tmp_path_factory):
diff --git a/integration_tests/test_pruned_node.py b/integration_tests/test_pruned_node.py
index b5b682d21c..74092fe9fa 100644
--- a/integration_tests/test_pruned_node.py
+++ b/integration_tests/test_pruned_node.py
@@ -16,6 +16,8 @@
wait_for_new_blocks,
)
+pytestmark = pytest.mark.slow
+
@pytest.fixture(scope="module")
def cronos(request, tmp_path_factory):
diff --git a/integration_tests/test_replay_block.py b/integration_tests/test_replay_block.py
index 7a275ff695..722038fa7f 100644
--- a/integration_tests/test_replay_block.py
+++ b/integration_tests/test_replay_block.py
@@ -8,6 +8,8 @@
from .network import setup_custom_cronos
from .utils import ADDRS, CONTRACTS, KEYS, deploy_contract, sign_transaction
+pytestmark = pytest.mark.slow
+
@pytest.fixture(scope="module")
def custom_cronos(tmp_path_factory):
@@ -17,7 +19,7 @@ def custom_cronos(tmp_path_factory):
)
-def test_replay_block(custom_cronos):
+def test_block_overflow(custom_cronos):
w3: web3.Web3 = custom_cronos.w3
contract = deploy_contract(
w3,
diff --git a/integration_tests/test_upgrade.py b/integration_tests/test_upgrade.py
index 151c183f2f..8b0f5f62f2 100644
--- a/integration_tests/test_upgrade.py
+++ b/integration_tests/test_upgrade.py
@@ -4,6 +4,7 @@
from pathlib import Path
import pytest
+from dateutil.parser import isoparse
from pystarport import ports
from pystarport.cluster import SUPERVISOR_CONFIG_FILE
@@ -11,15 +12,18 @@
from .utils import (
ADDRS,
CONTRACTS,
- approve_proposal,
deploy_contract,
edit_ini_sections,
+ parse_events,
send_transaction,
wait_for_block,
+ wait_for_block_time,
wait_for_new_blocks,
wait_for_port,
)
+pytestmark = pytest.mark.upgrade
+
def init_cosmovisor(home):
"""
@@ -91,7 +95,6 @@ def test_cosmovisor_upgrade(custom_cronos: Cronos, tmp_path_factory):
custom_cronos.supervisorctl("start", "cronos_777-1-node0", "cronos_777-1-node1")
wait_for_port(ports.evmrpc_port(custom_cronos.base_port(0)))
wait_for_new_blocks(cli, 1)
-
height = cli.block_height()
target_height = height + 15
print("upgrade height", target_height)
@@ -106,8 +109,13 @@ def test_cosmovisor_upgrade(custom_cronos: Cronos, tmp_path_factory):
)
print("old values", old_height, old_balance, old_base_fee)
- plan_name = "v2.0.0-testnet3"
- rsp = cli.gov_propose_legacy(
+ # estimateGas for an erc20 transfer tx
+ old_gas = contract.functions.transfer(ADDRS["community"], 100).build_transaction(
+ {"from": ADDRS["validator"]}
+ )["gas"]
+
+ plan_name = "v1.0.0"
+ rsp = cli.gov_propose_v0_7(
"community",
"software-upgrade",
{
@@ -119,7 +127,21 @@ def test_cosmovisor_upgrade(custom_cronos: Cronos, tmp_path_factory):
},
)
assert rsp["code"] == 0, rsp["raw_log"]
- approve_proposal(custom_cronos, rsp)
+
+ # get proposal_id
+ ev = parse_events(rsp["logs"])["submit_proposal"]
+ assert ev["proposal_type"] == "SoftwareUpgrade", rsp
+ proposal_id = ev["proposal_id"]
+
+ rsp = cli.gov_vote("validator", proposal_id, "yes")
+ assert rsp["code"] == 0, rsp["raw_log"]
+ rsp = custom_cronos.cosmos_cli(1).gov_vote("validator", proposal_id, "yes")
+ assert rsp["code"] == 0, rsp["raw_log"]
+
+ proposal = cli.query_proposal(proposal_id)
+ wait_for_block_time(cli, isoparse(proposal["voting_end_time"]))
+ proposal = cli.query_proposal(proposal_id)
+ assert proposal["status"] == "PROPOSAL_STATUS_PASSED", proposal
# update cli chain binary
custom_cronos.chain_binary = (
@@ -159,30 +181,15 @@ def test_cosmovisor_upgrade(custom_cronos: Cronos, tmp_path_factory):
ADDRS["validator"]
)
- # check gravity params
- assert cli.query_gravity_params() == {
- "params": {
- "gravity_id": "cronos_gravity_testnet",
- "contract_source_hash": "",
- "bridge_ethereum_address": "0x0000000000000000000000000000000000000000",
- "bridge_chain_id": "0",
- "signed_signer_set_txs_window": "10000",
- "signed_batches_window": "10000",
- "ethereum_signatures_window": "10000",
- "target_eth_tx_timeout": "43200000",
- "average_block_time": "5000",
- "average_ethereum_block_time": "15000",
- "slash_fraction_signer_set_tx": "0.001000000000000000",
- "slash_fraction_batch": "0.001000000000000000",
- "slash_fraction_ethereum_signature": "0.001000000000000000",
- "slash_fraction_conflicting_ethereum_signature": "0.001000000000000000",
- "unbond_slashing_signer_set_txs_window": "10000",
- "bridge_active": False,
- "batch_creation_period": "10",
- "batch_max_element": "100",
- "observe_ethereum_height_period": "50",
- }
- }
+ assert not cli.evm_params()["params"]["extra_eips"]
+
+ # check the gas cost is lower after upgrade
+ assert (
+ old_gas - 3700
+ == contract.functions.transfer(ADDRS["community"], 100).build_transaction(
+ {"from": ADDRS["validator"]}
+ )["gas"]
+ )
# migrate to sdk v0.46
custom_cronos.supervisorctl("stop", "all")
@@ -211,4 +218,4 @@ def test_cosmovisor_upgrade(custom_cronos: Cronos, tmp_path_factory):
file.write_text(json.dumps(genesis))
custom_cronos.supervisorctl("start", "cronos_777-1-node0", "cronos_777-1-node1")
wait_for_new_blocks(custom_cronos.cosmos_cli(), 1)
- custom_cronos.supervisorctl("stop", "all")
+ custom_cronos.supervisorctl("stop", "all")
\ No newline at end of file
diff --git a/integration_tests/test_upgrade_gravity.py b/integration_tests/test_upgrade_gravity.py
index f29b39da02..3ddf737ce8 100644
--- a/integration_tests/test_upgrade_gravity.py
+++ b/integration_tests/test_upgrade_gravity.py
@@ -1,6 +1,4 @@
-import configparser
import json
-import re
import subprocess
from pathlib import Path
@@ -10,7 +8,13 @@
from pystarport.cluster import SUPERVISOR_CONFIG_FILE
from .network import Cronos, setup_custom_cronos
-from .utils import parse_events, wait_for_block, wait_for_block_time, wait_for_port
+from .utils import (
+ edit_ini_sections,
+ parse_events,
+ wait_for_block,
+ wait_for_block_time,
+ wait_for_port,
+)
def init_cosmovisor(home):
@@ -28,29 +32,21 @@ def post_init(path, base_port, config):
prepare cosmovisor for each node
"""
chain_id = "cronos_777-1"
- cfg = json.loads((path / chain_id / "config.json").read_text())
+ data = path / chain_id
+ cfg = json.loads((data / "config.json").read_text())
for i, _ in enumerate(cfg["validators"]):
- home = path / chain_id / f"node{i}"
+ home = data / f"node{i}"
init_cosmovisor(home)
- # patch supervisord ini config
- ini_path = path / chain_id / SUPERVISOR_CONFIG_FILE
- ini = configparser.RawConfigParser()
- ini.read(ini_path)
- reg = re.compile(rf"^program:{chain_id}-node(\d+)")
- for section in ini.sections():
- m = reg.match(section)
- if m:
- i = m.group(1)
- ini[section].update(
- {
- "command": f"cosmovisor start --home %(here)s/node{i}"
- f" --trace --unsafe-experimental",
- "environment": f"DAEMON_NAME=cronosd,DAEMON_HOME=%(here)s/node{i}",
- }
- )
- with ini_path.open("w") as fp:
- ini.write(fp)
+ edit_ini_sections(
+ chain_id,
+ data / SUPERVISOR_CONFIG_FILE,
+ lambda i, _: {
+ "command": f"cosmovisor start --home %(here)s/node{i}"
+ f" --trace --unsafe-experimental",
+ "environment": f"DAEMON_NAME=cronosd,DAEMON_HOME=%(here)s/node{i}",
+ },
+ )
@pytest.fixture(scope="module")
diff --git a/integration_tests/utils.py b/integration_tests/utils.py
index 2d2b264cbe..09535944ab 100644
--- a/integration_tests/utils.py
+++ b/integration_tests/utils.py
@@ -13,7 +13,6 @@
import bech32
import eth_utils
-import pytest
import rlp
import toml
from dateutil.parser import isoparse
@@ -48,10 +47,6 @@
"TestBlackListERC20": "TestBlackListERC20.sol",
"CroBridge": "CroBridge.sol",
"CronosGravityCancellation": "CronosGravityCancellation.sol",
- "TestCRC20": "TestCRC20.sol",
- "TestCRC20Proxy": "TestCRC20Proxy.sol",
- "TestMaliciousSupply": "TestMaliciousSupply.sol",
- "CosmosERC20": "CosmosToken.sol",
}
@@ -69,8 +64,6 @@ def contract_path(name, filename):
/ "x/cronos/types/contracts/ModuleCRC20.json",
"ModuleCRC21": Path(__file__).parent.parent
/ "x/cronos/types/contracts/ModuleCRC21.json",
- "ModuleCRC20Proxy": Path(__file__).parent.parent
- / "x/cronos/types/contracts/ModuleCRC20Proxy.json",
**{
name: contract_path(name, filename) for name, filename in TEST_CONTRACTS.items()
},
@@ -122,27 +115,6 @@ def wait_for_block_time(cli, t):
time.sleep(0.5)
-def approve_proposal(n, rsp, event_query_tx=False):
- cli = n.cosmos_cli()
- if event_query_tx:
- rsp = cli.event_query_tx_for(rsp["txhash"])
- # get proposal_id
- ev = parse_events(rsp["logs"])["submit_proposal"]
- proposal_id = ev["proposal_id"]
- for i in range(len(n.config["validators"])):
- rsp = n.cosmos_cli(i).gov_vote("validator", proposal_id, "yes")
- assert rsp["code"] == 0, rsp["raw_log"]
- wait_for_new_blocks(cli, 1)
- assert (
- int(cli.query_tally(proposal_id)["yes_count"]) == cli.staking_pool()
- ), "all validators should have voted yes"
- print("wait for proposal to be activated")
- proposal = cli.query_proposal(proposal_id)
- wait_for_block_time(cli, isoparse(proposal["voting_end_time"]))
- proposal = cli.query_proposal(proposal_id)
- assert proposal["status"] == "PROPOSAL_STATUS_PASSED", proposal
-
-
def wait_for_port(port, host="127.0.0.1", timeout=40.0):
start_time = time.perf_counter()
while True:
@@ -322,12 +294,7 @@ def deploy_contract(w3, jsonfile, args=(), key=KEYS["validator"]):
"""
acct = Account.from_key(key)
info = json.loads(jsonfile.read_text())
- bytecode = ""
- if "bytecode" in info:
- bytecode = info["bytecode"]
- if "byte" in info:
- bytecode = info["byte"]
- contract = w3.eth.contract(abi=info["abi"], bytecode=bytecode)
+ contract = w3.eth.contract(abi=info["abi"], bytecode=info["bytecode"])
tx = contract.constructor(*args).build_transaction({"from": acct.address})
txreceipt = send_transaction(w3, tx, key)
assert txreceipt.status == 1
@@ -364,13 +331,13 @@ def cronos_address_from_mnemonics(mnemonics, prefix=CRONOS_ADDRESS_PREFIX):
return eth_to_bech32(acct.address, prefix)
-def send_to_cosmos(gravity_contract, token_contract, w3, recipient, amount, key=None):
+def send_to_cosmos(gravity_contract, token_contract, recipient, amount, key=None):
"""
do approve and sendToCronos on ethereum side
"""
acct = Account.from_key(key)
txreceipt = send_transaction(
- w3,
+ token_contract.web3,
token_contract.functions.approve(
gravity_contract.address, amount
).build_transaction({"from": acct.address}),
@@ -379,7 +346,7 @@ def send_to_cosmos(gravity_contract, token_contract, w3, recipient, amount, key=
assert txreceipt.status == 1, "approve failed"
return send_transaction(
- w3,
+ gravity_contract.web3,
gravity_contract.functions.sendToCronos(
token_contract.address, HexBytes(recipient), amount
).build_transaction({"from": acct.address}),
@@ -387,11 +354,11 @@ def send_to_cosmos(gravity_contract, token_contract, w3, recipient, amount, key=
)
-def deploy_erc20(gravity_contract, w3, denom, name, symbol, decimal, key=None):
+def deploy_erc20(gravity_contract, denom, name, symbol, decimal, key=None):
acct = Account.from_key(key)
return send_transaction(
- w3,
+ gravity_contract.web3,
gravity_contract.functions.deployERC20(
denom, name, symbol, decimal
).build_transaction({"from": acct.address}),
@@ -556,94 +523,4 @@ def send_txs(w3, cli, to, keys, params):
# send transactions
sended_hash_set = send_raw_transactions(w3, raw_transactions)
- return block_num_0, sended_hash_set
-
-
-def multiple_send_to_cosmos(gcontract, tcontract, w3, recipient, amount, keys):
- # use different sender accounts to be able be send concurrently
- raw_transactions = []
- for key_from in keys:
- acct = Account.from_key(key_from)
- acct_address = HexBytes(acct.address)
- # approve first
- approve = tcontract.functions.approve(gcontract.address, amount)
- txreceipt = send_transaction(
- w3,
- approve.build_transaction({"from": acct.address}),
- key_from,
- )
- assert txreceipt.status == 1, "approve failed"
-
- # generate the tx
- tx = gcontract.functions.sendToCronos(
- tcontract.address, HexBytes(recipient), amount
- ).build_transaction({"from": acct_address})
- signed = sign_transaction(w3, tx, key_from)
- raw_transactions.append(signed.rawTransaction)
-
- # wait for new block
- w3_wait_for_new_blocks(w3, 1)
- return send_raw_transactions(w3, raw_transactions)
-
-
-def setup_token_mapping(cronos, name, symbol):
- # deploy contract
- w3 = cronos.w3
- contract = deploy_contract(w3, CONTRACTS[name])
-
- # setup the contract mapping
- cronos_cli = cronos.cosmos_cli()
-
- print("contract", contract.address)
- denom = f"cronos{contract.address}"
- balance = contract.caller.balanceOf(ADDRS["validator"])
- assert balance == 100000000000000000000000000
-
- print("check the contract mapping not exists yet")
- with pytest.raises(AssertionError):
- cronos_cli.query_contract_by_denom(denom)
-
- rsp = cronos_cli.update_token_mapping(
- denom, contract.address, symbol, 6, from_="validator"
- )
- assert rsp["code"] == 0, rsp["raw_log"]
- wait_for_new_blocks(cronos_cli, 1)
-
- print("check the contract mapping exists now")
- rsp = cronos_cli.query_denom_by_contract(contract.address)
- assert rsp["denom"] == denom
- return contract, denom
-
-
-def submit_any_proposal(cronos, tmp_path, event_query_tx=False):
- # governance module account as granter
- cli = cronos.cosmos_cli()
- granter_addr = "crc10d07y265gmmuvt4z0w9aw880jnsr700jdufnyd"
- grantee_addr = cli.address("signer1")
-
- # this json can be obtained with `--generate-only` flag for respective cli calls
- proposal_json = {
- "messages": [
- {
- "@type": "/cosmos.feegrant.v1beta1.MsgGrantAllowance",
- "granter": granter_addr,
- "grantee": grantee_addr,
- "allowance": {
- "@type": "/cosmos.feegrant.v1beta1.BasicAllowance",
- "spend_limit": [],
- "expiration": None,
- },
- }
- ],
- "deposit": "1basetcro",
- }
- proposal_file = tmp_path / "proposal.json"
- proposal_file.write_text(json.dumps(proposal_json))
- rsp = cli.submit_gov_proposal(proposal_file, from_="community")
- assert rsp["code"] == 0, rsp["raw_log"]
-
- approve_proposal(cronos, rsp, event_query_tx)
-
- grant_detail = cli.query_grant(granter_addr, grantee_addr)
- assert grant_detail["granter"] == granter_addr
- assert grant_detail["grantee"] == grantee_addr
+ return block_num_0, sended_hash_set
\ No newline at end of file
diff --git a/nix/bundle-win-exe.nix b/nix/bundle-win-exe.nix
index ac67b4eda7..b8a9d058d7 100644
--- a/nix/bundle-win-exe.nix
+++ b/nix/bundle-win-exe.nix
@@ -7,11 +7,11 @@
, snappy
, zstd
, zlib
-, cronosd
+, tgenesisd
}:
-runCommand "tarball-${cronosd.name}"
+runCommand "tarball-${tgenesisd.name}"
{
- # manually enumerate the runtime dependencies of cronosd on mingwW64
+ # manually enumerate the runtime dependencies of tgenesisd on mingwW64
deps = [
"${rocksdb}/bin/librocksdb-shared.dll"
"${snappy}/bin/libsnappy.dll"
@@ -31,5 +31,5 @@ runCommand "tarball-${cronosd.name}"
cp $so $out/
done
- cp ${cronosd}/bin/${cronosd.meta.mainProgram} $out/
+ cp ${tgenesisd}/bin/${tgenesisd.meta.mainProgram} $out/
''
diff --git a/nix/rocksdb.nix b/nix/rocksdb.nix
index 8bcbc35060..9b3333d173 100644
--- a/nix/rocksdb.nix
+++ b/nix/rocksdb.nix
@@ -81,7 +81,7 @@ stdenv.mkDerivation rec {
mkdir -p $tools/bin
cp tools/{ldb,sst_dump}${stdenv.hostPlatform.extensions.executable} $tools/bin/
'' + lib.optionalString stdenv.isDarwin ''
- ls -1 $tools/bin/* | xargs -I{} ${stdenv.cc.bintools.targetPrefix}install_name_tool -change "@rpath/librocksdb.7.dylib" $out/lib/librocksdb.dylib {}
+ ls -1 $tools/bin/* | xargs -I{} ${stdenv.cc.bintools.targetPrefix}install_name_tool -change "@rpath/librocksdb.${lib.versions.major version}.dylib" $out/lib/librocksdb.dylib {}
'' + lib.optionalString (stdenv.isLinux && enableShared) ''
ls -1 $tools/bin/* | xargs -I{} patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib {}
'';
@@ -94,7 +94,7 @@ stdenv.mkDerivation rec {
fi
'' + lib.optionalString stdenv.isDarwin ''
${stdenv.cc.targetPrefix}install_name_tool -change "@rpath/libsnappy.1.dylib" "${snappy}/lib/libsnappy.1.dylib" $out/lib/librocksdb.dylib
- ${stdenv.cc.targetPrefix}install_name_tool -change "@rpath/librocksdb.7.dylib" "$out/lib/librocksdb.7.dylib" $out/lib/librocksdb.dylib
+ ${stdenv.cc.targetPrefix}install_name_tool -change "@rpath/librocksdb.${lib.versions.major version}.dylib" "$out/lib/librocksdb.${lib.versions.major version}.dylib" $out/lib/librocksdb.dylib
'';
meta = with lib; {
diff --git a/scripts/codesign_macos.sh b/scripts/codesign_macos.sh
index ac43e87d70..2a18aacbb9 100755
--- a/scripts/codesign_macos.sh
+++ b/scripts/codesign_macos.sh
@@ -8,7 +8,7 @@ TMPD=$(mktemp -d)
tar xfz $1 -C $TMPD
echo "Codesign"
-find $TMPD -type f \( -name "*.dylib" -or -name cronosd \) | xargs -I{} codesign --force --options runtime -v -s "$MAC_CODE_API_DEVELOPER_ID" {}
+find $TMPD -type f \( -name "*.dylib" -or -name tgenesisd \) | xargs -I{} codesign --force --options runtime -v -s "$MAC_CODE_API_DEVELOPER_ID" {}
echo "Archive"
WORKDIR=$PWD
diff --git a/scripts/release-version.sh b/scripts/release-version.sh
new file mode 100644
index 0000000000..071fd19c97
--- /dev/null
+++ b/scripts/release-version.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+# Root of the current repository
+REPO_ROOT=$(cd "$(dirname "$0")"/.. && pwd)
+
+GITHUB_REF_NAME=$1 "$REPO_ROOT/scripts/release.sh" && sha256sum $REPO_ROOT/*.tar.gz > "$REPO_ROOT/checksums.txt"
diff --git a/scripts/release.sh b/scripts/release.sh
index cfb3f9fb52..3251e8b6b6 100755
--- a/scripts/release.sh
+++ b/scripts/release.sh
@@ -11,25 +11,25 @@ build() {
network=$1
host="$2"
name="$3"
- pkg="cronosd${network}-${build_type}"
+ pkg="tgenesisd${network}-${build_type}"
if [[ "$host" == "native" ]]; then
if [[ "${build_platform: -6}" == "-linux" ]]; then
# static link for linux targets
- FLAKE="${baseurl}#legacyPackages.${build_platform}.pkgsStatic.cronos-matrix.${pkg}"
+ FLAKE="${baseurl}#legacyPackages.${build_platform}.pkgsStatic.tgenesis-matrix.${pkg}"
else
FLAKE="${baseurl}#${pkg}"
fi
else
if [[ "$host" == "aarch64-multiplatform" || "$host" == "gnu64" ]]; then
# static link for linux targets
- FLAKE="${baseurl}#legacyPackages.${build_platform}.pkgsCross.${host}.pkgsStatic.cronos-matrix.${pkg}"
+ FLAKE="${baseurl}#legacyPackages.${build_platform}.pkgsCross.${host}.pkgsStatic.tgenesis-matrix.${pkg}"
else
- FLAKE="${baseurl}#legacyPackages.${build_platform}.pkgsCross.${host}.cronos-matrix.${pkg}"
+ FLAKE="${baseurl}#legacyPackages.${build_platform}.pkgsCross.${host}.tgenesis-matrix.${pkg}"
fi
fi
echo "building $FLAKE"
nix build --show-trace -L "$FLAKE"
- cp result "cronos_${ref_name_clean:1}${network}_${name}.tar.gz"
+ cp result "tgenesis_${ref_name_clean:1}${network}_${name}.tar.gz"
}
if [[ "$build_platform" == "x86_64-linux" ]]; then
@@ -43,7 +43,7 @@ else
exit 1
fi
-for network in "" "-testnet"; do
+for network in "-testnet"; do
for t in $hosts; do
IFS=',' read name host <<< "${t}"
build "$network" "$host" "$name"
diff --git a/scripts/run-integration-tests b/scripts/run-integration-tests
index 1609dd454b..c2278eb22b 100755
--- a/scripts/run-integration-tests
+++ b/scripts/run-integration-tests
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
set -e
cd "$(dirname "$0")"
@@ -10,4 +10,12 @@ cd ../integration_tests/contracts
HUSKY_SKIP_INSTALL=1 npm install
npm run typechain
cd ..
-nix-shell --run "pytest -vv -s"
+TESTS_TO_RUN="${TESTS_TO_RUN:-all}"
+if [[ "$TESTS_TO_RUN" == "all" ]]; then
+ echo "run all tests"
+ cmd="pytest -vv -s"
+else
+ echo "run tests matching $TESTS_TO_RUN"
+ cmd="pytest -vv -s -m '$TESTS_TO_RUN'"
+fi
+nix-shell --run "$cmd"
diff --git a/genesisd.service b/services/tgenesisd.service
similarity index 67%
rename from genesisd.service
rename to services/tgenesisd.service
index a8541f775d..6020383cd4 100644
--- a/genesisd.service
+++ b/services/tgenesisd.service
@@ -1,12 +1,12 @@
[Unit]
-Description=genesisd daemon
+Description=tgenesis
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root
-ExecStart=/root/go/bin/genesisd start --log_level info
+ExecStart=/root/go/bin/tgenesisd start --log_level info
Restart=on-failure
RestartSec=60
LimitNOFILE=50000
diff --git a/services/tgenesisdrpc.service b/services/tgenesisdrpc.service
new file mode 100644
index 0000000000..66c729c48c
--- /dev/null
+++ b/services/tgenesisdrpc.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=tgenesis rpc
+After=network.target
+
+[Service]
+Type=simple
+User=root
+WorkingDirectory=/root
+ExecStart=/root/go/bin/tgenesisd start --pruning=nothing --trace --log_level=info --minimum-gas-prices=1000000000el1 --json-rpc.api eth,debug,txpool,personal,net,web3
+Restart=on-failure
+RestartSec=60
+LimitNOFILE=50000
+
+[Install]
+WantedBy=multi-user.target
diff --git a/setup-local/README.md b/setup-local/README.md
new file mode 100644
index 0000000000..c65fbe1b32
--- /dev/null
+++ b/setup-local/README.md
@@ -0,0 +1,59 @@
+# Setup (Local)
+
+> [!IMPORTANT]
+> The scripts in this folder are specifically written for **local** testnet purposes and require you to have already setup a testnet in your local network using a `tgenesis` branch in the [`genesis-ethermint`](https://github.com/alpha-omega-labs/genesis-ethermint) repository.
+
+## \_local-variables.sh
+
+This script holds repository-specific variables for **local** testnet purposes.
+
+## upgrade.sh
+
+> [!WARNING]
+> This script should only be used if you run a full-node and have to perform the **"plan_crypto"**-upgrade!
+>
+> This means that you are currently operating on the Evmos fork of GenesisL1 (repo: [`genesis-ethermint`](https://github.com/alpha-omega-labs/genesis-ethermint)) and the node synced till height: `insert_height_here` which caused it to panic.
+
+This script takes care of the needed steps to upgrade the node to the new fork:
+
+- It stops the node (the service)
+- Creates a backup of existing _config.toml_ or _app.toml_ files (as _.toml.bak_)
+- Introduces new config files
+- Builds the binaries
+> This _local_ variant of the script doesn't fetch any seeds or peers _(so any configured persistent_peers and seeds get reset!)_
+
+### Usage
+
+```
+sh setup-local/upgrade.sh
+```
+> After a successful upgrade, start the node again using `systemctl start tgenesisd` and monitor its status with `journalctl -fu tgenesisd -ocat`.
+
+## state-sync.sh
+
+> [!CAUTION]
+> Running this will **wipe the entire database** (the _/data_-folder **excluding** the priv_validator_state.json file).
+>
+> Make a backup if needed: [utils/backup/create.sh](/utils/backup/create.sh).
+
+This script takes care of the needed steps to join the network via State Sync:
+
+- It stops the service (if it exists)
+- Installs all the necessary dependencies
+- Builds the binaries
+- Initializes the node
+- Resets config files
+- This _local_ variant of the script doesn't fetch any seeds or peers _(so any configured persistent_peers and seeds get reset!)_
+- This _local_ variant of the script doesn't fetch any _genesis.json_-file _(add this yourself from the node that's already connected to the network)_
+- This _local_ variant sets the _rpc_servers_-field to the variable [`$LOCAL_RPC_SERVERS`](/setup-local/_local-variables.sh)
+- Installs the service
+- Recalibrates **[statesync]** settings to a recent height (**default:** `` - [`$LOCAL_HEIGHT_INTERVAL`](/setup-local/_local-variables.sh))
+
+### Usage
+
+```
+sh setup-local/state-sync.sh
+```
+> Make sure that there's a peer providing a **[statesync]** snapshot in the network and add this peer to your _persistent_peers_-field _after_ running this command.
+>
+> If you can't access the `tgenesisd` command afterwards, execute the `. ~/.bashrc` _or_ `source ~/.bashrc` command in your terminal.
diff --git a/setup-local/_local-variables.sh b/setup-local/_local-variables.sh
new file mode 100644
index 0000000000..ec2364777a
--- /dev/null
+++ b/setup-local/_local-variables.sh
@@ -0,0 +1,3 @@
+# Only for testing purposes; used for local state-sync testing
+LOCAL_RPC_SERVERS="http://127.0.0.1:26657,http://127.0.0.1:26657"
+LOCAL_HEIGHT_INTERVAL=100
diff --git a/setup-local/state-sync.sh b/setup-local/state-sync.sh
new file mode 100644
index 0000000000..43945d150c
--- /dev/null
+++ b/setup-local/state-sync.sh
@@ -0,0 +1,128 @@
+#!/bin/bash
+
+# Arguments check
+if [ -z "$1" ]; then
+ echo ""
+ echo "Usage: sh $0 "
+ echo ""
+ exit 1
+fi
+
+cat <<"EOF"
+
+ /$$$$$$ /$$ /$$ /$$
+ /$$__ $$ |__/ | $$ /$$$$
+| $$ \__/ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$$ /$$ /$$$$$$$ | $$ |_ $$
+| $$ /$$$$ /$$__ $$| $$__ $$ /$$__ $$ /$$_____/| $$ /$$_____/ | $$ | $$
+| $$|_ $$| $$$$$$$$| $$ \ $$| $$$$$$$$| $$$$$$ | $$| $$$$$$ | $$ | $$
+| $$ \ $$| $$_____/| $$ | $$| $$_____/ \____ $$| $$ \____ $$ | $$ | $$
+| $$$$$$/| $$$$$$$| $$ | $$| $$$$$$$ /$$$$$$$/| $$ /$$$$$$$/ | $$$$$$$$ /$$$$$$
+ \______/ \_______/|__/ |__/ \_______/|_______/ |__/|_______/ |________/|______/
+
+Welcome to the decentralized blockchain Renaissance, above money & beyond cryptocurrency!
+EOF
+
+echo ""
+echo "This script is intended for those who would like to join the testnet using State Sync."
+echo "State Sync allows a node to join a network in a matter of minutes/hours, without having"
+echo "to worry about needing a lot of free disk space."
+echo ""
+echo "While this is favorable for the individual validator, it isn't necessarly from a broader"
+echo "network perspective since you do not have the entire history of the blockchain recorded."
+echo "So take this into consideration when deciding to state sync or not."
+echo ""
+echo "WARNING: Any config files will get overwritten and the data folder shall be removed, but there"
+echo "will be a backup and restore of the priv_validator_state.json file. If needed, use"
+echo "utils/backup/create.sh to create a backup."
+echo ""
+echo "WARNING: this script is intended for LOCAL testing and should NOT be used for public testnet purposes."
+echo "Use setup/state-sync.sh for this instead."
+echo ""
+read -p "Do you want to continue? (y/N): " ANSWER
+
+ANSWER=$(echo "$ANSWER" | tr 'A-Z' 'a-z') # Convert to lowercase
+
+if [ "$ANSWER" != "y" ]; then
+ echo "Aborted."
+ exit 1
+fi
+
+# Root of the current repository
+REPO_ROOT=$(cd "$(dirname "$0")"/.. && pwd)
+
+# Source the variables file
+. "$REPO_ROOT/utils/_variables.sh"
+
+# Source local variables file
+. "$REPO_ROOT/setup-local/_local-variables.sh"
+
+# Warn about which local servers will be set as rpc_servers
+echo ""
+echo "\"$LOCAL_RPC_SERVERS\" will be set as the value for [statesync] rpc_servers in the config.toml file."
+echo "If this is incorrect, then change this in the setup-local/_local-variables.sh file before continuing!"
+echo ""
+read -p "Proceed? (y/N): " ANSWER
+
+ANSWER=$(echo "$ANSWER" | tr 'A-Z' 'a-z') # Convert to lowercase
+
+if [ "$ANSWER" != "y" ]; then
+ echo "Aborted."
+ exit 1
+fi
+
+# Arguments
+MONIKER=$1
+
+# Stop processes
+systemctl stop $BINARY_NAME
+
+# cd to root of the repository
+cd $REPO_ROOT
+
+# System update and installation of dependencies
+. ./setup/dependencies.sh
+
+# Building binaries
+go mod tidy
+make install
+
+# Set chain-id
+$BINARY_NAME config chain-id $CHAIN_ID
+
+# Init node
+$BINARY_NAME init $MONIKER --chain-id $CHAIN_ID -o
+
+# Chain specific configurations (i.e. timeout_commit 10s, min gas price 50gel)
+# - [p2p] addr_book_strict = false
+# - [p2p] allow_duplicate_ip = true
+# - [api] enabled = true
+# - [api] enabled-unsafe-cors = true
+cp "./configs/default_app_local.toml" $CONFIG_DIR/app.toml
+cp "./configs/default_config_local.toml" $CONFIG_DIR/config.toml
+# Set moniker again since the configs got overwritten
+sed -i "s/moniker = .*/moniker = \"$MONIKER\"/" $CONFIG_DIR/config.toml
+
+# We don't fetch any peers when we setup a local chain
+
+# We don't fetch any state when we setup a local chain
+
+# Set rpc_servers to $LOCAL_RPC_SERVERS found in setup-local/_local-variables.sh
+sed -i "s#rpc_servers = .*#rpc_servers = \"$LOCAL_RPC_SERVERS\"#" $CONFIG_DIR/config.toml
+
+# Install service
+sh ./utils/service/install.sh
+
+# Recalibrate state-sync
+if sh ./utils/tools/restate-sync.sh $LOCAL_HEIGHT_INTERVAL; then
+ echo ""
+ echo "A couple extra steps are necessary in order for the local testchain to work:"
+ echo "- Make sure to add the correct genesis.json file used by the other node(s) running the local testchain."
+ echo "- Make sure to add the other nodes in the persistent_peers field."
+ echo "- Make sure to create a key if you decide to do transactions or create a validator (utils/key/create.sh"
+ echo " or utils/key/import.sh)."
+ echo "- You'll probably need to shift your ports (utils/tools/port-shifter.sh)."
+ echo "- If you're unable to access the $BINARY_NAME command run '. ~/.bashrc' or 'source ~/.bashrc'."
+ echo ""
+ echo "Follow all this by running '$BINARY_NAME tendermint unsafe-reset-all' and then start the node by running 'systemctl start $BINARY_NAME'!"
+fi
+
diff --git a/setup-local/upgrade.sh b/setup-local/upgrade.sh
new file mode 100644
index 0000000000..0b844388d9
--- /dev/null
+++ b/setup-local/upgrade.sh
@@ -0,0 +1,87 @@
+#!/bin/bash
+
+cat <<"EOF"
+
+ /$$$$$$ /$$ /$$ /$$
+ /$$__ $$ |__/ | $$ /$$$$
+| $$ \__/ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$$ /$$ /$$$$$$$ | $$ |_ $$
+| $$ /$$$$ /$$__ $$| $$__ $$ /$$__ $$ /$$_____/| $$ /$$_____/ | $$ | $$
+| $$|_ $$| $$$$$$$$| $$ \ $$| $$$$$$$$| $$$$$$ | $$| $$$$$$ | $$ | $$
+| $$ \ $$| $$_____/| $$ | $$| $$_____/ \____ $$| $$ \____ $$ | $$ | $$
+| $$$$$$/| $$$$$$$| $$ | $$| $$$$$$$ /$$$$$$$/| $$ /$$$$$$$/ | $$$$$$$$ /$$$$$$
+ \______/ \_______/|__/ |__/ \_______/|_______/ |__/|_______/ |________/|______/
+
+EOF
+
+echo ""
+echo "This script should only be used if you run a full-node and have to perform the plan_crypto"
+echo "upgrade! This means you are currently operating on the Evmos fork of Genesis L1 and the node"
+echo "synced till the height that caused it to panic."
+echo ""
+echo "If this is not the case AND you wish to run a full-node, then head on over to GenesisL1's"
+echo "Evmos repository and follow the instructions over there."
+echo ""
+echo "WARNING: this script is intended for LOCAL testing and should NOT be used for public testnet purposes."
+echo "Use setup/upgrade.sh for this instead."
+echo ""
+read -p "Do you want to continue? (y/N): " ANSWER
+
+ANSWER=$(echo "$ANSWER" | tr 'A-Z' 'a-z') # Convert to lowercase
+
+if [ "$ANSWER" != "y" ]; then
+ echo "Aborted."
+ exit 1
+fi
+
+# Root of the current repository
+REPO_ROOT=$(cd "$(dirname "$0")"/.. && pwd)
+
+# Source the variables file
+. "$REPO_ROOT/utils/_variables.sh"
+
+# Stop services
+systemctl stop $BINARY_NAME
+
+# cd to root of the repository
+cd $REPO_ROOT
+
+# System update and installation of dependencies
+. ./setup/dependencies.sh
+
+# Create a backup of old config files
+cp $CONFIG_DIR/app.toml $CONFIG_DIR/app.toml.bak
+cp $CONFIG_DIR/config.toml $CONFIG_DIR/config.toml.bak
+
+# Backup moniker and pruning settings
+MONIKER=$(grep "^moniker =" "$CONFIG_DIR/config.toml")
+PRUNING=$(grep "^pruning =" "$CONFIG_DIR/app.toml")
+PRUNING_KEEP_RECENT=$(grep "^pruning-keep-recent =" "$CONFIG_DIR/app.toml")
+#pruning-keep-every got deprecated
+PRUNING_INTERVAL=$(grep "^pruning-interval =" "$CONFIG_DIR/app.toml")
+
+# Introduce new config files
+cp ./configs/default_app_local.toml $CONFIG_DIR/app.toml
+cp ./configs/default_config_local.toml $CONFIG_DIR/config.toml
+
+# Restore moniker and pruning settings
+sed -i "s|^.*moniker =.*$|$MONIKER|" $CONFIG_DIR/config.toml
+sed -i "s|^.*pruning =.*$|$PRUNING|" $CONFIG_DIR/app.toml
+sed -i "s|^.*pruning-keep-recent =.*$|$PRUNING_KEEP_RECENT|" $CONFIG_DIR/app.toml
+#pruning-keep-every got deprecated
+sed -i "s|^.*pruning-interval =.*$|$PRUNING_INTERVAL|" $CONFIG_DIR/app.toml
+
+# We don't fetch any peers when we setup a local chain
+
+# Install binaries
+go mod tidy
+make install && {
+ echo ""
+ echo "Upgrade was a success!"
+ echo ""
+ echo "The config.toml and app.toml file have been replaced by newer variants."
+ echo "A backup under the name app.toml.bak and config.toml.bak are available if"
+ echo "you ever need to restore some of your previous settings (persistent_peers"
+ echo "and seeds are reset!)."
+ echo ""
+ echo "When ready, turn on your node again using 'systemctl start $BINARY_NAME'!"
+}
diff --git a/setup/README.md b/setup/README.md
new file mode 100644
index 0000000000..536929eb20
--- /dev/null
+++ b/setup/README.md
@@ -0,0 +1,77 @@
+# Setup
+
+> [!NOTE]
+> The scripts in this folder are not specifically written for **local** testnet purposes.
+>
+> If you plan on testing **locally**, head over to [/setup-local](/setup-local) instead.
+
+## dependencies.sh
+
+This script installs all the dependencies (and system configurations) that are necessary for the binary to run. Since this file already gets called from within the other scripts, it is not required to call this yourself.
+
+## upgrade.sh
+
+> [!WARNING]
+> This script should only be used if you run a full-node and have to perform the **"plan_crypto"**-upgrade!
+>
+> This means that you are currently operating on the Evmos fork of GenesisL1 (repo: [`genesis-ethermint`](https://github.com/alpha-omega-labs/genesis-ethermint)) and the node synced till height: `insert_height_here` which caused it to panic.
+
+This script takes care of the needed steps to upgrade the node to the new fork:
+
+- It stops the node (the service)
+- Installs all the necessary dependencies
+- Creates a backup of existing _config.toml_ or _app.toml_ files (as _.toml.bak_)
+- Introduces new config files
+- Fetches latest seeds and peers
+- Builds the binaries
+
+### Usage
+
+```
+sh setup/upgrade.sh
+```
+> After a successful upgrade, start the node again using `systemctl start tgenesisd` and monitor its status with `journalctl -fu tgenesisd -ocat`.
+
+## state-sync.sh
+
+> [!CAUTION]
+> Running this will **wipe the entire database** (the _/data_-folder **excluding** the priv_validator_state.json file).
+>
+> Make a backup if needed: [utils/backup/create.sh](/utils/backup/create.sh).
+
+This script takes care of the needed steps to join the network via State Sync:
+
+- It stops the service (if it exists)
+- Installs all the necessary dependencies
+- Builds the binaries
+- Initializes the node
+- Resets config files
+- Fetches latest seeds and peers
+- Fetches `genesis.json`-file
+- Fetches RPC servers
+- Installs the service
+- Recalibrates **[statesync]** settings to a recent height (**default:** `` - `2000`)
+
+### Usage
+
+```
+sh setup/state-sync.sh
+```
+> If you wish to change the default _[height_interval]_ of `2000`, run [utils/tools/restate-sync.sh](/utils/tools/restate-sync.sh) _[height_interval]_ yourself _after_ having run _setup/state-sync.sh_; see [utils/README.md](/utils) for more information.
+>
+> If you can't access the `tgenesisd` command afterwards, execute the `. ~/.bashrc` _or_ `source ~/.bashrc` command in your terminal.
+
+## create-validator.sh
+
+> [!IMPORTANT]
+> _create-validator.sh_ requires a key.
+>
+> If you haven't already created or imported one, use: [utils/key/create.sh](/utils/key/create.sh) _or_ [utils/key/import.sh](/utils/key/import.sh).
+
+This script should only be run once you're **fully synced**. It's a wizard; prompting the user only the required fields for creating a validator.
+
+### Usage
+
+```
+sh setup/create-validator.sh
+```
diff --git a/setup/create-validator.sh b/setup/create-validator.sh
new file mode 100644
index 0000000000..d435ced2c3
--- /dev/null
+++ b/setup/create-validator.sh
@@ -0,0 +1,89 @@
+#!/bin/bash
+
+# Arguments check
+if [ -z "$1" ] || [ -z "$2" ]; then
+ echo ""
+ echo "Usage: sh $0 "
+ echo ""
+ exit 1
+fi
+
+cat <<"EOF"
+
+ /$$$$$$ /$$ /$$ /$$
+ /$$__ $$ |__/ | $$ /$$$$
+| $$ \__/ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$$ /$$ /$$$$$$$ | $$ |_ $$
+| $$ /$$$$ /$$__ $$| $$__ $$ /$$__ $$ /$$_____/| $$ /$$_____/ | $$ | $$
+| $$|_ $$| $$$$$$$$| $$ \ $$| $$$$$$$$| $$$$$$ | $$| $$$$$$ | $$ | $$
+| $$ \ $$| $$_____/| $$ | $$| $$_____/ \____ $$| $$ \____ $$ | $$ | $$
+| $$$$$$/| $$$$$$$| $$ | $$| $$$$$$$ /$$$$$$$/| $$ /$$$$$$$/ | $$$$$$$$ /$$$$$$
+ \______/ \_______/|__/ |__/ \_______/|_______/ |__/|_______/ |________/|______/
+
+Welcome to the decentralized blockchain Renaissance, above money & beyond cryptocurrency!
+EOF
+
+echo ""
+echo "Creating a validator should only be done if your node is all caught up (at the latest"
+echo "height) and you've generated or imported a key. In the /utils-folder you can find two"
+echo "scripts making it easier to either create a key or import one using a private key."
+echo ""
+echo "If you're all set, then you can proceed."
+read -p "Ready? (y/N): " ANSWER
+
+ANSWER=$(echo "$ANSWER" | tr 'A-Z' 'a-z') # Convert to lowercase
+
+if [ "$ANSWER" != "y" ]; then
+ echo "Aborted."
+ exit 1
+fi
+
+# Root of the current repository
+REPO_ROOT=$(cd "$(dirname "$0")"/.. && pwd)
+
+# Source the variables file
+. "$REPO_ROOT/utils/_variables.sh"
+
+# Arguments
+MONIKER=$1
+KEY_ALIAS=$2
+
+# Set default values
+DEFAULT_AMOUNT=1
+DEFAULT_COMMISSION_RATE=0.05
+DEFAULT_COMMISSION_MAX_RATE=0.99
+DEFAULT_COMMISSION_MAX_CHANGE_RATE=0.01
+DEFAULT_MINIMUM_SELF_DELEGATION=1000000
+DECIMALS="000000000000000000"
+DEFAULT_FEES="210000000000000000000"
+
+# Read optional user inputs
+read -p "What's the amount you'll self-delegate? (denom: L1) [default: $DEFAULT_AMOUNT]: " AMOUNT
+AMOUNT=${AMOUNT:-$DEFAULT_AMOUNT}
+read -p "What will be your commission rate percentage? (default: $DEFAULT_COMMISSION_RATE): " COMMISSION_RATE
+COMMISSION_RATE=${COMMISSION_RATE:-$DEFAULT_COMMISSION_RATE}
+read -p "What will be your max commission rate percentage? (default: $DEFAULT_COMMISSION_MAX_RATE): " COMMISSION_MAX_RATE
+COMMISSION_MAX_RATE=${COMMISSION_MAX_RATE:-$DEFAULT_COMMISSION_MAX_RATE}
+read -p "What will be your max commission change rate percentage per day? (default: $DEFAULT_COMMISSION_MAX_CHANGE_RATE): " COMMISSION_MAX_CHANGE_RATE
+COMMISSION_MAX_CHANGE_RATE=${COMMISSION_MAX_CHANGE_RATE:-$DEFAULT_COMMISSION_MAX_CHANGE_RATE}
+read -p "What will be your minimum self delegation? (denom: el1) [default: $DEFAULT_MINIMUM_SELF_DELEGATION]: " MINIMUM_SELF_DELEGATION
+MINIMUM_SELF_DELEGATION=${MINIMUM_SELF_DELEGATION:-$DEFAULT_MINIMUM_SELF_DELEGATION}
+read -p "What will you set for gas fees? (denom: el1) [default: $DEFAULT_FEES]: " FEES
+FEES=${FEES:-$DEFAULT_FEES}
+
+COMMAND_TO_EXECUTE="$BINARY_NAME tx staking create-validator \
+--amount "$AMOUNT$DECIMALS"el1 \
+--pubkey '$($BINARY_NAME tendermint show-validator)' \
+--moniker "$MONIKER" \
+--chain-id "$CHAIN_ID" \
+--commission-rate "$COMMISSION_RATE" \
+--commission-max-rate "$COMMISSION_MAX_RATE" \
+--commission-max-change-rate "$COMMISSION_MAX_CHANGE_RATE" \
+--min-self-delegation "$MINIMUM_SELF_DELEGATION" \
+--gas "2200000" \
+--from "$KEY_ALIAS" \
+--fees "$FEES"el1 \
+-y"
+
+echo ""
+echo "will execute: $COMMAND_TO_EXECUTE"
+eval "$COMMAND_TO_EXECUTE"
\ No newline at end of file
diff --git a/setup/dependencies.sh b/setup/dependencies.sh
new file mode 100644
index 0000000000..e5d55b0533
--- /dev/null
+++ b/setup/dependencies.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# Helper-function: adds a line to a file if it doesn't already exist (to prevent duplicates)
+add_line_to_file() {
+ local line="$1"
+ local file="$2"
+ local use_sudo="$3"
+
+ if ! grep -qF "$line" "$file"; then
+ if $use_sudo; then
+ echo "$line" | sudo tee -a "$file" > /dev/null
+ else
+ echo "$line" >> "$file"
+ fi
+
+ echo "Line '$line' added to $file."
+ else
+ echo "Line '$line' already exists in $file."
+ fi
+}
+
+# System update and installation of dependencies
+sudo apt-get update -y
+sudo apt-get install jq git wget make gcc build-essential snapd -y
+snap install go --channel=1.20/stable --classic
+snap refresh go --channel=1.20/stable --classic
+
+# Add GOPATH
+export PATH=$PATH:$(go env GOPATH)/bin
+add_line_to_file 'export PATH=$PATH:$(go env GOPATH)/bin' ~/.bashrc false
+
+# Global change of open file limits
+add_line_to_file "* - nofile 50000" /etc/security/limits.conf false
+add_line_to_file "root - nofile 50000" /etc/security/limits.conf false
+add_line_to_file "fs.file-max = 50000" /etc/sysctl.conf false
+ulimit -n 50000
diff --git a/setup/state-sync.sh b/setup/state-sync.sh
new file mode 100644
index 0000000000..81a927acdd
--- /dev/null
+++ b/setup/state-sync.sh
@@ -0,0 +1,100 @@
+#!/bin/bash
+
+# Arguments check
+if [ -z "$1" ]; then
+ echo ""
+ echo "Usage: sh $0 "
+ echo ""
+ exit 1
+fi
+
+cat <<"EOF"
+
+ /$$$$$$ /$$ /$$ /$$
+ /$$__ $$ |__/ | $$ /$$$$
+| $$ \__/ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$$ /$$ /$$$$$$$ | $$ |_ $$
+| $$ /$$$$ /$$__ $$| $$__ $$ /$$__ $$ /$$_____/| $$ /$$_____/ | $$ | $$
+| $$|_ $$| $$$$$$$$| $$ \ $$| $$$$$$$$| $$$$$$ | $$| $$$$$$ | $$ | $$
+| $$ \ $$| $$_____/| $$ | $$| $$_____/ \____ $$| $$ \____ $$ | $$ | $$
+| $$$$$$/| $$$$$$$| $$ | $$| $$$$$$$ /$$$$$$$/| $$ /$$$$$$$/ | $$$$$$$$ /$$$$$$
+ \______/ \_______/|__/ |__/ \_______/|_______/ |__/|_______/ |________/|______/
+
+Welcome to the decentralized blockchain Renaissance, above money & beyond cryptocurrency!
+EOF
+
+echo ""
+echo "This script is intended for those who would like to join the testnet using State Sync."
+echo "State Sync allows a node to join a network in a matter of minutes/hours, without having"
+echo "to worry about needing a lot of free disk space."
+echo ""
+echo "While this is favorable for the individual validator, it isn't necessarly from a broader"
+echo "network perspective since you do not have the entire history of the blockchain recorded."
+echo "So take this into consideration when deciding to state sync or not."
+echo ""
+echo "WARNING: Any config files will get overwritten and the data folder shall be removed, but there"
+echo "will be a backup and restore of the priv_validator_state.json file. If needed, use"
+echo "utils/backup/create.sh to create a backup."
+echo ""
+echo "WARNING: this script should NOT be used for local testnet purposes."
+echo "Use setup-local/state-sync.sh for this instead."
+echo ""
+read -p "Do you want to continue? (y/N): " ANSWER
+
+ANSWER=$(echo "$ANSWER" | tr 'A-Z' 'a-z') # Convert to lowercase
+
+if [ "$ANSWER" != "y" ]; then
+ echo "Aborted."
+ exit 1
+fi
+
+# Root of the current repository
+REPO_ROOT=$(cd "$(dirname "$0")"/.. && pwd)
+
+# Source the variables file
+. "$REPO_ROOT/utils/_variables.sh"
+
+# Arguments
+MONIKER=$1
+
+# Stop processes
+systemctl stop $BINARY_NAME
+
+# cd to root of the repository
+cd $REPO_ROOT
+
+# System update and installation of dependencies
+. ./setup/dependencies.sh
+
+# Building binaries
+go mod tidy
+make install
+
+# Set chain-id
+$BINARY_NAME config chain-id $CHAIN_ID
+
+# Init node
+$BINARY_NAME init $MONIKER --chain-id $CHAIN_ID -o
+
+# Chain specific configurations (i.e. timeout_commit 10s, min gas price 50gel)
+cp "./configs/default_app.toml" $CONFIG_DIR/app.toml
+cp "./configs/default_config.toml" $CONFIG_DIR/config.toml
+# Set moniker again since the configs got overwritten
+sed -i "s/moniker = .*/moniker = \"$MONIKER\"/" $CONFIG_DIR/config.toml
+
+# Fetch latest seeds and peers list from genesis-parameters repo
+sh ./utils/fetch/peers.sh
+
+# Fetch state file from genesis-parameters repo
+sh ./utils/fetch/state.sh
+
+# Fetch latest rpc_servers from genesis-parameters repo
+sh ./utils/fetch/rpcs.sh
+
+# Install service
+sh ./utils/service/install.sh
+
+# Recalibrate state sync
+if sh ./utils/tools/restate-sync.sh; then
+ echo ""
+ echo "PS: if you're unable to access the $BINARY_NAME command, run '. ~/.bashrc' or 'source ~/.bashrc'."
+fi
\ No newline at end of file
diff --git a/setup/upgrade.sh b/setup/upgrade.sh
new file mode 100644
index 0000000000..989ed8d761
--- /dev/null
+++ b/setup/upgrade.sh
@@ -0,0 +1,87 @@
+#!/bin/bash
+
+cat <<"EOF"
+
+ /$$$$$$ /$$ /$$ /$$
+ /$$__ $$ |__/ | $$ /$$$$
+| $$ \__/ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$$ /$$ /$$$$$$$ | $$ |_ $$
+| $$ /$$$$ /$$__ $$| $$__ $$ /$$__ $$ /$$_____/| $$ /$$_____/ | $$ | $$
+| $$|_ $$| $$$$$$$$| $$ \ $$| $$$$$$$$| $$$$$$ | $$| $$$$$$ | $$ | $$
+| $$ \ $$| $$_____/| $$ | $$| $$_____/ \____ $$| $$ \____ $$ | $$ | $$
+| $$$$$$/| $$$$$$$| $$ | $$| $$$$$$$ /$$$$$$$/| $$ /$$$$$$$/ | $$$$$$$$ /$$$$$$
+ \______/ \_______/|__/ |__/ \_______/|_______/ |__/|_______/ |________/|______/
+
+EOF
+
+echo ""
+echo "This script should only be used if you run a full-node and have to perform the plan_crypto"
+echo "upgrade! This means you are currently operating on the Evmos fork of GenesisL1 and the node"
+echo "synced till the height that caused it to panic."
+echo ""
+echo "If this is not the case AND you wish to run a full-node, then head on over to GenesisL1's"
+echo "Evmos repository and follow the instructions over there."
+echo ""
+echo "WARNING: this script should NOT be used for local testnet purposes."
+echo "Use setup-local/upgrade.sh for this instead."
+echo ""
+read -p "Do you want to continue? (y/N): " ANSWER
+
+ANSWER=$(echo "$ANSWER" | tr 'A-Z' 'a-z') # Convert to lowercase
+
+if [ "$ANSWER" != "y" ]; then
+ echo "Aborted."
+ exit 1
+fi
+
+# Root of the current repository
+REPO_ROOT=$(cd "$(dirname "$0")"/.. && pwd)
+
+# Source the variables file
+. "$REPO_ROOT/utils/_variables.sh"
+
+# Stop services
+systemctl stop $BINARY_NAME
+
+# cd to root of the repository
+cd $REPO_ROOT
+
+# System update and installation of dependencies
+. ./setup/dependencies.sh
+
+# Create a backup of old config files
+cp $CONFIG_DIR/app.toml $CONFIG_DIR/app.toml.bak
+cp $CONFIG_DIR/config.toml $CONFIG_DIR/config.toml.bak
+
+# Backup moniker and pruning settings
+MONIKER=$(grep "^moniker =" "$CONFIG_DIR/config.toml")
+PRUNING=$(grep "^pruning =" "$CONFIG_DIR/app.toml")
+PRUNING_KEEP_RECENT=$(grep "^pruning-keep-recent =" "$CONFIG_DIR/app.toml")
+#pruning-keep-every got deprecated
+PRUNING_INTERVAL=$(grep "^pruning-interval =" "$CONFIG_DIR/app.toml")
+
+# Introduce new config files
+cp ./configs/default_app.toml $CONFIG_DIR/app.toml
+cp ./configs/default_config.toml $CONFIG_DIR/config.toml
+
+# Restore moniker and pruning settings
+sed -i "s|^.*moniker =.*$|$MONIKER|" $CONFIG_DIR/config.toml
+sed -i "s|^.*pruning =.*$|$PRUNING|" $CONFIG_DIR/app.toml
+sed -i "s|^.*pruning-keep-recent =.*$|$PRUNING_KEEP_RECENT|" $CONFIG_DIR/app.toml
+#pruning-keep-every got deprecated
+sed -i "s|^.*pruning-interval =.*$|$PRUNING_INTERVAL|" $CONFIG_DIR/app.toml
+
+# Fetch latest seeds and peers list from genesis-parameters repo
+sh ./utils/fetch/peers.sh
+
+# Install binaries
+go mod tidy
+make install && {
+ echo ""
+ echo "Upgrade was a success!"
+ echo ""
+ echo "The config.toml and app.toml file have been replaced by newer variants."
+ echo "A backup under the name app.toml.bak and config.toml.bak are available if"
+ echo "you ever need to restore some of your previous settings."
+ echo ""
+ echo "When ready, turn on your node again using '$BINARY_NAME start' or 'systemctl start $BINARY_NAME'!"
+}
diff --git a/test.txt b/test.txt
deleted file mode 100644
index 9daeafb986..0000000000
--- a/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-test
diff --git a/utils/.install/.config b/utils/.install/.config
new file mode 100644
index 0000000000..5d0431151a
--- /dev/null
+++ b/utils/.install/.config
@@ -0,0 +1 @@
+version=main
diff --git a/utils/.install/.versionmap b/utils/.install/.versionmap
new file mode 100644
index 0000000000..78cfcf4d21
--- /dev/null
+++ b/utils/.install/.versionmap
@@ -0,0 +1,20 @@
+.install/updater.sh v1.0.0 r
+.install/_variables.sh.example v1.0.1 a
+backup/create.sh v1.0.0 u
+backup/README.md v1.0.0 d
+fetch/peers.sh v1.0.0 u
+fetch/rpcs.sh v1.0.0 u
+fetch/state.sh v1.0.0 u
+fetch/README.md v1.0.1 d
+info/my-peer.sh v1.0.0 u
+info/README.md v1.0.1 d
+key/create.sh v1.0.0 u
+key/import.sh v1.0.0 u
+key/README.md v1.0.0 d
+service/install.sh v1.0.0 u
+service/uninstall.sh v1.0.0 u
+service/README.md v1.0.1 d
+tools/restate-sync.sh v1.0.1b u
+tools/port-shifter.sh v1.0.1b u
+tools/README.md v1.0.1 d
+LICENSE v1.0.0 a
diff --git a/utils/.install/_variables.sh.example b/utils/.install/_variables.sh.example
new file mode 100644
index 0000000000..c3ef7e57e8
--- /dev/null
+++ b/utils/.install/_variables.sh.example
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# This is an example.
+# Create a _variables.sh file in the root and add these variables to allow the scripts to work their magic.
+
+# Variables for all modules
+CHAIN_ID=genesis_29-2
+BINARY_NAME=genesisd
+NODE_DIR_NAME=.genesis
+NODE_DIR=$HOME/$NODE_DIR_NAME
+CONFIG_DIR=$NODE_DIR/config
+DATA_DIR=$NODE_DIR/data
+
+# /fetch module variables.
+# Adviced is to create a repo containing a genesis.json, seeds.txt, peers.txt and rpc_servers.txt file.
+# See: https://github.com/zenodeapp/genesis-parameters/tree/main/genesis_29-2 for an example.
+FETCH_URL=https://raw.githubusercontent.com/zenodeapp/genesis-parameters/main/$CHAIN_ID
+SEEDS_URL=$FETCH_URL/seeds.txt
+PEERS_URL=$FETCH_URL/peers.txt
+STATE_URL=$FETCH_URL/genesis.json
+RPC_SERVERS_URL=$FETCH_URL/rpc_servers.txt
+
+# /info module variables.
+IP_INFO_PROVIDER=ipinfo.io/ip
+
+# /service module variables.
+SERVICE_DIR=$(cd "$(dirname "$0")"/../.. && pwd)/services # Where the service file is located, this example points two directories back based on /service/* (e.g. /service/install.sh/../../services).
+SERVICE_FILE=$BINARY_NAME.service
diff --git a/utils/.install/updater.sh b/utils/.install/updater.sh
new file mode 100644
index 0000000000..84010b52f1
--- /dev/null
+++ b/utils/.install/updater.sh
@@ -0,0 +1,274 @@
+#!/bin/bash
+
+UPDATER_VERSION=v1.0.0
+
+usage() {
+ echo "COSMOS UTILS UPGRADER"
+ echo ""
+ echo "The upgrader is set to use tag/commit/branch '$VERSION' (add the flag \e[3m--version [tag|commit|branch]\e[0m to change this)."
+ echo ""
+ echo "CAUTION: running this will regenerate the README.md, if you made any custom changes, make sure to create a backup before continuing."
+ echo ""
+ read -p "Do you want to perform the upgrade using '$VERSION'? (y/N): " RESPONSE
+}
+
+usageInstall() {
+ echo "COSMOS UTILS INSTALLER"
+ echo ""
+ echo "This will install the Cosmos Utilities from https://github.com/zenodeapp/cosmos-utils using tag/commit/branch '$VERSION' (add the flag \e[3m--version [tag|commit|branch]\e[0m to change this)."
+ echo "The user will be able to choose which utilities will be downloaded and which won't."
+ echo ""
+ read -p "Do you want to install using '$VERSION'? (y/N): " RESPONSE
+}
+
+# Function to prompt the user for a yes/no answer (defaults to yes)
+askYesNo() {
+ local ANSWER
+ ( exec "$CONFIG"
+fi
+
+if [ -z "$VERSION" ]; then
+ VERSION=main
+fi
+
+if $RESET; then
+ usageInstall
+else
+ usage
+fi
+
+RESPONSE=$(echo "$RESPONSE" | tr 'A-Z' 'a-z') # Convert to lowercase
+
+if [ "$RESPONSE" != "y" ]; then
+ echo "Aborted. Make the necessary changes in the $CONFIG file before continuing."
+ exit 1
+fi
+
+# Variables
+REPO="https://raw.githubusercontent.com/zenodeapp/cosmos-utils/$VERSION"
+REPO_VERSION_MAP="$REPO/.install/.versionmap"
+LOCAL_VERSION_MAP="$ROOT/.install/.versionmap"
+REMOTE_VERSION_MAP="$ROOT/.install/.versionmap.remote"
+NEW_VERSION_MAP="$ROOT/.install/.versionmap.new"
+EXCLUDE=""
+CHANGE_MADE=false
+UPGRADE_FOUND=false
+
+# Function to perform cleanup
+cleanup() {
+ rm -r "$REMOTE_VERSION_MAP" "$NEW_VERSION_MAP" "$ROOT/.readme" > /dev/null 2>&1
+}
+
+# Clean up temporary files
+cleanup
+
+# Set up trap to call cleanup function on SIGINT (Ctrl+C)
+trap 'cleanup; echo; exit 1' INT
+
+# Download necessary files for readme alterations
+mkdir -p "$ROOT/.readme"
+wget --no-cache -qO- "$REPO/.readme/generate.sh" > $ROOT/.readme/generate.sh
+wget --no-cache -qO- "$REPO/.readme/filter.sh" > $ROOT/.readme/filter.sh
+wget --no-cache -qO- "$REPO/.readme/template-installed.md" > $ROOT/.readme/template-installed.md
+
+# Create local versionmap if it doesn't exist
+if [ ! -e "$LOCAL_VERSION_MAP" ]; then
+ echo ".install/updater.sh $UPDATER_VERSION r" > "$LOCAL_VERSION_MAP"
+fi
+
+# Function to download a file
+downloadFile() {
+ local remote_file="$1"
+ local remote_version="$2"
+ local remote_type="$3"
+ local prompt="$4"
+ local auto_yes=$5
+
+ if $auto_yes || askYesNo "$prompt"; then
+ mkdir -p "$(dirname "$ROOT/$remote_file")"
+ wget --no-cache -q "$REPO/$remote_file" -O "$ROOT/$remote_file"
+ echo "$remote_file $remote_version $remote_type" >> "$NEW_VERSION_MAP"
+
+ case "$remote_type" in
+ d)
+ bash $ROOT/.readme/filter.sh "$ROOT/$remote_file" "$ROOT/$remote_file.tmp" "$EXCLUDE"
+ cat "$ROOT/$remote_file.tmp" > "$ROOT/$remote_file"
+ rm "$ROOT/$remote_file.tmp"
+ ;;
+ r)
+ # Custom behavior for updater.sh
+ tail -n +2 "$LOCAL_VERSION_MAP" >> "$NEW_VERSION_MAP"
+ cat $NEW_VERSION_MAP > "$LOCAL_VERSION_MAP"
+
+ # Clean up temporary files
+ cleanup
+
+ echo "The updater.sh script has been updated. Please restart the script for changes to take effect."
+ exit 0
+ ;;
+ esac
+
+ CHANGE_MADE=true
+ return 0 # Indicates success
+ else
+ return 1 # Indicates "No" response
+ fi
+}
+
+# Download the remote version map
+mkdir -p "$(dirname "$REMOTE_VERSION_MAP")"
+wget --no-cache -qO- "$REPO_VERSION_MAP" > $REMOTE_VERSION_MAP
+
+# Compare local and remote version maps
+while IFS= read -r remote_line; do
+ remote_file=$(echo "$remote_line" | awk '{print $1}')
+ remote_version=$(echo "$remote_line" | awk '{print $2}')
+ remote_type=$(echo "$remote_line" | awk '{print $3}')
+
+ # Check if the line exists in the local version map
+ local_version=$(awk -v file="$remote_file" '$1==file {print $2}' "$LOCAL_VERSION_MAP")
+
+ next_module="${remote_file%%/*}"
+
+ if [ "$next_module" != "$current_module" ]; then
+ module_included=false
+ current_module="$next_module"
+ fi
+
+ # File is not present in local version map
+ if [ -z "$local_version" ]; then
+ if ! [ "$remote_type" = "d" ] || $module_included; then
+ # Default prompt
+ prompt="File '$remote_file' is not present locally. Do you want to download it?"
+
+ # Utility prompt
+ if [ "$remote_type" = "u" ]; then
+ prompt="New utility '$remote_file' detected. Do you want to download it?"
+ fi
+
+ if [ "$remote_type" = "a" ] || [ "$remote_type" = "d" ]; then
+ auto_yes=true
+ else
+ auto_yes=false
+ fi
+
+ if ! downloadFile "$remote_file" "$remote_version" "$remote_type" "$prompt" $auto_yes; then
+ EXCLUDE="$EXCLUDE,$remote_file"
+ else
+ module_included=true
+ fi
+ fi
+ else
+ if [ "$local_version" != "$remote_version" ]; then
+ # Default prompt
+ prompt="Different version found for '$remote_file' (current: $local_version). Do you want to update to $remote_version?"
+
+ UPGRADE_FOUND=true
+
+ # Versions differ
+ if ! downloadFile "$remote_file" "$remote_version" "$remote_type" "$prompt" false; then
+ echo "$remote_file $local_version $remote_type" >> "$NEW_VERSION_MAP"
+ fi
+ else
+ echo "$remote_file $remote_version $remote_type" >> "$NEW_VERSION_MAP"
+ fi
+ fi
+done < $REMOTE_VERSION_MAP
+
+# Check for files in local version map not present in remote version map
+while IFS= read -r local_line; do
+ local_file=$(echo "$local_line" | awk '{print $1}')
+
+ # Check if the file is not present in the remote version map
+ if ! grep -q "$local_file" $REMOTE_VERSION_MAP; then
+ # File is not present in remote version map
+ if askYesNo "File '$local_file' is not present in the remote version map. Do you want to remove it?"; then
+ rm "$ROOT/$local_file"
+
+ # Check if the directory is empty and remove it
+ DIR=$(dirname "$ROOT/$local_file")
+ if [ -z "$(ls -A "$DIR")" ]; then
+ rmdir "$DIR" # Remove the directory if it's empty
+ fi
+
+ # Exclude from readme
+ EXCLUDE="$EXCLUDE,$local_file"
+ CHANGE_MADE=true
+ else
+ # Keep the local version in the new version map
+ local_version=$(awk -v file="$local_file" '$1==file {print $2}' "$LOCAL_VERSION_MAP")
+ local_type=$(awk -v file="$local_file" '$1==file {print $3}' "$LOCAL_VERSION_MAP")
+ echo "$local_file $local_version $local_type" >> "$NEW_VERSION_MAP"
+ fi
+ fi
+done < "$LOCAL_VERSION_MAP"
+
+# Recreate the new local version map
+cat $NEW_VERSION_MAP > "$LOCAL_VERSION_MAP"
+
+if ! $CHANGE_MADE && ! $UPGRADE_FOUND; then
+ echo "Already up to date."
+elif $CHANGE_MADE; then
+ echo "Changes made successfully."
+fi
+
+# Regenerate README if change detected
+sh $ROOT/.readme/generate.sh --template "template-installed"
+
+# Add _variables.sh file if we're resetting
+if $RESET; then
+ cat "$ROOT/.install/_variables.sh.example" > "$ROOT/_variables.sh"
+ echo "$ROOT/_variables.sh was overwritten by $ROOT/.install/_variables.sh.example, make sure to adapt this accordingly."
+fi
+
+# Clean up temporary files
+cleanup
\ No newline at end of file
diff --git a/utils/LICENSE b/utils/LICENSE
new file mode 100644
index 0000000000..d200b18536
--- /dev/null
+++ b/utils/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 ZENODE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/utils/README.md b/utils/README.md
new file mode 100644
index 0000000000..ab668ad1f3
--- /dev/null
+++ b/utils/README.md
@@ -0,0 +1,134 @@
+# Utilities
+
+This contains useful scripts for maintaining a Cosmos SDK based node setup and comes from the [`cosmos-utils`](https://github.com/zenodeapp/cosmos-utils) repository.
+
+This has been written by ZENODE and is licensed under the MIT-license (see [LICENSE](./LICENSE)).
+
+## \_variables.sh
+
+This holds all the repository-specific variables shared with most of the scripts. This makes it easier to adjust the chain-id, binary name or node directory without having to change it in a lot of different files.
+
+## /backup
+
+### [create.sh](./backup/create.sh)
+
+This script creates a backup for the current node-setup, if one existed.
+
+```
+sh backup/create.sh [backup_dir_path]
+```
+
+> _[backup_dir_path]_ is optional (defaults: to a directory in the $HOME folder with a _unique_ name based on the system's current time).
+
+## /fetch
+
+### [peers.sh](./fetch/peers.sh)
+
+This script fetches the (most recent) seeds and peers for the chain-id configured in the [\_variables.sh](./_variables.sh) file and adds it to the `seeds` and `persistent_peers` fields in the config.toml file residing in the node's directory.
+
+```
+sh fetch/peers.sh
+```
+
+### [rpcs.sh](./fetch/rpcs.sh)
+
+This script fetches the (most recent) rpc_servers (state sync) for the chain-id configured in the [\_variables.sh](./_variables.sh) file and adds it to the `rpc_servers` field in the config.toml file residing in the node's directory.
+
+```
+sh fetch/rpcs.sh
+```
+
+### [state.sh](./fetch/state.sh)
+
+This script fetches the (most recent) `genesis.json` file for the chain-id configured in the [\_variables.sh](./_variables.sh) file and places it inside of the /config-folder residing in the node's directory.
+
+```
+sh fetch/state.sh
+```
+
+## /info
+
+### [my-peer.sh](./info/my-peer.sh)
+
+This script will print out your peer-id: _node-id@ip-address:port_. This is useful for sharing your node with others so that they can add you as a persistent peer.
+
+Bear in mind that the _port_ being echo'd is extracted from the _config.toml_-file. So if you start the node on a different port without explicitly stating this in the _config.toml_-file, then the outputted port may not represent the actual port this node uses.
+
+```
+sh info/my-peer.sh
+```
+
+> Add a --local flag to echo a local IP address, instead of your (public) external address.
+
+## /key
+
+### [create.sh](./key/create.sh)
+
+This script creates a _new_ key (or prompts to overwrite one if the _alias_ already exists).
+
+```
+sh key/create.sh
+```
+
+### [import.sh](./key/import.sh)
+
+This script imports an _existing_ key using the provided _private Ethereum key_.
+
+```
+sh key/import.sh
+```
+
+## /service
+
+### [install.sh](./service/install.sh)
+
+This script installs the daemon as a service, which will automatically start the node whenever the device reboots. See the `$SERVICE_DIR` and `$SERVICE_FILE` variables in [\_variables.sh](./_variables.sh) to see which service gets installed.
+
+```
+sh service/install.sh
+```
+
+### [uninstall.sh](./service/uninstall.sh)
+
+This script uninstalls the daemon as a service. See the `$SERVICE_FILE` variable in [\_variables.sh](./_variables.sh) to see which service gets uninstalled.
+
+```
+sh service/uninstall.sh
+```
+
+## /tools
+
+### [restate-sync.sh](./tools/restate-sync.sh)
+
+> [!CAUTION]
+> Only use this if the network your node is connected to supports state-sync!
+
+This tool recalibrates your state-sync configurations to a more recent height. **WARNING: this wipes your entire data folder, but will backup and restore the priv_validator_state.json file**. It uses the script(s) from the [`restate-sync`](https://github.com/zenodeapp/restate-sync/tree/v1.0.1) repository (`v1.0.1`). If in doubt whether this is safe, you could always check the repository to see how it works.
+
+```
+sh tools/restate-sync.sh [height_interval] [rpc_server_1] [rpc_server_2]
+```
+
+> [height_interval] is optional (default: 2000). This means it will set the trust_height to: latest_height - height_interval (rounded to nearest multiple of height_interval).
+>
+> [rpc_server_1] is optional (default: first rpc server configured in your config.toml file). If there is no rpc server configured, the script will abort.
+>
+> [rpc_server_2] is optional (default: rpc_server_1).
+
+> [!NOTE]
+> Leaving the __-arguments empty will leave the rpc_servers field in your config.toml untouched.
+
+### [port-shifter.sh](./tools/port-shifter.sh)
+
+This script is useful if you quickly want to replace the ports in the `client.toml`, `config.toml` and `app.toml` files. It uses the script(s) from the [`port-shifter`](https://github.com/zenodeapp/port-shifter/tree/v1.0.1) repository (`v1.0.1`). If in doubt whether this is safe, you could always check the repository to see how it works.
+
+```
+sh tools/port-shifter.sh
+```
+
+> is how much you would like to increment the value of the ports based on the default port values.
+
+
+
+
— ZEN
+
Copyright (c) 2024 ZENODE
diff --git a/utils/_variables.sh b/utils/_variables.sh
new file mode 100644
index 0000000000..9fd050bd4f
--- /dev/null
+++ b/utils/_variables.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# Variables for all modules
+CHAIN_ID=tgenesis_290-1
+BINARY_NAME=tgenesisd
+NODE_DIR_NAME=.tgenesis
+NODE_DIR=$HOME/$NODE_DIR_NAME
+CONFIG_DIR=$NODE_DIR/config
+DATA_DIR=$NODE_DIR/data
+
+# /fetch module variables.
+FETCH_URL=https://raw.githubusercontent.com/alpha-omega-labs/genesis-parameters/main/$CHAIN_ID
+SEEDS_URL=$FETCH_URL/seeds.txt
+PEERS_URL=$FETCH_URL/peers.txt
+STATE_URL=$FETCH_URL/genesis.json
+RPC_SERVERS_URL=$FETCH_URL/rpc_servers.txt
+
+# /info module variables.
+IP_INFO_PROVIDER=ipinfo.io/ip
+
+# /service module variables.
+SERVICE_DIR=$(cd "$(dirname "$0")"/../.. && pwd)/services
+SERVICE_FILE=$BINARY_NAME.service
diff --git a/utils/backup/README.md b/utils/backup/README.md
new file mode 100644
index 0000000000..11e6555708
--- /dev/null
+++ b/utils/backup/README.md
@@ -0,0 +1,11 @@
+## /backup
+
+### [create.sh](../backup/create.sh)
+
+This script creates a backup for the current node-setup, if one existed.
+
+```
+sh backup/create.sh [backup_dir_path]
+```
+
+> _[backup_dir_path]_ is optional (defaults: to a directory in the $HOME folder with a _unique_ name based on the system's current time).
diff --git a/utils/backup/create.sh b/utils/backup/create.sh
new file mode 100644
index 0000000000..cf9c54c608
--- /dev/null
+++ b/utils/backup/create.sh
@@ -0,0 +1,77 @@
+#!/bin/bash
+
+# Source the _variables.sh file
+. "$(cd "$(dirname "$0")"/.. && pwd)/_variables.sh"
+
+# Node directory check
+if [ ! -e "$NODE_DIR" ]; then
+ echo "No backup can be made for $NODE_DIR doesn't exist!"
+ exit 1
+fi
+
+# Arguments
+BACKUP_DIR=${1:-$HOME/""$NODE_DIR_NAME"_backup_$(date +"%Y%m%d%H%M%S")"}
+
+# Information prompt
+echo "This script will halt $BINARY_NAME and backup the $NODE_DIR folder."
+echo ""
+echo " o Backup directory is set to: $BACKUP_DIR."
+if [ -z $1 ]; then
+ echo " This can be changed using: sh $0 [backup_dir]"
+fi
+echo ""
+echo "If you continue, you'll be asked whether you'd want to back-up the entire"
+echo "/data folder. The choice you make won't decide whether priv_validator_state.json"
+echo "gets backed up or not, as this will always be performed."
+echo ""
+read -p "Do you want to continue? (y/N): " ANSWER
+
+ANSWER=$(echo "$ANSWER" | tr 'A-Z' 'a-z') # Convert to lowercase
+
+if [ "$ANSWER" != "y" ]; then
+ echo "Aborted."
+ exit 1
+fi
+
+# Preserve database prompt
+read -p "Do you also want to backup the database (entire /data folder)? (y/N): " PRESERVE
+
+PRESERVE=$(echo "$PRESERVE" | tr 'A-Z' 'a-z') # Convert to lowercase
+
+if [ "$PRESERVE" = "y" ]; then
+ PRESERVE_DB=true
+ read -p "Do you want to perform the /data backup with a copy or move operation? (c/M): " COPY_MOVE
+ COPY_MOVE=$(echo "$COPY_MOVE" | tr 'A-Z' 'a-z') # Convert to lowercase
+else
+ PRESERVE_DB=false
+fi
+
+# Stop processes
+systemctl stop $BINARY_NAME
+
+# Backup of previous configuration if one existed
+rsync -qr --verbose --exclude 'data' --exclude 'config/genesis.json' "$NODE_DIR"/ "$BACKUP_DIR"/
+
+# Remake /data folder
+rm -r "$BACKUP_DIR"/data > /dev/null 2>&1
+mkdir -p "$BACKUP_DIR"/data
+
+# Perform /data folder operations
+if $PRESERVE_DB; then
+ if [ "$COPY_MOVE" = "c" ]; then
+ if cp -r $DATA_DIR "$BACKUP_DIR"/; then
+ echo "Backed up entire /data folder with a cp-operation."
+ fi
+ else
+ if mv $DATA_DIR "$BACKUP_DIR"/; then
+ echo "Backed up entire /data folder with a mv-operation."
+ fi
+ fi
+else
+ if cp "$DATA_DIR"/priv_validator_state.json "$BACKUP_DIR"/data/priv_validator_state.json; then
+ echo "Backed up previous priv_validator_state.json file."
+ fi
+fi
+
+# Echo result
+echo "$NODE_DIR was backed up to to $BACKUP_DIR."
\ No newline at end of file
diff --git a/utils/fetch/README.md b/utils/fetch/README.md
new file mode 100644
index 0000000000..3c1bc390f9
--- /dev/null
+++ b/utils/fetch/README.md
@@ -0,0 +1,25 @@
+## /fetch
+
+### [peers.sh](../fetch/peers.sh)
+
+This script fetches the (most recent) seeds and peers for the chain-id configured in the [\_variables.sh](../_variables.sh) file and adds it to the `seeds` and `persistent_peers` fields in the config.toml file residing in the node's directory.
+
+```
+sh fetch/peers.sh
+```
+
+### [rpcs.sh](../fetch/rpcs.sh)
+
+This script fetches the (most recent) rpc_servers (state sync) for the chain-id configured in the [\_variables.sh](../_variables.sh) file and adds it to the `rpc_servers` field in the config.toml file residing in the node's directory.
+
+```
+sh fetch/rpcs.sh
+```
+
+### [state.sh](../fetch/state.sh)
+
+This script fetches the (most recent) `genesis.json` file for the chain-id configured in the [\_variables.sh](../_variables.sh) file and places it inside of the /config-folder residing in the node's directory.
+
+```
+sh fetch/state.sh
+```
diff --git a/utils/fetch/peers.sh b/utils/fetch/peers.sh
new file mode 100644
index 0000000000..3a7168e536
--- /dev/null
+++ b/utils/fetch/peers.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Source the _variables.sh file
+. "$(cd "$(dirname "$0")"/.. && pwd)/_variables.sh"
+
+# Fetch latest seeds and peers
+SEEDS=$(wget -qO - $SEEDS_URL | head -n 1)
+PERSISTENT_PEERS=$(wget -qO - $PEERS_URL | head -n 1)
+
+# Add latest seeds and peers to the config.toml file
+sed -i "s#seeds = .*#seeds = $SEEDS#" "$CONFIG_DIR/config.toml"
+sed -i "s#persistent_peers = .*#persistent_peers = $PERSISTENT_PEERS#" "$CONFIG_DIR/config.toml"
+
+# Echo result
+echo "Added seeds = $SEEDS"
+echo "Added persistent_peers = $PERSISTENT_PEERS"
\ No newline at end of file
diff --git a/utils/fetch/rpcs.sh b/utils/fetch/rpcs.sh
new file mode 100644
index 0000000000..2881be17cf
--- /dev/null
+++ b/utils/fetch/rpcs.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Source the _variables.sh file
+. "$(cd "$(dirname "$0")"/.. && pwd)/_variables.sh"
+
+# Fetch latest rpc_servers
+RPC_SERVERS=$(wget -qO - $RPC_SERVERS_URL | head -n 1)
+
+if [ -z "$RPC_SERVERS" ] || [ "$RPC_SERVERS" = '""' ]; then
+ # Echo result
+ echo "No rpc_servers found."
+else
+ # Add latest rpc_servers to the config.toml file
+ sed -i "s#rpc_servers = .*#rpc_servers = $RPC_SERVERS#" "$CONFIG_DIR/config.toml"
+
+ # Echo result
+ echo "Added rpc_servers = $RPC_SERVERS"
+fi
\ No newline at end of file
diff --git a/utils/fetch/state.sh b/utils/fetch/state.sh
new file mode 100644
index 0000000000..d64efd8df8
--- /dev/null
+++ b/utils/fetch/state.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# Source the _variables.sh file
+. "$(cd "$(dirname "$0")"/.. && pwd)/_variables.sh"
+
+# Fetch genesis.json
+wget -qO "$CONFIG_DIR/genesis.json" $STATE_URL
+
+# Echo result
+echo "Added genesis.json file to $CONFIG_DIR"
\ No newline at end of file
diff --git a/utils/info/README.md b/utils/info/README.md
new file mode 100644
index 0000000000..38d3c6dcf7
--- /dev/null
+++ b/utils/info/README.md
@@ -0,0 +1,13 @@
+## /info
+
+### [my-peer.sh](../info/my-peer.sh)
+
+This script will print out your peer-id: _node-id@ip-address:port_. This is useful for sharing your node with others so that they can add you as a persistent peer.
+
+Bear in mind that the _port_ being echo'd is extracted from the _config.toml_-file. So if you start the node on a different port without explicitly stating this in the _config.toml_-file, then the outputted port may not represent the actual port this node uses.
+
+```
+sh info/my-peer.sh
+```
+
+> Add a --local flag to echo a local IP address, instead of your (public) external address.
diff --git a/utils/info/my-peer.sh b/utils/info/my-peer.sh
new file mode 100644
index 0000000000..d09cce43dd
--- /dev/null
+++ b/utils/info/my-peer.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Source the _variables.sh file
+. "$(cd "$(dirname "$0")"/.. && pwd)/_variables.sh"
+
+# IP addresss
+if [ "$1" = "--local" ]; then
+ IP_ADDRESS="127.0.0.1"
+else
+ IP_ADDRESS=$(curl -s $IP_INFO_PROVIDER)
+fi
+
+# Find port of laddr in [p2p] section of config.toml
+PORT=$(grep -E "^\[p2p\]" -A 1000 $CONFIG_DIR/config.toml | grep "laddr = " | cut -d':' -f3 | cut -d'"' -f1 | head -n 1)
+
+# Echo node_id@ip_address:port
+echo "$($BINARY_NAME tendermint show-node-id)@$IP_ADDRESS:$PORT"
\ No newline at end of file
diff --git a/utils/key/README.md b/utils/key/README.md
new file mode 100644
index 0000000000..e064b48e06
--- /dev/null
+++ b/utils/key/README.md
@@ -0,0 +1,17 @@
+## /key
+
+### [create.sh](../key/create.sh)
+
+This script creates a _new_ key (or prompts to overwrite one if the _alias_ already exists).
+
+```
+sh key/create.sh
+```
+
+### [import.sh](../key/import.sh)
+
+This script imports an _existing_ key using the provided _private Ethereum key_.
+
+```
+sh key/import.sh
+```
diff --git a/utils/key/create.sh b/utils/key/create.sh
new file mode 100644
index 0000000000..2b2ec53e91
--- /dev/null
+++ b/utils/key/create.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Arguments check
+if [ -z "$1" ]; then
+ echo "Usage: sh $0 "
+ exit 1
+fi
+
+# Source the _variables.sh file
+. "$(cd "$(dirname "$0")"/.. && pwd)/_variables.sh"
+
+# Arguments
+KEY_ALIAS=$1
+
+# Create key
+$BINARY_NAME config keyring-backend os
+$BINARY_NAME keys add $KEY_ALIAS --keyring-backend os --algo eth_secp256k1
\ No newline at end of file
diff --git a/utils/key/import.sh b/utils/key/import.sh
new file mode 100644
index 0000000000..9e1edd1ae1
--- /dev/null
+++ b/utils/key/import.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Arguments check
+if [ -z "$1" ] || [ -z "$2" ]; then
+ echo "Usage: sh $0 "
+ exit 1
+fi
+
+# Source the _variables.sh file
+. "$(cd "$(dirname "$0")"/.. && pwd)/_variables.sh"
+
+# Arguments
+KEY_ALIAS=$1
+PRIVATE_ETH_KEY=$2
+
+# Import key
+$BINARY_NAME config keyring-backend os
+$BINARY_NAME keys unsafe-import-eth-key $KEY_ALIAS $PRIVATE_ETH_KEY --keyring-backend os
\ No newline at end of file
diff --git a/utils/service/README.md b/utils/service/README.md
new file mode 100644
index 0000000000..d57278cc3a
--- /dev/null
+++ b/utils/service/README.md
@@ -0,0 +1,17 @@
+## /service
+
+### [install.sh](../service/install.sh)
+
+This script installs the daemon as a service, which will automatically start the node whenever the device reboots. See the `$SERVICE_DIR` and `$SERVICE_FILE` variables in [\_variables.sh](../_variables.sh) to see which service gets installed.
+
+```
+sh service/install.sh
+```
+
+### [uninstall.sh](../service/uninstall.sh)
+
+This script uninstalls the daemon as a service. See the `$SERVICE_FILE` variable in [\_variables.sh](../_variables.sh) to see which service gets uninstalled.
+
+```
+sh service/uninstall.sh
+```
diff --git a/utils/service/install.sh b/utils/service/install.sh
new file mode 100644
index 0000000000..0b4840b737
--- /dev/null
+++ b/utils/service/install.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# Source the _variables.sh file
+. "$(cd "$(dirname "$0")"/.. && pwd)/_variables.sh"
+
+# Stop service if it exists
+systemctl stop $SERVICE_FILE
+
+# Install service
+cp $SERVICE_DIR/$SERVICE_FILE /etc/systemd/system/$SERVICE_FILE
+systemctl daemon-reload
+systemctl enable $SERVICE_FILE
\ No newline at end of file
diff --git a/utils/service/uninstall.sh b/utils/service/uninstall.sh
new file mode 100644
index 0000000000..5484a917c8
--- /dev/null
+++ b/utils/service/uninstall.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# Source the _variables.sh file
+. "$(cd "$(dirname "$0")"/.. && pwd)/_variables.sh"
+
+# Stop service if it exists
+systemctl stop $SERVICE_FILE
+
+# Uninstall service
+systemctl disable $SERVICE_FILE
+rm /etc/systemd/system/$SERVICE_FILE
+systemctl daemon-reload
\ No newline at end of file
diff --git a/utils/tools/README.md b/utils/tools/README.md
new file mode 100644
index 0000000000..c003b0cc0a
--- /dev/null
+++ b/utils/tools/README.md
@@ -0,0 +1,31 @@
+## /tools
+
+### [restate-sync.sh](../tools/restate-sync.sh)
+
+> [!CAUTION]
+> Only use this if the network your node is connected to supports state-sync!
+
+This tool recalibrates your state-sync configurations to a more recent height. **WARNING: this wipes your entire data folder, but will backup and restore the priv_validator_state.json file**. It uses the script(s) from the [`restate-sync`](https://github.com/zenodeapp/restate-sync/tree/v1.0.1) repository (`v1.0.1`). If in doubt whether this is safe, you could always check the repository to see how it works.
+
+```
+sh tools/restate-sync.sh [height_interval] [rpc_server_1] [rpc_server_2]
+```
+
+> [height_interval] is optional (default: 2000). This means it will set the trust_height to: latest_height - height_interval (rounded to nearest multiple of height_interval).
+>
+> [rpc_server_1] is optional (default: first rpc server configured in your config.toml file). If there is no rpc server configured, the script will abort.
+>
+> [rpc_server_2] is optional (default: rpc_server_1).
+
+> [!NOTE]
+> Leaving the __-arguments empty will leave the rpc_servers field in your config.toml untouched.
+
+### [port-shifter.sh](../tools/port-shifter.sh)
+
+This script is useful if you quickly want to replace the ports in the `client.toml`, `config.toml` and `app.toml` files. It uses the script(s) from the [`port-shifter`](https://github.com/zenodeapp/port-shifter/tree/v1.0.1) repository (`v1.0.1`). If in doubt whether this is safe, you could always check the repository to see how it works.
+
+```
+sh tools/port-shifter.sh
+```
+
+> is how much you would like to increment the value of the ports based on the default port values.
diff --git a/utils/tools/port-shifter.sh b/utils/tools/port-shifter.sh
new file mode 100644
index 0000000000..405236c392
--- /dev/null
+++ b/utils/tools/port-shifter.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+# PORT SHIFTER for client.toml, app.toml and config.toml files (Wrapper variant)
+# Original: https://github.com/zenodeapp/port-shifter
+# ZENODE (https://zenode.app)
+
+# Root of repository
+ROOT=$(cd "$(dirname "$0")"/.. && pwd)
+
+# Source the _variables.sh file
+. "$ROOT/_variables.sh"
+
+# Where the downloaded script has to be saved
+SAVE_AS="$ROOT/tools/_port-shifter.sh"
+
+# Repository where the port shifter resides
+VERSION=v1.0.1 # Added versioning for non-breaking changes and security measures
+EXTERNAL_REPO=https://raw.githubusercontent.com/zenodeapp/port-shifter/$VERSION
+
+# quick-shift.sh (simple variant, $1 is , e.g.: 1000)
+# See https://github.com/zenodeapp/port-shifter/blob/v1.0.1/quick-shift.sh
+wget -O $SAVE_AS $EXTERNAL_REPO/quick-shift.sh >/dev/null 2>&1
+# shift-wizard.sh (more advanced, if you prefer to edit individual ports)
+# See: https://github.com/zenodeapp/port-shifter/blob/v1.0.1/shift-wizard.sh
+# wget -O $SAVE_AS $EXTERNAL_REPO/shift-wizard.sh
+
+# Execute script
+sh $SAVE_AS "$CONFIG_DIR" $1
+
+# Capture the exit status of the script execution
+RESULT=$?
+
+# Cleanup
+rm $SAVE_AS
+
+# Exit the script with the captured exit status, indicating success (0) or failure (non-zero)
+exit $RESULT
diff --git a/utils/tools/restate-sync.sh b/utils/tools/restate-sync.sh
new file mode 100644
index 0000000000..ce29412c9f
--- /dev/null
+++ b/utils/tools/restate-sync.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# RESTATE SYNC for recalibrating to a more recent height (Wrapper variant)
+# Original: https://github.com/zenodeapp/restate-sync
+# ZENODE (https://zenode.app)
+
+# $1 is [height_interval] (default: 2000)
+# $2 is [rpc_server_1] (default: the first rpc configured in rpc_servers)
+# $3 is [rpc_server_2] (default: [rpc_server_1])
+
+# Root of repository
+ROOT=$(cd "$(dirname "$0")"/.. && pwd)
+
+# Source the _variables.sh file
+. "$ROOT/_variables.sh"
+
+# Where the downloaded script has to be saved
+SAVE_AS="$ROOT/tools/_restate-sync.sh"
+
+# Repository where the port shifter resides
+VERSION=v1.0.1 # Added versioning for non-breaking changes and security measures
+EXTERNAL_REPO=https://raw.githubusercontent.com/zenodeapp/restate-sync/$VERSION
+
+# restate-sync.sh
+# See https://github.com/zenodeapp/restate-sync/blob/v1.0.1/restate-sync.sh
+wget -O $SAVE_AS $EXTERNAL_REPO/restate-sync.sh >/dev/null 2>&1
+
+# Execute script
+sh $SAVE_AS "$BINARY_NAME" "$NODE_DIR_NAME" "$1" "$2" "$3"
+
+# Capture the exit status of the script execution
+RESULT=$?
+
+# Cleanup
+rm $SAVE_AS
+
+# Exit the script with the captured exit status, indicating success (0) or failure (non-zero)
+exit $RESULT
diff --git a/x/cronos/keeper/keeper_test.go b/x/cronos/keeper/keeper_test.go
index fea2371939..9797774326 100644
--- a/x/cronos/keeper/keeper_test.go
+++ b/x/cronos/keeper/keeper_test.go
@@ -425,7 +425,8 @@ func (suite *KeeperTestSuite) TestRegisterOrUpdateTokenMapping() {
suite.app.CronosKeeper = cronosKeeper
tc.malleate()
- err := suite.app.CronosKeeper.RegisterOrUpdateTokenMapping(suite.ctx, &tc.msg)
+ msg := tc.msg
+ err := suite.app.CronosKeeper.RegisterOrUpdateTokenMapping(suite.ctx, &msg)
if tc.error {
suite.Require().Error(err)
} else {
diff --git a/x/cronos/keeper/mock/ibckeeper_mock.go b/x/cronos/keeper/mock/ibckeeper_mock.go
index 61cbd34798..66b71a7cbc 100644
--- a/x/cronos/keeper/mock/ibckeeper_mock.go
+++ b/x/cronos/keeper/mock/ibckeeper_mock.go
@@ -14,6 +14,7 @@ func (i IbcKeeperMock) SendTransfer(ctx sdk.Context, sourcePort, sourceChannel s
}
func (i IbcKeeperMock) GetDenomTrace(ctx sdk.Context, denomTraceHash tmbytes.HexBytes) (types.DenomTrace, bool) {
+ // #nosec G101
if denomTraceHash.String() == "6B5A664BF0AF4F71B2F0BAA33141E2F1321242FBD5D19762F541EC971ACB0865" {
return types.DenomTrace{
Path: "transfer/channel-0",
diff --git a/x/cronos/rpc/api.go b/x/cronos/rpc/api.go
index 26847266db..d56a9d2ecb 100644
--- a/x/cronos/rpc/api.go
+++ b/x/cronos/rpc/api.go
@@ -16,12 +16,12 @@ import (
"github.com/ethereum/go-ethereum/rpc"
evmrpc "github.com/evmos/ethermint/rpc"
"github.com/evmos/ethermint/rpc/backend"
+ "github.com/evmos/ethermint/rpc/stream"
rpctypes "github.com/evmos/ethermint/rpc/types"
ethermint "github.com/evmos/ethermint/types"
evmtypes "github.com/evmos/ethermint/x/evm/types"
"github.com/tendermint/tendermint/libs/log"
coretypes "github.com/tendermint/tendermint/rpc/core/types"
- rpcclient "github.com/tendermint/tendermint/rpc/jsonrpc/client"
)
const (
@@ -40,7 +40,7 @@ func init() {
}
// CreateCronosRPCAPIs creates extension json-rpc apis
-func CreateCronosRPCAPIs(ctx *server.Context, clientCtx client.Context, tmWSClient *rpcclient.WSClient, allowUnprotectedTxs bool, indexer ethermint.EVMTxIndexer) []rpc.API {
+func CreateCronosRPCAPIs(ctx *server.Context, clientCtx client.Context, _ *stream.RPCStream, allowUnprotectedTxs bool, indexer ethermint.EVMTxIndexer) []rpc.API {
evmBackend := backend.NewBackend(ctx, ctx.Logger, clientCtx, allowUnprotectedTxs, indexer)
return []rpc.API{
{